Je commence par ansible et l’utiliserai, entre autres, pour installer des paquets sur plusieurs distributions Linux.
Je vois dans la documentation que les commandes yum
et apt
sont séparées - quel serait le moyen le plus simple de les unifier et d’utiliser quelque chose comme ceci:
- name: install the latest version of Apache
unified_install: name=httpd state=latest
au lieu de
- name: install the latest version of Apache on CentOS
yum: name=httpd state=latest
when: ansible_os_family == "RedHat"
- name: install the latest version of Apache on Debian
apt: pkg=httpd state=latest
when: ansible_os_family == "Debian"
Je comprends que les deux gestionnaires de paquets sont différents, mais ils ont toujours un ensemble d’utilisations de base communes. Les autres orchestres ( salt, par exemple ) ont une seule commande d'installation.
Réponses:
Mise à jour: à partir de Ansible 2.0, il existe maintenant un module générique et résumé
package
Exemples d'utilisation:
Désormais, lorsque le nom du package est identique dans différentes familles de systèmes d'exploitation, il suffit de:
Lorsque le nom du package diffère selon les familles de systèmes d'exploitation, vous pouvez le gérer avec des fichiers vars de distribution ou de familles de systèmes d'exploitation:
Ensuite, pour chaque système d'exploitation que vous devez gérer différemment ... créez un fichier vars:
EDIT:
Depuis que Michael DeHaan (créateur d’Ansible) a choisi de ne pas faire abstraction des modules de gestion de paquets comme le fait Chef ,Si vous utilisez toujours une ancienne version de Ansible (Ansible <2.0) , vous devrez malheureusement le faire dans tous vos playbooks et rôles. IMHO, cela impose beaucoup de travail répétitif inutile sur les auteurs de playbooks et de rôles ... mais c'est comme ça actuellement. Notez que je ne dis pas que nous devrions essayer d’abstraire les gestionnaires de paquets tout en essayant de prendre en charge toutes leurs options et commandes spécifiques, mais simplement un moyen facile d’installer un paquet qui n’est pas agnostique. Je ne dis pas non plus que nous devrions tous sauter dans le gestionnaire de paquets intelligent.Cela dit, une couche d’abstraction pour l’installation de paquetages dans votre outil de gestion de la configuration est très utile pour simplifier les livres de lecture / livres de cuisine multiplates-formes. Le projet Smart semble intéressant, mais il est assez ambitieux d’unifier la gestion des paquets entre les distributrices et les plates-formes sans grande adoption pour le moment… il sera intéressant de voir s’il a du succès. Le vrai problème, c'est que les noms de paquets ont parfois tendance à être différents d'une distribution à l'autre. Nous devons donc toujours faire des déclarations de cas ou des
when:
déclarations pour gérer les différences.La façon dont je l'ai traitée est de suivre cette
tasks
structure de répertoire dans un livre de lecture ou un rôle:Et puis avoir ceci dans mon
main.yml
:Ceci dans
foo.yml
(pour le paquet 'foo'):Ensuite pour les différents gestionnaires de paquets:
Apte:
Miam:
Homebrew:
Notez que ceci est terriblement répétitif et non DRY , et bien que certaines choses puissent être différentes sur les différentes plates-formes et devront être gérées, généralement je pense que cela est verbeux et difficile à manier par rapport à Chef's:
Et oui, il y a l'argument selon lequel certains noms de paquetages sont différents d'une distribution à l'autre. Et bien qu’il existe actuellement un manque de données facilement accessibles , je me risquerais à deviner que les noms de paquets les plus populaires sont communs à toutes les distributions et qu’ils pourraient être installés via un module de gestionnaire de paquets abstraite. Les cas spéciaux devront de toute façon être traités et nécessiteront déjà un travail supplémentaire rendant les choses moins sèches . En cas de doute, vérifiez pkgs.org .
la source
Vous pouvez extraire les gestionnaires de paquets via des faits
Tout ce dont vous avez besoin est d’une certaine logique qui vous amène
ansible_pkg_mgr
àapt
ouyum
etc.Ansible travaille également sur ce que vous voulez dans un futur module .
la source
ansible_pkg_mgr
pour tous les emballeurs qu’il connaît. Il n'est pas nécessaire que vous fassiez quoi que ce soit. J'utilise cette construction particulière partout.À partir de Ansible 2.0, il y a le nouveau
Package
-modul.http://docs.ansible.com/ansible/package_module.html
Vous pouvez ensuite l'utiliser comme votre proposition:
Vous devez toujours prendre en compte les différences de nom.
la source
Consultez la documentation de Ansible sur les importations conditionnelles .
Une tâche consiste à s’assurer que Apache est en cours d’exécution même si les noms de service sont différents d’un système à l’autre.
la source
Vous ne voulez pas faire cela parce que certains noms de paquetages diffèrent entre les distributions. Par exemple, sur les distributions liées à RHEL, le paquet de serveur Web populaire porte le nom
httpd
, alors que sur les distributions liées à Debian, il est nomméapache2
. De même avec une liste énorme d'autres bibliothèques système et de soutien.Il peut exister un ensemble de paramètres de base communs, mais il existe également un certain nombre de paramètres plus avancés qui diffèrent entre les gestionnaires de packages. Et vous ne voulez pas être dans une situation ambiguë dans laquelle vous utiliserez une syntaxe pour certaines commandes et une autre pour une autre.
la source
salt
parvient à unifier les deux gestionnaires de paquets. Quoi qu'il en soit, je vais recourir à une double configuration, alors.