【问题标题】:How do I use the external IP of an ec2 instance in an ansible template?如何在 ansible 模板中使用 ec2 实例的外部 IP?
【发布时间】:2016-05-27 20:57:36
【问题描述】:

我正在配置 rackspace/digitalocean/aws/google cloud 中的节点,需要在 ansible 的模板中访问 ec2 实例的外部 IP。

我想像这样在主机文件中定义我的机器:

taps_1 ansible_host=54.123.456.789  dc=aws-richmond provider=aws

然后在模板中(如 iptables 模板):

-A FWR -ieth0 -p tcp -s {{ hostvars[host].ansible_host }} --dport 80   -j ACCEPT

但该值不存在:/如果我使用ansible_fqdnansible_default_ipv4 上提供的IP,我只会获得内部IP(例如172.31.50.181

我们一直这样定义我们的基础设施:

54.123.456.789 name=taps_1 dc=aws-richmond provider=aws

并通过hostvars[host].inventory_name 访问,但我不想这样做。

想法?

【问题讨论】:

  • 您使用的是静态库存文件而不是 the provided dynamic inventory scripts? Amazon 提供了一整套变量供使用。
  • 我们在 aws/digitalocean/rackspace 中有东西 - 我们不想只使用 ec2 变量进行配置
  • 您可以通过指定目录而不是文件来使用多个动态库存文件,并将组合并到一个角色中。从长远来看,这肯定是一个更具可扩展性的解决方案。

标签: amazon-web-services ansible infrastructure


【解决方案1】:

在 Ansible 1.9 中,您可以使用 ansible_ssh_host 变量,而在 Ansible 2.0 中,您可以使用 ansible_host

在您的模板中,您只需要使用此变量来获取主机的公共 IP,它将从您的库存文件中获取:

例如: Ansible 1.9

{{ ansible_ssh_host }}

或 Ansible 2.0

{{ ansible_host }}

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多