Loops Ansible:如何在剧本中循环多个变量?
我正试图编写一个剧本,用于在所有EC2实例上实现AWS Cloudwatch状态检查报警。我尝试硬编码这3个值(AWS_Name、Instance_ID和Instance_IP-Private),对我来说效果非常好。然而,我需要一个解决方案来使用ansible来使用循环来获取所有变量,并为每个实例逐个创建Cloudwatch状态检查警报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:
-
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文件中排除属性。