使用同步计数器变量ansible

时间:2017-05-10 09:03:50

标签: ansible ansible-inventory

我的Playbook正在AWS中创建多个应用程序实例。我希望每个实例都用计数器变量标记,以维护每个实例的计数和id(不想使用实例ID和任何其他随机id) 。现在,由于供应并行发生,我无法获得一致的计数器变量。 我已经尝试使用全局变量来播放并递增它但它总是返回初始值,因为set fact被执行一次。 我也尝试将变量放在一个文件中,为每个主机读取和递增它。这导致竞争条件,我看到不同主机的相同值。有没有办法做到这一点。

1 个答案:

答案 0 :(得分:0)

假设您的 ec2.ini 文件有

all_instances = True

要获得已停止的实例,从某种意义上说,它们已被标记。

在您的广告资源发生变化之前,

网络服务器[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

注意:项目是一个字符串,因此从群组中提取时,我们必须使用 [item | int] [' webserver&#39 ;] 数组。