如何根据 aws ec2 inventory 主机名的 ip 地址访问 ansible playbook 中的主机名标签?

How to access hostname tags in ansible playbook based on aws ec2 inventory hostname's ip addresses?

我在 ansible 2.9 中使用 aws ec2 插件。我想使用私有 ip 地址连接到 aws ec2 实例,但在我的剧本中,我想显示其他主机名标签,例如主机名和区域以及相应的私有 ip 地址。关于如何在剧本中完成此任务的任何建议?

这是我的 ec2 清单: testall.aws_ec2.yml

plugin: aws_ec2

hostnames:
       - tag:Name
       - tag: Region
       - private-ip-address
compose:
  ansible_host: private_ip_address

这是我的剧本中的内容:

test-playbook.yml 
---
- hosts:  "{{ variable_host | default('test')}}"
  remote_user: ubuntu
  become: yes
  become_method: sudo
  tasks:
      - debug: 
               msg: "{{ inventory_hostname }}"

...

我运行我的剧本如下:

ansible-playbook -i testall.aws_ec2.yml test-playbook.yml --extra-vars variable_host=testall

但是,我的剧本 returns 只有 tag:Name(清单中主机名中指定的第一项):

TASK [Gathering Facts] ************************************************************************************************
ok: [test-abc-host1]
ok: [test-abc-host2]

第一个匹配项用于 inventory_hostname,其中 hostnames arg 的值是按优先级降序排列的列表。

来自ansible-doc --type inventory amazon.aws.aws_ec2

hostnames:
      description:
          - A list in order of precedence for hostname variables.
          - You can use the options specified in U(http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html#options).
          - To use tags as hostnames use the syntax tag:Name=Value to use the hostname Name_Value, or tag:Name to use the value of the Name tag.
      type: list
      default: []

您可以为具有模块 ec2_metadata_facts 的每个清单主机找到 further attributes

ansible-doc amazon.aws.ec2_metadata_facts