在我的本地硬件上,我有一个运行 Ubuntu 20 的 Vagrant 盒子,我正在使用 Ansible 2.12.2
我能够访问 AWS,甚至可以在 VPN 中创建 EC2 实例。
当我查看库存时,我可以看到 EC2 服务器为:
"ec2-64-135-69-12.us-west-1.compute.amazonaws.com": {
...,
"tags": {
"Details": "File server and api",
"Name": "File server via Ansible",
"OS": "Ubuntu20",
"Type": "Image Server",
"class": "classfileserver2022"
},
...
},
在我的下一个剧本中,我可以通过以下方式访问服务器
hosts: "ec2-64-135-69-12.us-west-1.compute.amazonaws.com"
但我更愿意通过上面 json 中的任何标签来访问它。
我努力了
hosts: "tags_class_classfileserver2022"
和
hosts:
- tags:Class="classfileserver2022"
但我收到类似的错误
[WARNING]: Could not match supplied host pattern, ignoring: tags_class_classfileserver2022
skipping: no hosts matched
如何使用类标签访问 EC2 主机?(或任何其他标签..)
我的剧本如下:
---
- name: "Prepare base of {{ server_name }} box"
vars_files:
- vars/0000_vars.yml
- vars/vars_for_base_provision.yml
- vars/vars_for_geerling.security.yml
# hosts: "ec2-54-153-39-10.us-west-1.compute.amazonaws.com" <-- this works
hosts: "tags_Class_{{ tag_class }}"
remote_user: ubuntu
become: yes
gather_facts: no
pre_tasks:
- name: Check for single host
fail: msg="Single host check failed. Try --limit or change `hosts` above."
when: "{{ ansible_play_batch|length }} != 1"
roles:
- { role: geerlingguy.security }
考虑阅读ansible 文档中的“库存插件”部分。
根据 Panki 的回答,这就是为我解决的问题
示例剧本匹配标签:类:uniqueclassname
与剧本一起创建的变量: