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