Nous voulons faire en sorte que le dépôt EPEL soit activé (enabled) pour permettre les mises à jour système avec la base. Mais, on veut limiter les choses aux seuls paquets installés pour ne pas risquer que les mises à jours incluent des paquets autres.
L'idée est donc d'activer le dépôt et d'ajouter une directive includepkgs
listant l'ensemble des paquets EPEL déjà installés.
Une commande qui semble faire ce qu'il faut :
yum --color=never list installed | \grep '@epel' | grep -vP '^\s+' | awk '{print $1}' | sed -re 's/\.[^.]+$//' |
Cette commane liste l'ensemble des paquets installés puis les filtre par rapport au dépôt EPEL, on enlève ensuite les lignes sans nom de paquet et on ne garde que ce nom dont on enlève le .x86_64
ou .noarch
et autre .686
.
Le code suivant va produire un plugin qui va être distribué sur toutes les machines clientes puppet. C'est pour cette raison qu'il est nécessaire de limiter l'exécution de la commande aux seules machines de la famille RedHat. |
# in file: /etc/puppet/modules/yum/lib/facter/paquets_epel.rb # # Fait seulement valable sur les machines de la famille RedHat Facter.add(:epel_packages) do setcode do result = case Facter.value('osfamily') when 'RedHat' %x{yum --color=never list installed | \grep '@epel' | grep -vP '^\s+' | awk '{print $1}' | sed -re 's/\.[^.]+$//' | tr '\n' ' '}.chomp else nil end end end |
# paquets_epel.pp - yum # L'objectif de cette classe est de faire en sorte de trouver # l'ensemble des paquets EPEL installés sur la machine et les # positionner dans /etc/yum.repos.d/epel.repo # Pour cela, il faut aussi un fait associé téléchargé avec # cette classe. class yum::paquets_epel { if (($::operatingsystem =~ /(CentOS|RedHat)/) and ($::operatingsystemrelease =~ /(^5|^6)/)) { notify {"[debug] paquets EPEL dans facter":} yumrepo { 'epel': name => 'epel', enabled => '1', includepkgs => $::epel_packages, descr => 'Extra Packages for Enterprise Linux 6 - $basearch', mirrorlist => 'https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch', failovermethod => 'priority', gpgcheck => '1', gpgkey => 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6', } } else { notify {"[Erreur] OS non supporté (${::operatingsystem} - ${::operatingsystemrelease})":} } } |
|