我想我已经在某个地方找到了答案,但我现在似乎无法找到它.我正在development为我的EC2实例创建动态库存文件.我想将标记为的所有实例分组Stack=Development.此外,我想具体确定开发API服务器.那些不仅有Stack=Development标签,还有API=Yes标签.
我的基本设置使用库存文件夹:
<root>/development
??? base
??? ec2.ini
??? ec2.py
Run Code Online (Sandbox Code Playgroud)
在我的base文件中,我想要这样的东西:
[servers]
tag_Stack_Development
[apiservers]
tag_Stack_Development && tag_API_Yes
Run Code Online (Sandbox Code Playgroud)
然后我就可以运行它来ping我的所有开发api服务器:
ansible -i development -u myuser apiservers -m ping
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?我知道语法不对,但希望意图相当清楚?我无法想象我是唯一一个需要过滤多个标签的人,但是我无法找到任何让我想到的地方.
这不是我头脑中的答案,但有时我头脑中的东西会妨碍我.由于每个库存目录都有自己的库存目录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
Run Code Online (Sandbox Code Playgroud)
xiong-chiamiov 提供的答案确实有效。我刚刚在我的 ansible 部署中使用它。
所以我有一个使用动态清单脚本的剧本。用这段代码:
---
- name: AWS Deploy
hosts: tag_Environment_dev:&tag_Project_integration
gather_facts: true
Run Code Online (Sandbox Code Playgroud)
该过程确实通过这两个标签过滤主机。
编辑
实际上对此进行扩展,您还可以使用变量使主机组规范动态化。像这样:
---
- name: AWS Deploy
hosts: "tag_Environment_{{env}}:&tag_Project_{{tag_project}}"
sudo: true
gather_facts: true
Run Code Online (Sandbox Code Playgroud)
我使用变量文件中的 {{env}} 和 {{tag_project}} 变量以及在运行时提供给 ansible 的参数。它成功地更改了剧本所针对的主机。
| 归档时间: |
|
| 查看次数: |
9352 次 |
| 最近记录: |