ansible ansible-galaxy

ansible roles



¿Los roles de Galaxy Ansible se instalan en un directorio específico? (5)

Aquí es cómo resolví el problema de tratar con los roles de galaxy y funciona para cualquier plataforma.

Edite su archivo ansible.cfg , que debe ser parte de su control de origen y agréguelo a esto:

roles_path = roles.galaxy:roles

Crea un directorio llamado roles.galaxy y, a partir de ahora, cuando lo ansible-galaxy install xxx.yyy , ansible-galaxy install xxx.yyy , se instalará en roles.galaxy .

Continuará manteniendo sus roles locales dentro del directorio de roles y los de la comunidad en roles.galaxy . Se supone que ambos deben guardarse en tu git repo.

Nunca considere instalarlos en galaxy, esto representaría un gran riesgo de seguridad además de agregar varios puntos de falla adicionales.

Así que pensé que debería comenzar a usar Ansible Galaxy cuando sea posible, en lugar de escribir mis propios roles. Acabo de instalar mi primer rol y lo instalé en /etc/local/ansible/roles (estoy en OSX). Ahora me pregunto cómo instalas estos roles donde realmente los necesito. ¿Copio el rol a donde lo necesito o hay una manera Ansible de hacerlo?


En general, guardo todos mis roles compartidos en una única carpeta maestra que se comparte en todos mis proyectos. Esto evita la tediosidad de copiar / pegar manualmente y actualizar varias copias de la misma función.

ansible.cfg el ansible.cfg cada proyecto para decirle a ansible que busque roles en esa carpeta maestra además de la carpeta del proyecto local.

Muestra ansible.cfg :

[defaults] roles_path = ~/Code/ansible_roles

Ansible busca primero un rol en el proyecto local y luego busca en roles_path . Puede especificar varias rutas separándolas con dos puntos.

De forma predeterminada, ansible-galaxy install username.rolename instalará la función en la roles_path de ansible.cfg roles_path configurada en ansible.cfg , por lo que eso es prácticamente todo lo que necesita hacer.

Ocasionalmente, quiero instalar el rol en el proyecto específico y no en la carpeta maestra. Por ejemplo, para evitar conflictos de versiones cuando dos roles tienen dependencias de roles que requieren versiones diferentes del mismo rol. En ese caso, puede usar la -p ROLES_PATH o --roles-path=ROLES_PATH :

ansible-galaxy install username.rolename -p ~/Code/project_deploy/ansible/roles/

En Ansible 1.9, puede especificar manualmente dónde desea que se instale un rol en los requirements.yml .yml de su proyecto. Lamentablemente, este parámetro de path se eliminó en Ansible 2 :

# from galaxy - src: jeffwidman.elasticsearch # from private github repo, installing to a relative path - src: https://github.com/jeffwidman/private_ansible_role path: vagrant/roles/

Si desea personalizar aún más las cosas, existe un problema abierto para agregar soporte para múltiples archivos ansible.cfg que le permitirán establecer fácilmente roles_path en distintos niveles de especificidad. Ansible leerá ANSIBLE_CONFIG , ansible.cfg en el directorio de trabajo actual, .ansible.cfg en el directorio principal o /etc/ansible/ansible.cfg , lo que encuentre primero.


Probablemente estoy respondiendo esta pregunta demasiado tarde. Pero lo que quiere se puede hacer con un solo comando:

ansible-galaxy install -p ./roles thefinn93.letsencrypt

instalará la función letsencrypt en el directorio de roles y no tendrá que copiar nada.


Sí, los copiaría de acuerdo con la estructura del proyecto de muestra:

site.yml webservers.yml fooservers.yml roles/ common/ files/ templates/ tasks/ handlers/ vars/ meta/ webservers/ files/ templates/ tasks/ handlers/ vars/ meta/

o simplemente puede ejecutar ansible-galaxy con la -p ROLES_PATH o --roles-path=ROLES_PATH para instalarlo en /your/project/root

También puede usar el directorio /etc/local/ansible como su raíz de proyecto si lo desea.

Espero eso ayude.


Yo deseaba una ruta global para mis roles. Puedes hacer esto poniendo un ansible.cfg en ~ / .ansible.cfg. Un proyecto basado siempre tendrá prioridad.

cat ~/.ansible.cfg [defaults] roles_path = ~/.ansible/roles