是否可以使用ansible角色来设置_passed_变量值?

时间:2014-11-21 14:10:17

标签: variables ansible ansible-playbook

我的场景包括两个剧本:

  • playbook P1使用两个角色A,和B,
  • playbook P2仅使用角色A.

现在,角色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”来注册最终结果。

2 个答案:

答案 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}}" }