Ansible变量替换结合任务委托

时间:2019-07-19 16:00:19

标签: ansible ansible-template

我遇到了一个问题,其中一个注册变量在委托给另一台主机的后续任务中被错误地替换。这是我的剧本的精简版:

- 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 }}在委派主机上被替换,然后才委派任务,而我假设变量被替换为任务的宿主值委托给。

在这种情况下,如何正确使用output_dir变量,以使api-resources目录位于第一个任务中创建的临时目录目录的内部?

1 个答案:

答案 0 :(得分:0)

答案很简单,只需使用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