when tutorial run playbook how files español define arquitectura dependencies ansible role

dependencies - tutorial - ¿Cómo especificar las tareas previas ansible para un rol?



arquitectura ansible (6)

A partir de Ansible 2.2, puedes usar include_role . https://docs.ansible.com/ansible/include_role_module.html

- user: name=proxy - include_role: name: apache vars: user: proxy

¿Cómo se debe hacer para definir una tarea previa para las dependencias de rol? Actualmente tengo un rol de apache que tiene una variable de usuario, así que en mi propio rol en <role>/meta/main.yml hago algo como:

--- dependencies: - { role: apache, user: proxy }

El problema en este punto es que todavía no tengo el usuario que especifico y cuando el rol intenta iniciar el servidor apache con un usuario inexistente, aparece un error.

Intenté crear una tarea en <role>/tasks/main.yml como:

--- - user: name=proxy

Pero el usuario se crea solo después de ejecutar la tarea de apache en dependencias (lo que se espera). Entonces, ¿hay una manera de crear una tarea que cree un usuario antes de ejecutar roles en dependencias?


Respuesta corta: no creo que el lenguaje permita especificar pre_tasks para los roles.

Puede hacer trampa / evitar el cambio de la creación del usuario a un libro de jugadas por separado e include el libro de jugadas en lugar del role . Algo como esto:

my_fake_role_playbooks / user_and_apache.yml:

- hosts: "{{p_hosts}}" pre_tasks: user: name=proxy roles: [ apache ]

actual_playbook.yml:

- include: my_fake_role_playbooks/user_and_apache.yml p_hosts=[host1, host2]

* El código no está probado.

HTH


Simplemente puede resolver esto con otra dependencia, ya sea en su <role> sin nombre o en el rol de apache .

Todo el contenido de un nuevo rol de usuario proxy:

--- - user: name=proxy ...

Luego en roles/apache/meta/main.yml agregue una dependencia a esto.

--- dependencies: - proxy-user ...

O roles/<role>/meta/main.yml en roles/<role>/meta/main.yml :

--- dependencies: - proxy-user - { role: apache, user: proxy } ...


Solo tuve que lidiar con el problema, el problema real es que la tarea previa es muy probablemente más específica que la función. Hacer una tarea posterior es fácil, ya que simplemente haría que un nuevo rol dependiera, esto se conoce como "rol de envoltura" ... o al menos eso es lo que llaman la idea en chef, para cuando intenta extender algo.

Para una tarea previa, tiene que modificar un poco la jerarquía, usando un "rol de envoltura" y lo que yo llamo un "rol de hermanos". Entonces la lógica de la dependencia aparecería como,

  • papel de envoltura
    • rol de hermano
    • papel original

El contenedor tiene dos dependencias, pero asegúrese de agregar el "rol de hermano" primero en la lista de dependencias. Ya que Ansible irá de arriba a abajo.

Finalmente, debes colocar tus vars en el rol de contenedor, para que puedas sobrescribirlos del libro de jugadas. Desea que las variables sigan la jerarquía, tanto como sea posible, y que no salten a través de los hermanos.


Tengo una necesidad similar y la resolví definiendo la variable en los roles vars. Es decir, creando un <role>/vars/main.yml con

--- user: proxy

eso debería anular la variable de user definida en el módulo apache, mientras que escribirla en el módulo por defaults no lo hace el directorio.

Estoy usando ansible 1.9, no estoy seguro de cuánto tiempo ha estado presente este comportamiento.


Uso las tareas previas para realizar algunas tareas antes de las funciones, gracias por Kashyap .

#!/usr/bin/env ansible-playbook --- - hosts: all become: true pre_tasks: - name: start tasks and sent notifiaction to HipChat hipchat: color: purple token: "{{ hipchat_token }}" room: "{{ hipchat_room }}" msg: "[Start] Run ''foo/setup.yml'' playbook on {{ ansible_nodename }}." roles: - chusiang.vim-and-vi-mode vars: ... tasks: - name: include main task include: tasks/main.yml post_tasks: - name: finish tasks and sent notifiaction to HipChat hipchat: color: green token: "{{ hipchat_token }}" room: "{{ hipchat_room }}" msg: "[Finish] Run ''foo/setup.yml'' playbook on {{ ansible_nodename }}." # vim:ft=ansible :