Loops Ansible:如何在剧本中循环多个变量?

Loops Ansible:如何在剧本中循环多个变量?,loops,amazon-web-services,ansible,Loops,Amazon Web Services,Ansible,我正试图编写一个剧本,用于在所有EC2实例上实现AWS Cloudwatch状态检查报警。我尝试硬编码这3个值(AWS_Name、Instance_ID和Instance_IP-Private),对我来说效果非常好。然而,我需要一个解决方案来使用ansible来使用循环来获取所有变量,并为每个实例逐个创建Cloudwatch状态检查警报 - hosts: localhost tasks: - name: Create Alarm ec2_metric_alarm:

我正试图编写一个剧本,用于在所有EC2实例上实现AWS Cloudwatch状态检查报警。我尝试硬编码这3个值(AWS_Name、Instance_ID和Instance_IP-Private),对我来说效果非常好。然而,我需要一个解决方案来使用ansible来使用循环来获取所有变量,并为每个实例逐个创建Cloudwatch状态检查警报

- 
hosts: localhost

  tasks:

    - name: Create Alarm
      ec2_metric_alarm:
         state: present
         region: us-east-1
         name: "Status Check Failed - $AWS_Name - $Instance_IP"
         metric: "StatusCheckFailed"
         namespace: "AWS/EC2"
         statistic: "Minimum"
         comparison: ">="
         threshold: 1
         period: 60
         evaluation_periods: 2
         description: "This will alarm when the instance status check fails"
         dimensions: {'InstanceId': '$Instance_ID'}
         alarm_actions: ["arn:aws:sns:us-east-1:XXXXXXXXXXXX:Cloudwatch-Notifications"]
假设我有两个AWS实例,我可以使用AWS CLI查询或手动获取上面提到的三个变量。现在,我只想运行一次playbook,为所有2个实例创建警报

找到样本变量

  var1:
    AWS_Name: NAME1
    Instance_ID: i-01b8e4534wt811af4
    Instance_IP: "10.75.169.21"
  var2:
    AWS_Name: NAME2
    Instance_ID: i-4566eftuiw93045
    Instance_IP: "10.75.169.16"

有人,请扶我起来

不要为
hosts:localhost
运行任务,而要为
hosts:all_ec2\u hosts
localhost
运行任务。因此,您可以在
ec2\u metric\u alarm
中使用目标主机的变量,而不必在循环中运行任务:
hosts:all\u ec2\u hosts
将任务传播到所有主机

...
hosts: all_ec2_hosts
become: no
tasks:
  - name: Create Alarm
    delegate_to: localhost
    ec2_metric_alarm:
     name: "Status Check Failed - {{ inventory_hostname }}"
     state: present
     region: us-east-1
     ...
     dimensions: "{'InstanceId': '{{ ec2_id }}' }"
显然,您应该用目标主机或主机组的列表替换
所有的\u ec2\u主机


ec2_id
是ec2动态清单脚本返回的变量,包含ec2实例id。

感谢您宝贵的更新。在ap-south-1地区(孟买)列出实例时,EC2动态清单脚本是否有任何限制。你以前试过吗?B'coz,我不能列出同一地区的实例。这已经有点离题了,但对AWS地区没有任何限制。选中区域和区域\u从库存/ec2.ini文件中排除属性。