我的场景包括两个剧本:
现在,角色A和B需要执行几个额外的步骤,执行相同的操作,但会产生不同的变量。例如:
# role A
- name: get the current_path
shell: pwd
register: A_path_variable
# role B, in a separate file
- name: get the current_path
shell: pwd
register: B_path_variable
所需的操作是相同的 - 但结果变量名称是不同的。
Ansible中是否有人告诉角色使用特定变量?例如:可以将“shell:pwd”分离为新角色,然后要求它使用“specific_variable”来注册最终结果。
答案 0 :(得分:0)
经过调查 - 事实证明变量解析只是基于字符串的。
角色A和B,在单个剧本中执行,都调用UTIL角色,期望它写入不同的变量。角色UTIL应该处理一些数据并将结果写入变量。
角色A:
...
vars:
output_var_name: my_variable_A
roles:
- UTIL
角色B:
...
vars:
output_var_name: my_variable_B
roles:
- UTIL
UTIL,最终
- name: output result
set_fact:
"{{ output_var_name }}={{ local_variable }}"
结果:my_variable_B和my_variable_A都相应地设置。我的理解是“vars”在“角色”之前执行,因此它可以在正确的时刻改变,正确的价值。
答案 1 :(得分:0)
您可以使用角色参数:
角色/ util的:
- shell: pwd
register: util_output
剧本:
roles:
- util
- { role: role_a, my_variable_a: "{{util_output}}" }
- { role: role_b, my_variable_b: "{{util_output}}" }