在循环Ansible剧本中的角色时,是否可以设置环境变量?

时间:2019-04-09 10:43:43

标签: python centos ansible environment-variables

我需要遍历Ansible角色并保存迭代索引。

我的目标是在每次迭代中使用my-role中的数字(在本例中为INDEX)。 My-role执行其他剧本,并且每次迭代都需要INDEX的值。我想在另一个ansible-playbook中使用该索引。所以我的计划是设置一个环境变量以从另一本手册中读取。

这是我的代码:

- name: my-role
  with_sequence: 'start=0 end={{ number_of_users|int }}'
  include_role:
    name: my-role
  vars:
    user_name: '{{ user_temp[item|int] }}'
    queue_name: '{{ queue_temp[item|int] }}'
  lineinfile:
    dest: "/etc/environment"
    state: present
    line: 'export INDEX=[item|int]'

显然我不能同时做两个陈述。

错误消息是:

  

错误!冲突的动作陈述:include_role,lineinfile

在循环角色时是否可以设置环境变量?

1 个答案:

答案 0 :(得分:0)

  

在循环角色时是否可以设置环境变量?

是的,使用apply:的{​​{1}}选项

include_role:

顺便说一句,即使有一个必须让您与该角色一起运行- with_sequence: start=0 end=3 include_role: name: my-role apply: environment: INDEX: '[{{item}}]' ,仅将条目放在lineinfile中也不太可能自动将该环境变量暴露给该角色。这就要求为每个任务建立的每个ssh连接实际上都源于/etc/environment,可能发生 ,但是当ansible为您提供明确声明的/etc/environment指令时,依靠它是不明智的旨在做到这一点。