Ansible动态库存中的多标签过滤

Ansible动态库存中的多标签过滤,ansible,Ansible,我想我在什么地方看到了答案,但我现在似乎找不到。我正在为我的EC2实例创建一个动态的developmentinventory文件。我想将所有标记为Stack=Development的实例分组。此外,我想特别指出开发API服务器。它们不仅有Stack=Development标记,还有API=Yes标记 我的基本设置使用库存文件夹: <root>/development ├── base ├── ec2.ini └── ec2.py 然后我就可以运行这个程序来ping我所有

我想我在什么地方看到了答案,但我现在似乎找不到。我正在为我的EC2实例创建一个动态的
development
inventory文件。我想将所有标记为
Stack=Development
的实例分组。此外,我想特别指出开发API服务器。它们不仅有
Stack=Development
标记,还有
API=Yes
标记

我的基本设置使用库存文件夹:

<root>/development
  ├── base
  ├── ec2.ini
  └── ec2.py
然后我就可以运行这个程序来ping我所有的开发api服务器:

ansible -i development -u myuser apiservers -m ping

这样的事情可以做吗?我知道语法不正确,但希望意图相当清楚?我无法想象我是唯一一个需要过滤多个标签的人,但我一直无法找到任何能让我达到目的的东西。

这不是我脑海中的答案,但有时我脑子里的东西会挡住我的去路。因为每个清单目录都有自己的
ec2.ini
,所以我只是在那里过滤堆栈,然后在该过滤器中分组

# <root>/development/ec2.ini
...
instance_filters = tag:Stack=Development

# <root>/development/base
[tag_Role_webserver]
[tag_API_Yes]

[webservers:children]
tag_Role_webserver

[apiservers:children]
tag_API_Yes
#/development/ec2.ini
...
实例过滤器=标记:堆栈=开发
#/发展/基础
[标记\角色\ Web服务器]
[tag_API_Yes]
[网络服务器:儿童]
标记\角色\ Web服务器
[附件:儿童]
tag_API_是

Ansible文档已经发布。在指定主体时,可以进行标记交叉,而不是创建新截面:

[$] ansible -i development -u myuser tag_Stack_Development:&tag_API_Yes

这也适用于剧本。

熊·齐亚米奥夫提供的答案确实有效。我刚刚在ansible部署中使用了它

所以我有一个使用动态清单脚本的剧本。使用这段代码:

    ---
    - name: AWS Deploy
      hosts: tag_Environment_dev:&tag_Project_integration
      gather_facts: true
这个过程会根据这两个标签过滤主机

编辑

实际上,在此基础上进行扩展,您还可以使用变量使主机组规范成为动态的。像这样:

[servers]
tag_Stack_Development

[apiservers]
tag_Stack_Development && tag_API_Yes
    ---
    - name: AWS Deploy
      hosts: "tag_Environment_{{env}}:&tag_Project_{{tag_project}}"
      sudo: true
      gather_facts: true

我使用变量文件中的{env}}和{{tag_project}}变量,以及在运行时提供给ansible的参数。它成功地更改了playbook所运行的主机

@kev我目前没有ec2账户,但我想我以前做过。是什么让你相信它不起作用?它做了什么?当您单独指定这两个标记时,这两个标记是否起作用?对我来说都不起作用。单个的可以工作,但不能合并。我想你已经为此修改了ec2.py插件了?同样重要的是要为每个使用的标签更新aws_ec2.yml,并为其添加一个键控的_groups条目