IBM developerWorks: Automating UNIX system administration with Perl
Jul 22, 2001, 22:00 (1 Talkback[s])
(Other stories by Teodor Zlatanov)
Re-Imagining Linux Platforms to Meet the Needs of Cloud Service Providers
[ Thanks to Kellie
for this link. ]
Using perl and cfengine, this article sets out to assist in UNIX
(and Linux) system administration. Includes plenty of code samples
and lists a large number of areas where cfengine can assist in
maintaining a system:
"Managing configuration files is tough. You can start
by considering whether cfengine is adequate for the task.
Unfortunately, cfengine's editing is line oriented, so complex
configuration files will probably not be a good match for it. But
simple files such as the TCP wrappers configuration file
/etc/hosts.allow are best done through cfengine.
Usually, you will want to keep more than one version of
configuration files. For instance, you may need two sets of DNS
configurations in /etc/resolv.conf, one for external, and another
for internal machines. The external DNS resolv.conf file could,
naturally, go into a directory called "external", while the
internal resolv.conf could go into the corresponding "internal"
directory. Let's assume both directories are under a global "spec"
directory, which is a sort of root for configuration files.
The following code will traverse the spec directory, searching
for a filename suitable for a given machine. It will start at
/usr/local/spec and go down, looking for files that match the one
requested. Furthermore, it will check whether or not each
directory's name is the same as the class belonging to some
machine. Thus, if we request locate_global('resolv.conf', 'wonka'),
the function will look under /usr/local/spec for files named
resolv.conf that are in either the root directory, or in children
of the root directory whose names match the classes that the
"wonka" machine belongs to. So, if "wonka" belongs to the
"chocolate" class, and if there is a
/usr/local/spec/chocolate/resolv.conf file, then locate_global()
will return "/usr/local/spec/chocolate/resolv.conf."