使用同步计数器变量 ansible
Using a synchronized counter variable ansible
我的剧本正在 AWS.I 中创建多个应用程序实例,希望每个实例都用计数器变量标记以维护每个实例的计数和 ID(不想使用实例 ID 和任何其他随机 ID)。现在,由于配置是并行发生的,我无法获得一致的计数器变量。
我试过使用一个全局变量来播放并递增它,但它总是 returns 初始值作为 set fact 执行一次。
我还尝试将一个变量放入文件中,为每个主机读取并递增它。这会导致竞争条件,我看到不同主机的值相同。有什么办法吗
假设您的ec2.ini文件有
all_instances = True
为了获得停止的实例,它们在某种意义上已经被标记了。
webserver[1] 将始终是同一个主机,直到您的库存发生变化。
但是,您仍然可以根据需要标记您的实例,但如果您的库存发生变化,可能很难用唯一编号标记新实例。
- name: Loop over webserver instances and tag sequentially
ec2_tag:
state: present
tags:
myTag: "webserver{{item}}"
resource: "{{ hostvars[groups['webserver'][item|int]]['ec2_id'] }}"
with_sequence: start=0 end="{{ groups['webserver']|length - 1 }}"
delegate_to: localhost
N.B:item是一个字符串,所以我们在从组['webserver']数组。
我的剧本正在 AWS.I 中创建多个应用程序实例,希望每个实例都用计数器变量标记以维护每个实例的计数和 ID(不想使用实例 ID 和任何其他随机 ID)。现在,由于配置是并行发生的,我无法获得一致的计数器变量。 我试过使用一个全局变量来播放并递增它,但它总是 returns 初始值作为 set fact 执行一次。 我还尝试将一个变量放入文件中,为每个主机读取并递增它。这会导致竞争条件,我看到不同主机的值相同。有什么办法吗
假设您的ec2.ini文件有
all_instances = True
为了获得停止的实例,它们在某种意义上已经被标记了。
webserver[1] 将始终是同一个主机,直到您的库存发生变化。
但是,您仍然可以根据需要标记您的实例,但如果您的库存发生变化,可能很难用唯一编号标记新实例。
- name: Loop over webserver instances and tag sequentially
ec2_tag:
state: present
tags:
myTag: "webserver{{item}}"
resource: "{{ hostvars[groups['webserver'][item|int]]['ec2_id'] }}"
with_sequence: start=0 end="{{ groups['webserver']|length - 1 }}"
delegate_to: localhost
N.B:item是一个字符串,所以我们在从组['webserver']数组。