Ansible

使用 Ansible 2.12 通過 host: 標籤類訪問 AWS EC2

  • April 15, 2022

在我的本地硬體上,我有一個執行 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 文件中的“庫存外掛”部分。

要開始使用帶有 YAML 配置源的清單外掛,請使用為相關外掛記錄的可接受文件名架構創建一個文件,然後添加外掛:plugin_name。如果外掛在集合中,請使用完全限定名稱。

# demo.aws_ec2.yml
plugin: amazon.aws.aws_ec2

$$ … $$ 您可以使用帶有構造的 keyed_groups 選項的主機變數創建動態組。選項組也可用於創建組和組合創建和修改主機變數。這是一個利用構造特徵的 aws_ec2 範例:

# demo.aws_ec2.yml
plugin: amazon.aws.aws_ec2
regions:
 - us-east-1
 - us-east-2
keyed_groups:
 # add hosts to tag_Name_value groups for each aws_ec2 host's tags.Name variable
 - key: tags.Name
   prefix: tag_Name_
   separator: ""
groups:
 # add hosts to the group development if any of the dictionary's keys or values is the word 'devel'
 development: "'devel' in (tags|list)"
compose:
 # set the ansible_host variable to connect with the private IP address without changing the hostname
 ansible_host: private_ip_address

$$ … $$您可以使用ansible-doc -t inventory -l查看可用外掛的列表。用於ansible-doc -t inventory <plugin name>查看特定於外掛的文件和範例。

引用自:https://unix.stackexchange.com/questions/698647