我需要循环一个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
有没有办法在循环角色时设置环境变量?
有没有办法在循环角色时设置环境变量?
是的,使用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:
指令时,依靠它是不明智的。