I think you should move away from custom scripts for configuration management and consider the excellent choice of ready made tools: CFEngine, Puppet, Chef, and Ansible to name a few.
I do much consulting on CFEngine, feel free to drop me a line if you have questions.
I do sometimes have to maintain Perl programs that work with multiple versions. Usually, you have to make the program work on the system that has the oldest Perl installed, the later versions of Perl will usually accept this code without complaint, but you can't be too careful. TEST, TEST, TEST.
| [reply] |
| [reply] |
Also, in any multi-machine and especially multi-architecture “shop,” it is an excellent idea to standardize all of the authorization and authentication duties upon a well-known industry standard, such as LDAP (Active Directory®) or Kerberos. Then, you can manage all user accounts from a single authoritative source, and provide for “single sign-on” capability across all platforms. You no longer have to “roll your own” administrative interfaces for this.
| |
Another way to do this in Perl.
$system=`uname`;
if ($system=~m/Linux/i)
{print "Linux\n";
}
elsif ($system=~m/Solaris/)
{
print "Solaris\n";
}
elsif ($system=~m/AIX/)
{
print "AIX\n";
}
else {
print "Unknown OS\n";
}
Perl 5.8.8 on Redhat Linux RHEL 5.5.56 (64-bit)
| [reply] |
Perl already knows your OS, $^O.
And are you kidding me with that if/else travesty?
If a small scale change, use a hash of subroutine references to make dispatching easy.
If you have time, create a parent class and subclass out to each OS (again, if you really have to do different things on each OS).
use strict;
my $os_dispatch = {
linux => sub {print qq{Linux\n}},
solaris => sub {print qq{Solaris\n}},
aix => sub {print qq{AIX\n}},
freebsd => sub {print qq{FreeBSD\n}},
darwin => sub {print qq{MacOSX\n}},
unknown => sub {print qq{Unknown\n}},
};
if (exists $os_dispatch->{$^O}) {
$os_dispatch->{$^O}->();
}
else {
$os_dispatch->{unknown}->();
}
Finally, do you really have to do that much OS specific stuff? | [reply] [d/l] [select] |