Estoy comenzando con ansible y lo usaré , entre otros, para instalar paquetes en varias distribuciones de Linux.
Veo en los documentos que los comandos yum
y apt
están separados: cuál sería la forma más fácil de unificarlos y usar algo como esto:
- name: install the latest version of Apache
unified_install: name=httpd state=latest
en lugar 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"
Entiendo que los dos administradores de paquetes son diferentes, pero aún tienen un conjunto de usos básicos comunes. Otros orquestadores ( sal, por ejemplo ) tienen un solo comando de instalación.
Respuestas:
Actualización: a partir de Ansible 2.0, ahora hay un módulo genérico y abstracto
package
Ejemplos de uso:
Ahora, cuando el nombre del paquete es el mismo en diferentes familias de sistemas operativos, es tan simple como:
Cuando el nombre del paquete difiere entre las familias del sistema operativo, puede manejarlo con distribución o archivos vars específicos de la familia del sistema operativo:
Luego, para cada sistema operativo que debe manejar de manera diferente ... cree un archivo vars:
EDITAR:
dado que Michael DeHaan (creador de Ansible) ha elegido no resumir los módulos del administrador de paquetes como lo hace Chef ,Si todavía usa una versión anterior de Ansible (Ansible <2.0) , desafortunadamente tendrá que manejar esto en todos sus libros de jugadas y roles. En mi humilde opinión, esto empuja mucho trabajo repetitivo innecesario en el libro de jugadas y los autores de roles ... pero es como es actualmente. Tenga en cuenta que no estoy diciendo que debamos tratar de abstraer los administradores de paquetes mientras intentamos admitir todas sus opciones y comandos específicos, sino simplemente tener una manera fácil de instalar un paquete que sea independiente del administrador de paquetes. Tampoco estoy diciendo que todos deberíamos saltar al Smart Package Manager, pero que algún tipo de capa de abstracción de instalación de paquetes en su herramienta de administración de configuración es muy útil para simplificar libros de cocina / libros de cocina multiplataforma. El proyecto Smart parece interesante, pero es bastante ambicioso unificar la gestión de paquetes en distribuciones y plataformas sin mucha adopción todavía ... será interesante ver si tiene éxito. El problema real es solo que los nombres de paquetes a veces tienden a ser diferentes en las distribuciones, por lo que todavía tenemos que hacer declaraciones de casos o
when:
declaraciones para manejar las diferencias.La forma en que lo he tratado es seguir esta
tasks
estructura de directorios en un libro de jugadas o rol:Y luego tener esto en mi
main.yml
:Esto en
foo.yml
(para el paquete 'foo'):Luego para los diferentes gestores de paquetes:
Apto:
Mmm:
Cerveza casera:
Tenga en cuenta que esto es terriblemente repetitivo y no SECO , y aunque algunas cosas pueden ser diferentes en las diferentes plataformas y tendrán que manejarse, en general creo que esto es detallado y difícil de manejar en comparación con Chef:
Y sí, existe el argumento de que algunos nombres de paquetes son diferentes en las distribuciones. Y aunque actualmente hay una falta de datos fácilmente accesibles , me aventuraría a adivinar que los nombres de paquetes más populares son comunes en todas las distribuciones y podrían instalarse a través de un módulo de administrador de paquetes abstraído. Los casos especiales tendrían que manejarse de todos modos, y ya requerirían un trabajo extra para que las cosas sean menos SECAS. En caso de duda, consulte pkgs.org .
fuente
Puede resumir los administradores de paquetes a través de hechos
Todo lo que necesitas es alguna lógica que se establezca
ansible_pkg_mgr
enapt
oyum
etc.Ansible también está trabajando para hacer lo que quiere en un módulo futuro .
fuente
ansible_pkg_mgr
para cualquier empaquetador que conozca. No es necesario que hagas nada. Yo uso esta construcción particular en todas partes.De Ansible 2.0 está el nuevo
Package
-modul.http://docs.ansible.com/ansible/package_module.html
Luego puede usarlo como su propuesta:
Aún debe considerar las diferencias de nombre.
fuente
Consulte la documentación de Ansible sobre Importaciones condicionales .
Una tarea para garantizar que apache se esté ejecutando incluso si los nombres de los servicios son diferentes en cada sistema operativo.
fuente
No desea hacer eso porque ciertos nombres de paquetes difieren entre las distribuciones. Por ejemplo, en las distribuciones relacionadas con RHEL se nombra el popular paquete de servidor web
httpd
, mientras que en las distribuciones relacionadas con Debian se nombraapache2
. Del mismo modo, con una gran lista de otros sistemas y bibliotecas de soporte.Puede haber un conjunto de parámetros básicos comunes, pero también hay una serie de parámetros más avanzados que son diferentes entre los administradores de paquetes. Y no desea estar en una situación ambigua en la que para algunos comandos use una sintaxis y para otros comandos use otra sintaxis.
fuente
salt
arregla para unificar ambos administradores de paquetes. De todos modos, recurriré a una configuración doble, entonces.