Ansible动态清单使用AWS插件 – 如何获取内部DNS记录或私有IP?

41次阅读
没有评论

问题描述

在使用Ansible的动态清单时遇到了问题。他使用了aws_ec2插件来设置Ansible,并且只使用aws_ec2.yaml文件作为清单和变量的来源。但是,当他运行ansible-inventory –graph命令时,Ansible返回的实例是公共的AWS DNS主机名。他希望获取私有DNS主机名或IP地址,以便可以通过SSH连接到主机(因为他们的防火墙规则阻止了对公共AWS主机名的SSH连接)。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

您可以通过设置aws_ec2插件的hostnames参数来控制插件使用的主机名。该参数接受一个属性列表,并将使用实例定义的第一个属性作为主机名。您可以将private-dns-name和private-ip-address作为hostnames参数的值,以获取私有DNS主机名或IP地址。
以下是如何在aws_ec2插件中设置hostnames参数的步骤:
1. 打开您的aws_ec2.yaml文件。
2. 在该文件中找到aws_ec2插件的配置部分。
3. 在配置部分中,找到hostnames参数,并将其设置为包含private-dns-name和private-ip-address的列表。
下面是一个示例aws_ec2.yaml文件的片段:

plugin: aws_ec2
aws_profile: your_aws_profile
regions:
  - your_aws_region
hostnames:
  - private-dns-name
  - private-ip-address

在上面的示例中,我们设置了hostnames参数为包含private-dns-name和private-ip-address的列表。这将告诉aws_ec2插件使用私有DNS主机名或IP地址作为主机名。

方案2

您还可以使用compose来设置ansible_host变量,以更改连接目标而不修改清单主机名。这样,您可以将ansible_host变量设置为private_ip_address,以便使用私有IP地址进行SSH连接。
以下是如何使用compose设置ansible_host变量的步骤:
1. 打开您的aws_ec2.yaml文件。
2. 在该文件中找到aws_ec2插件的配置部分。
3. 在配置部分中,找到compose参数,并将其设置为包含ansible_host和private_ip_address的字典。
下面是一个示例aws_ec2.yaml文件的片段:

plugin: aws_ec2
aws_profile: your_aws_profile
regions:
  - your_aws_region
compose:
  ansible_host: private_ip_address

在上面的示例中,我们设置了compose参数为包含ansible_host和private_ip_address的字典。这将告诉aws_ec2插件使用私有IP地址作为连接目标,而不修改清单主机名。
请注意,使用compose设置ansible_host变量需要使用Ansible变量名称而不是原始的AWS属性名称。在上面的示例中,我们使用了private_ip_address作为ansible_host变量的值。

正文完