我遇到了一个问题,其中一个注册变量在委托给另一台主机的后续任务中被错误地替换。这是我的剧本的精简版:
- 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
目录位于第一个任务中创建的临时目录目录的内部?
答案 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