Revert "Squashed commit of the following:"
This reverts commit 232df96457.
This commit is contained in:
6
Changes
6
Changes
@@ -1,9 +1,3 @@
|
|||||||
2.040000 - 2018-05
|
|
||||||
|
|
||||||
[ENHANCEMENTS]
|
|
||||||
|
|
||||||
* #408 improvements to MakeRancidConf (earendilfr)
|
|
||||||
|
|
||||||
2.039028 - 2018-05-05
|
2.039028 - 2018-05-05
|
||||||
|
|
||||||
[BUG FIXES]
|
[BUG FIXES]
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ use aliased 'App::Netdisco::Worker::Status';
|
|||||||
|
|
||||||
use Path::Class;
|
use Path::Class;
|
||||||
use List::Util qw/pairkeys pairfirst/;
|
use List::Util qw/pairkeys pairfirst/;
|
||||||
use File::Slurper qw/read_lines write_text/;
|
use File::Slurper 'write_text';
|
||||||
use App::Netdisco::Util::Permission 'check_acl_no';
|
use App::Netdisco::Util::Permission 'check_acl_no';
|
||||||
|
|
||||||
register_worker({ phase => 'main' }, sub {
|
register_worker({ phase => 'main' }, sub {
|
||||||
@@ -16,29 +16,15 @@ register_worker({ phase => 'main' }, sub {
|
|||||||
my $config = setting('rancid') || {};
|
my $config = setting('rancid') || {};
|
||||||
|
|
||||||
my $domain_suffix = setting('domain_suffix') || '';
|
my $domain_suffix = setting('domain_suffix') || '';
|
||||||
my $delimiter = $config->{delimiter} || ';';
|
my $delimiter = $config->{delimiter} || ':';
|
||||||
my $down_age = $config->{down_age} || '1 day';
|
my $down_age = $config->{down_age} || '1 day';
|
||||||
my $default_group = $config->{default_group} || 'default';
|
|
||||||
|
|
||||||
my $rancidconf = $config->{rancid_conf} || '/etc/rancid';
|
|
||||||
my $rancidhome = $config->{rancid_home}
|
my $rancidhome = $config->{rancid_home}
|
||||||
|| dir($ENV{NETDISCO_HOME}, 'rancid')->stringify;
|
|| dir($ENV{NETDISCO_HOME}, 'rancid')->stringify;
|
||||||
mkdir $rancidhome if ! -d $rancidhome;
|
mkdir $rancidhome if ! -d $rancidhome;
|
||||||
return Status->error("cannot create or see rancid home: $rancidhome")
|
return Status->error("cannot create or see rancid home: $rancidhome")
|
||||||
if ! -d $rancidhome;
|
if ! -d $rancidhome;
|
||||||
|
|
||||||
my $allowed_types = {};
|
|
||||||
foreach my $type (qw/base conf/) {
|
|
||||||
my $type_file = file($rancidconf, "rancid.types.$type")->stringify;
|
|
||||||
next unless -f $type_file;
|
|
||||||
my @lines = read_lines($type_file);
|
|
||||||
foreach my $line (@lines) {
|
|
||||||
next if $line =~ m/^(?:\#|\$)/;
|
|
||||||
$allowed_types->{$1} += 1
|
|
||||||
if $line =~ m/^([-a-z0-9_]+);login;.*$/;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
my $devices = schema('netdisco')->resultset('Device')->search(undef, {
|
my $devices = schema('netdisco')->resultset('Device')->search(undef, {
|
||||||
'+columns' => { old =>
|
'+columns' => { old =>
|
||||||
\['age(now(), last_discover) > ?::interval', $down_age] },
|
\['age(now(), last_discover) > ?::interval', $down_age] },
|
||||||
@@ -46,39 +32,23 @@ register_worker({ phase => 'main' }, sub {
|
|||||||
|
|
||||||
$config->{groups} ||= { default => 'any' };
|
$config->{groups} ||= { default => 'any' };
|
||||||
$config->{vendormap} ||= {};
|
$config->{vendormap} ||= {};
|
||||||
$config->{excluded} ||= {};
|
|
||||||
|
|
||||||
my $routerdb = {};
|
my $routerdb = {};
|
||||||
while (my $d = $devices->next) {
|
while (my $d = $devices->next) {
|
||||||
|
|
||||||
if (check_acl_no($d, $config->{excluded})) {
|
|
||||||
debug " skipping $d: device excluded from export";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $name =
|
my $name =
|
||||||
check_acl_no($d, $config->{by_ip}) ? $d->ip : ($d->dns || $d->name);
|
check_acl_no($d, $config->{by_ip}) ? $d->ip : ($d->dns || $d->name);
|
||||||
$name =~ s/$domain_suffix$//
|
$name =~ s/$domain_suffix$//
|
||||||
if check_acl_no($d, $config->{by_hostname});
|
if check_acl_no($d, $config->{by_hostname});
|
||||||
|
|
||||||
my ($group) =
|
my ($group) =
|
||||||
(pairkeys pairfirst { check_acl_no($d, $b) } %{ $config->{groups} })
|
pairkeys pairfirst { check_acl_no($d, $b) } %{ $config->{groups} };
|
||||||
|| $default_group;
|
|
||||||
|
|
||||||
my ($vendor) =
|
my ($vendor) =
|
||||||
(pairkeys pairfirst { check_acl_no($d, $b) } %{ $config->{vendormap} })
|
(pairkeys pairfirst { check_acl_no($d, $b) } %{ $config->{vendormap} })
|
||||||
|| $d->vendor;
|
|| $d->vendor;
|
||||||
|
|
||||||
if (not ($name and $vendor)) {
|
if ($vendor =~ m/(?:enterprises\.|netdisco)/) {
|
||||||
debug " skipping $d: the name or vendor is not defined";
|
debug " skipping $d with unresolved vendor: $vendor";
|
||||||
next;
|
|
||||||
|
|
||||||
} elsif ($vendor =~ m/(?:enterprises\.|netdisco)/) {
|
|
||||||
debug " skipping $d: unresolved vendor $vendor";
|
|
||||||
next;
|
|
||||||
|
|
||||||
} elsif (scalar keys %$allowed_types and !exists $allowed_types->{$vendor}) {
|
|
||||||
debug " skipping $d: $vendor does not exist in RANCiD's vendor list";
|
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,9 +59,7 @@ register_worker({ phase => 'main' }, sub {
|
|||||||
|
|
||||||
foreach my $group (keys %$routerdb) {
|
foreach my $group (keys %$routerdb) {
|
||||||
mkdir dir($rancidhome, $group)->stringify;
|
mkdir dir($rancidhome, $group)->stringify;
|
||||||
my $content = "#\n# Router list file for RANCID group $group.\n";
|
my $content = join "\n", @{$routerdb->{$group}};
|
||||||
$content .= "# Generated automatically by App::Netdisco::Worker::Plugin::MakeRancidConf\n#\n";
|
|
||||||
$content .= join "\n", @{$routerdb->{$group}};
|
|
||||||
write_text(file($rancidhome, $group, 'router.db')->stringify, "${content}\n");
|
write_text(file($rancidhome, $group, 'router.db')->stringify, "${content}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,24 +95,19 @@ Here is a complete example of the configuration, which must be called
|
|||||||
|
|
||||||
rancid:
|
rancid:
|
||||||
rancid_home: "$ENV{NETDISCO_HOME}/rancid" # default
|
rancid_home: "$ENV{NETDISCO_HOME}/rancid" # default
|
||||||
rancid_conf: '/etc/rancid' # default
|
|
||||||
down_age: '1 day' # default
|
down_age: '1 day' # default
|
||||||
delimiter: ';' # default
|
delimiter: ':' # default
|
||||||
default_group: 'default' # default
|
|
||||||
excluded:
|
|
||||||
excludegroup1: 'host_group1_acl'
|
|
||||||
excludegroup2: 'host_group2_acl'
|
|
||||||
groups:
|
groups:
|
||||||
groupname1: 'host_group3_acl'
|
groupname1: 'host_group1_acl'
|
||||||
groupname2: 'host_group4_acl'
|
groupname2: 'host_group2_acl'
|
||||||
vendormap:
|
vendormap:
|
||||||
vname1: 'host_group5_acl'
|
vname1: 'host_group3_acl'
|
||||||
vname2: 'host_group6_acl'
|
vname2: 'host_group4_acl'
|
||||||
by_ip: 'host_group7_acl'
|
by_ip: 'host_group5_acl'
|
||||||
by_hostname: 'host_group8_acl'
|
by_hostname: 'host_group6_acl'
|
||||||
|
|
||||||
Note that the default home for writing files is not "C</var/lib/rancid>" so
|
Note that the default home for writing files is not "C</var/lib/rancid>" so
|
||||||
you may wish to set this in C<rancid_home>, (especially if migrating from the old
|
you may wish to set this (especially if migrating from the old
|
||||||
C<netdisco-rancid-export> script).
|
C<netdisco-rancid-export> script).
|
||||||
|
|
||||||
Any values above that are a Host Group ACL will take either a single item or
|
Any values above that are a Host Group ACL will take either a single item or
|
||||||
@@ -167,11 +130,6 @@ and then refer to named entries in that, for example:
|
|||||||
The location to write RANCID Group configuration files into. A subdirectory
|
The location to write RANCID Group configuration files into. A subdirectory
|
||||||
for each Group will be created.
|
for each Group will be created.
|
||||||
|
|
||||||
=head2 C<rancid_conf>
|
|
||||||
|
|
||||||
The location (optional) of your RANCID configuration. It will be used to check
|
|
||||||
the device's vendor parameter before the export to RANCID configuration.
|
|
||||||
|
|
||||||
=head2 C<down_age>
|
=head2 C<down_age>
|
||||||
|
|
||||||
This should be the same or greater than the interval between regular discover
|
This should be the same or greater than the interval between regular discover
|
||||||
@@ -186,19 +144,6 @@ L<https://www.postgresql.org/docs/8.4/static/functions-datetime.html>.
|
|||||||
Set this to the delimiter character if needed to be different from the
|
Set this to the delimiter character if needed to be different from the
|
||||||
default.
|
default.
|
||||||
|
|
||||||
=head2 C<default_group>
|
|
||||||
|
|
||||||
Put devices into this group if they do not match other groups defined.
|
|
||||||
|
|
||||||
=head2 C<excluded>
|
|
||||||
|
|
||||||
This dictionary defines a list of devices that you do not wish to export to
|
|
||||||
RANCID configuration.
|
|
||||||
|
|
||||||
The value should be a L<Netdisco
|
|
||||||
ACL|https://github.com/netdisco/netdisco/wiki/Configuration#access-control-lists>
|
|
||||||
to select devices in the Netdisco database.
|
|
||||||
|
|
||||||
=head2 C<groups>
|
=head2 C<groups>
|
||||||
|
|
||||||
This dictionary maps RANCID Group names with configuration which will match
|
This dictionary maps RANCID Group names with configuration which will match
|
||||||
|
|||||||
Reference in New Issue
Block a user