Y a-t-il un moyen de forcer la marionnette à faire certaines choses en premier? Par exemple, j'en ai besoin pour installer un RPM sur tous les serveurs pour ajouter un référentiel Yum (communauté IUS) avant d'installer l'un des packages.
Si vous souhaitez vous assurer qu'un référentiel est installé sur tout votre serveur, je suggérerais quelque chose comme ça
node default {
include base
}
class base {
yumrepo { "IUS":
baseurl => "http://dl.iuscommunity.org/pub/ius/stable/$operatingsystem/$operatingsystemrelease/$architecture",
descr => "IUS Community repository",
enabled => 1,
gpgcheck => 0
}
}
Ensuite, pour tout nœud qui s'étend base
vous pouvez dire
class foo {
package { "bar": ensure => installed, require => Yumrepo["IUS"] }
}
Cela garantira que
bar
_ ne sera pas installé que si le référentiel IUS n'est définiBien que les étapes puissent gérer cela et que les dépendances spécifiques de Yum Repo peuvent mieux, c'est mieux déclarer la relation générique.
Juste mettre Yumrepo <| |> -> Package <| provider != 'rpm' |>
Dans votre manifeste de marionnette.
node default {
Yumrepo <| |> -> Package <| provider != 'rpm' |>
}
Cela le rend afin que tous les types de Yumrepo soient traités avant tout emballage qui ne dispose pas de "RPM" comme fournisseur. Cette dernière exclusion est de savoir que je peux utiliser l'emballage RPM (par exemple) EPELL-RELAVE pour aider à installer le député miam.
(J'ai trouvé cette question après avoir répondu presque le même .. Alors pensais que ma réponse s'applique également ici et cela vaut la peine de le répéter (il est plus sûr d'avoir une réponse à deux endroits ..)
Pour autant que je sache, c'est exactement ce que étapes Sont pour - ils vous permettent de grouper et d'ordonner des exécutions de classe. J'utilise des "étapes" pour mettre à jour et configurer APT chez Debian Servers, qui devrait être très similaire à ce que vous allez faire avec Yum.
Tout d'abord, vous déclarez une étape "miam" au niveau supérieur (ci-dessus "noeuds"), de sorte que les classes de la scène "miam" seront exécutées avant les "principaux":
stage { 'yum' : before => Stage['main'] }
Ensuite, vous attribuez une étape aux classes. Vous pouvez le faire dans votre définition de nœud:
node default {
class { 'yumrepos' : stage => yum }
include packages
}
Vous pouvez utiliser Tags . Cela vous permettrait de marquer l'installateur de repo avec firstrun
ou quelque chose,
puis courir
puppetd --tags firstrun
et cela n'exécuterait que les modules/déclarations correspondant à la balise.
Puppet lit la configuration de haut en bas, donc si vous incluez une classe avec le Yum Repo d'abord dans cette classe, ce repo sera ajouté avant toute autre chose.
Si vous utilisez les paramètres requis sur un package, vous vous assurerez que le type de ressource requis est présent avant d'ajouter le package, comme tel:
node 'yournode.domain.com' {
package { "bar": ensure => installed, require => Yumrepo["IUS"] }
yumrepo { "IUS":
baseurl => "http://dl.iuscommunity.org/pub/ius/stable/$operatingsystem/$operatingsystemrelease/$architecture",
descr => "IUS Community repository",
enabled => 1,
gpgcheck => 0
}
}
Ce code ci-dessus ajoutera le repo avant d'ajouter le package.
Quelque chose comme ça a fonctionné pour moi:
yumrepo { A:
descr => "A repo",
baseurl => '',
enabled => 1,
gpgcheck => 1,
gpgkey => "",
priority => 3
}
yumrepo { B:
descr => "B repo",
baseurl => '',
enabled => 1,
gpgcheck => 1,
gpgkey => "",
priority => 3
}
yumrepo { C:
descr => "C repo",
baseurl => '',
enabled => 1,
gpgcheck => 1,
gpgkey => "",
priority => 3;
}
Package {
require => [Yumrepo[A], Yumrepo[B], Yumrepo[C]]
}
J'ai inclus quelque chose comme ça sur mysite.pp. De cette manière, vos modules de marionnettes, sont exempts de références à Yum Repos.