我正在使用Ansible EC2动态库存脚本来访问EC2中的主机。我要查找的主机有一个名为sisyphus_environment
的标签,其值为development
,另一个名为sisyphus_project
的标签的值为reddot
,所以我需要这些标签的交集标签
但是,我甚至无法过滤使用EC2库存正确处理的一个标签。
我可以使用AWS CLI清楚地找到有问题的实例:
$ aws ec2 describe-instances --filters \
Name=tag:sisyphus_environment,Values=development \
Name=tag:sisyphus_project,Values=reddot \
Name=tag:sisyphus_role,Values=nginx | \
jq '.Reservations[].Instances[] | { InstanceId: .InstanceId }'
{
"InstanceId": "i-deadbeef"
}
{
"InstanceId": "i-cafebabe"
}
我试图用Ansible做同样的事情,表示为由这些标签过滤的动态成员组成的静态组。
我的ansible.cfg:
[defaults]
retry_files_enabled = false
roles_path = roles:galaxy_roles
inventory = inventory/
[ssh_connection]
ssh_args = -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
我的EC2广告资源is directly sourced from upstream以及ec2.ini。
我的库存目录如下所示:
$ tree inventory/
inventory/
├── ec2.ini
├── ec2.py
└── inventory.ini
0 directories, 3 files
我必须将inventory
命名为.ini
,否则Ansible会尝试将其加载为YAML并失败。
我的inventory/inventory.ini
文件如下所示:
[tag_sisyphus_project_reddot]
# blank
[reddot:children]
tag_sisyphus_project_reddot
这是similar to Ansible's documentation on the matter完成的。不幸的是,这个简单的事情失败了:
$ inventory/ec2.py --refresh-cache
...
$ ansible reddot -m command -a 'echo true'
[WARNING]: No hosts matched, nothing to do
如果我通过标签查询,我会得到结果:
$ ansible tag_sisyphus_project_reddot -m command -a 'echo true'
10.0.0.1 | SUCCESS | rc=0 >>
true
...
我缺少一步吗?
My Ansible版本:
$ ansible --version
ansible 2.2.0.0
config file = /home/naftuli/Documents/Development/ansible-reddot/ansible.cfg
configured module search path = Default w/o overrides