有没有办法在 Ansible 剧本中循环角色时设置环境变量?

cel*_*-in 6 python centos environment-variables ansible

我需要循环 Ansible 角色并保存迭代的索引。

我的目标是在每次迭代中使用 my-role 中的数字(在本例中为 INDEX)。我的角色执行其他剧本,我需要每次迭代的 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]'
Run Code Online (Sandbox Code Playgroud)

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

错误信息是:

错误!冲突的操作语句:include_role、lineinfile

有没有办法在循环角色时设置环境变量?

mda*_*iel 6

有没有办法在循环角色时设置环境变量?

是的,使用apply:选项include_role:

- with_sequence: start=0 end=3
  include_role:
    name: my-role
    apply:
      environment:
        INDEX: '[{{item}}]'
Run Code Online (Sandbox Code Playgroud)

顺便说一句,即使 ansible您与该角色一起运行lineinfile,仅仅放入一个条目/etc/environment也不太可能自动将该环境变量公开给该角色。这将要求为每个任务建立的每个 ssh 连接实际上都是 source /etc/environment,这可能environment:会发生,但当 ansible 为您提供明确设计用于执行此操作的指令时,指望它是不明智的。