Saltar al contenido

ansible: usando with_items con el manejador de notificaciones

Solución:

Las variables en Ansible son globales, por lo que no hay razón para pasar una variable al controlador. Si está tratando de hacer que un controlador esté parametrizado de una manera en la que está tratando de usar una variable en el nombre de un controlador, no podrá hacerlo en Ansible.

Lo que puede hacer es crear un controlador que recorra una lista de servicios con bastante facilidad, aquí hay un ejemplo de trabajo que puede probarse localmente:

- hosts: localhost
  tasks:
  - file:  >
      path=/tmp/{{ item }}
      state=directory
    register: files_created
    with_items:
      - one
      - two
    notify: some_handler

  handlers:
    - name: "some_handler"
      shell: "echo {{ item }} has changed!"
      when: item.changed
      with_items: files_created.results

Finalmente lo resolví dividiendo las aplicaciones en varias instancias del mismo rol. De esta forma, el controlador en el rol puede hacer referencia a las variables que se definen como variable del rol.

En site.yml:

- hosts: localhost
  roles:
  - role: something
    name: a
  - role: something
    name: b

En roles / algo / tareas / main.yml:

- name: do something
  shell: "echo {{ name }}"
  notify: something happened

- name: do something else
  shell: "echo {{ name }}"
  notify: something happened

En roles / algo / manejadores / main.yml:

- name: something happened
  debug:
    msg: "{{ name }}"

¡Parece mucho menos hackear que la primera solución!

Para actualizar la respuesta de jarv anterior, Ansible 2.5 reemplaza with_items con loop. Al obtener resultados, item por sí solo no funcionará. Deberá obtener explícitamente el nombre, por ejemplo, item.name.

- hosts: localhost
  tasks:
  - file:  >
      path=/tmp/{{ item }}
      state=directory
    register: files_created
    loop:
      - one
      - two
    notify: some_handler

  handlers:
    - name: "some_handler"
      shell: "echo {{ item.name }} has changed!"
      when: item.changed
      loop: files_created.results
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *