Todos mis libros de jugadas / roles de Ansible se registran en mi repositorio de git.
Sin embargo, para los roles de Ansible Galaxy siempre tengo que descargarlos explícitamente uno por uno en cada máquina desde la que quiero ejecutar Ansible.
Incluso es difícil saber de antemano exactamente qué roles de Ansible Galaxy son necesarios hasta que Ansible se queje de un rol faltante en tiempo de ejecución.
¿Cómo se supone que uno debe administrar las dependencias del rol Ansible Galaxy? Me gustaría hacer que se registren en mi repositorio de git junto con el resto de mi código ansible o que se identifiquen y descarguen automáticamente cuando ejecuto Ansible en una nueva máquina.
Respuestas:
Debe usar un
requirements.yml
archivo para este caso de uso. Describa los roles que necesita, utilizando cualquiera de los diversos métodos de instalación:Luego instálalos:
Aquí hay un ejemplo de trabajo (instalación de OpenDaylight usando Ansible como un aprovisionador vagabundo). Consulte los documentos relevantes de Ansible para obtener más información.
fuente
Como se sugiere, puede usar galaxia ansible para esta necesidad.
Ansible tiene una función donde puede crear un
requirements.yml
archivo que enumera todas sus funciones. Puede averiguar sobre eso aquí: http://docs.ansible.com/ansible/latest/galaxy.html#installing-multiple-roles-from-a-filePor ejemplo (require.yml):
Luego se ejecuta
ansible-galaxy install -r requirements.yml
en este archivo para descargar todos los roles enumerados allí.Si desea automatizarlo aún más, puede crear un script de shell simple que ejecute los dos comandos.
Por ejemplo (ansible.sh):
./ansible.sh
fuente
2.2.1
A menudo me encuentro instalando instalando un JDK de Java. Usar un rol hace que ese toque sea más fácil. He intentado un par de formas diferentes (incluyendo muchos .gitmodules y submódulos ... Tengo que usar múltiples sistemas git para el trabajo y todo se vuelve feo). Mi mayor requisito es que no verifique el código de rol en mi proyecto de libro de jugadas, principalmente para poder mantener todo en un solo lugar.
El contenido de mi archivo 'require.yml':
Ejecuto un libro de jugadas separado, install-roles.yml:
Ejecuto este primer libro de jugadas, luego ejecuto mis roles en cualquier libro de jugadas normalmente. Para mí, el secreto es asegurar que git lo ignore para que no revise los roles por error. Además, como elimino la carpeta cada vez, me aseguro de no tener que forzar o ignorar los errores.
fuente
Otra solución es usar submódulos git. Después de todo, Ansible Galaxy solo es un directorio de repositorios de github ...
Uso este comando para agregar automáticamente cualquier rol Galaxy como submódulo:
Confirma los cambios en tu repositorio de git. Cuando clone su repositorio en el futuro, asegúrese de clonarlo con submódulos, p. Ej.
git clone ... --recursive
Una ventaja de esto es que un submódulo git siempre hace referencia a una versión específica (git commit-hash). Esto evitará que ejecute actualizaciones no probadas en su entorno productivo. Una nueva versión de un rol Galaxy podría tener errores o funcionar completamente diferente que antes. Con un submódulo git, usted decide si y cuándo actualiza un rol a la nueva versión.
Además, no tendrá que ocuparse adicionalmente de incluir en la lista negra los roles de galaxias en su
.gitignore
para evitar comprometer su código en su repositorio.fuente
--force
indicador indocumentado , no le mostrará si o qué cambió realmente. Es un cuadro negro que solo puede controlar si mantiene los roles de galaxia descargados en SCM. Sin embargo, por otras razones, es una buena idea. Al extraer submódulos, al menos, ve qué roles cambiaron.Puede usar un rol Ansible para instalar los roles necesarios utilizando el módulo de comando .
Aquí hay un ejemplo muy básico que se ejecuta
ansible-galaxy install
:El
ansible_roles_list
puede ser suministrado como una variable o como un parámetro de rol.Si hace esto en un rol, debe aplicarse antes que cualquier otro rol que desee instalar usándolo, en un libro de jugadas separado. Esto se debe a que Ansible verifica si todos los roles están disponibles antes de ejecutar el libro de jugadas donde los referencia.
fuente
En este momento, hasta donde yo sé, no hay una forma automática de descargar roles en tiempo de ejecución. Su mejor opción es comprometerlos en su propio repositorio o tener una documentación adecuada que enumere todos los requisitos. Incluso podría crear un libro de jugadas previo al vuelo que instale sus roles. :)
fuente
Aquí, mis requisitos están en el rol y se usan en install.yml
main.yml
fuente