Подстановка переменных Ansible в сочетании с делегированием задач

Я столкнулся с проблемой, когда зарегистрированная переменная неправильно подставляется в последующей задаче, делегированной другому хосту. Это урезанная версия моей пьесы:

- hosts: all
  name: Test Play
  gather_facts: false

  tasks:
      - name: Create output directory
        tempfile:
            state: directory
            suffix: diag
        register: output_dir

      - name: Create API resources directory
        file:
            path: "{{ output_dir.path }}/api-resources"
            state: directory
        delegate_to: "{{groups['control-plane'][0]}}"
        run_once: yes
        register: api_resources_dir

Теперь каждый хост создаст временный каталог, но только один из моих хостов должен дополнительно создать еще один каталог внутри этого временного каталога. Однако при запуске этого плейбука хост, которому делегирована вторая задача, оказывается с двумя разными временными каталогами, один из которых содержит каталог api-resources. Последний находится внутри временного каталога с тем же именем, что и передающий хост.

Я подозреваю, что переменная {{ output_dir.path }} во 2-й задаче подставляется на делегирующем хосте, и только затем задача делегируется, тогда как я бы предположил, что переменная подставляется на значение хоста, которому делегируется задача.

Как я могу правильно использовать переменную output_dir в этом сценарии, чтобы каталог api-resources оказался внутри каталога временного каталога, созданного в 1-й задаче?


person Makkes    schedule 19.07.2019    source источник


Ответы (1)


Ответ прост, просто используйте when вместо delegate_to:

- hosts: all
  name: Test Play
  gather_facts: false

  tasks:
      - name: Create output directory
        tempfile:
            state: directory
            suffix: diag
        register: output_dir

      - name: Create API resources directory
        file:
            path: "{{ output_dir.path }}/api-resources"
            state: directory
        when: inventory_hostname == groups['control-plane'][0]
        register: api_resources_dir
person Makkes    schedule 19.07.2019