[Mageia-dev] puppet and the urpmi config
Olivier Thauvin
nanardon at nanardon.zarb.org
Wed Jul 18 14:29:06 CEST 2012
Hello,
As sys admin I use puppet to push config to servers.
It is very simple, puppet detect a file is not the same than the
reference, copy the file, restart the daemon or trigger a command if
need.
Here come urpmi, can you push by force the urpmi.cfg and make it work
using some --force and --do-it-even-it-is-really-not-clean but each time
an urpmi command is called the config file written again.
Then the file is changed, making puppet updating the urpmi.cfg again and
again.
To avoid this problem I wrote the attached script: it take as argument
the path to an urpmi.cfg and synchronize the config found with the real
urpmi.cfg.
- removed media are removed properly
- the media.cfg used as template is unchanged
- urpmi.update is called to update the index
- urpmi base is locked to avoid race condition
In cases this can be usefull.
Ideas and patches welcome.
--
Olivier Thauvin
CNRS - LATMOS
♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖
-------------- next part --------------
#!/usr/bin/perl
use strict;
use warnings;
use urpm;
use urpm::cfg;
use urpm::media;
use urpm::args;
use urpm::download;
use Getopt::Long;
use Pod::Usage;
GetOptions(
help => sub { pod2usage() },
);# or pod2sage(1);
my ($config) = @ARGV;
my $template = urpm::cfg::load_config($config);
{
my $urpm = urpm->new_parse_cmdline or exit(1);
my $_urpmi_lock = urpm::lock::urpmi_db(
$urpm,
'exclusive',
wait => 1,
);
urpm::media::read_config($urpm);
my %media_to_update = ();
foreach my $medium (@{ $urpm->{media} || [] }) {
my ($tlpmedia) = (grep { $_->{name} eq $medium->{name} }
@{ $template->{media} || [] });
if (! $tlpmedia) {
my @selected = urpm::media::select_media_by_name($urpm, [ $medium->{name} ],
!$urpm->{options}{fuzzy});
urpm::media::remove_media($urpm, \@selected);
} else {
%{ $medium } = ();
%{ $medium } = %{ $tlpmedia };
}
}
foreach my $medium (@{ $template->{media} || [] }) {
if (!grep { $_->{name} eq $medium->{name} }
(@{ $urpm->{media} || [] })) {
push(@{ $urpm->{media} }, $medium);
}
}
$urpm->{modified} = 1;
urpm::media::write_config($urpm);
}
system('/usr/sbin/urpmi.update', '-a', '-q');
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: </pipermail/mageia-dev/attachments/20120718/16773ec7/attachment.asc>
More information about the Mageia-dev
mailing list