有没有办法在环绕Ansible playbook中的角色时设置环境变量?

问题描述 投票:0回答:1

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

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

这是我的代码:

- 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

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

python centos ansible environment-variables
1个回答
0
投票

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

是的,使用apply:include_role:选项

- with_sequence: start=0 end=3
  include_role:
    name: my-role
    apply:
      environment:
        INDEX: '[{{item}}]'

顺便说一句,即使ansible让你在这个角色旁边运行lineinfile,只需在/etc/environment中输入一个条目,就不太可能自动将该环境变量暴露给该角色。它需要为每个任务创建的每个ssh连接实际上都会发生/etc/environment,这可能会发生,但当ansible为您提供明确设计用于执行此操作的environment:指令时,依靠它是不明智的。

© www.soinside.com 2019 - 2024. All rights reserved.