我有问题,甚至没有正确启动。
我有一个看起来像的主机文件
all:
children:
application1:
children:
application1-webserver:
hosts:
host1.domain.net:
host2.domain.net:
application1-database:
hosts:
dbhost1.domain.net:
application2:
children:
application2-webserver:
hosts:
host3.domain.net:
host4.domain.net:
application1-database:
hosts:
dbhost2.domain.net:
app-servers:
hosts:
host1.domain.net:
host2.domain.net:
host3.domain.net:
host4.domain.net:
我已经创建了模板文件。我知道这不是pg_hba.conf,但现在已经不重要了,如果我把IP拿出来,会很容易
{% for i in groups['app-servers'] %}
{{ hostvars[i]['ansible_default_ipv4_address'] }}
{% endfor %}
所以,也许有时我不得不运行这个脚本来创建"新"环境,我不想手动更改应用服务器的IP。我想要的是从FQDN获取IP。
需要这个,这样我就可以限制从网络访问数据库,只访问那些服务器。
谢谢你的帮助。
保存全局信息的变量是ansible_default_ipv4
。只有当你在主机上收集了事实(确保你在游戏中没有使用gather_facts: false
(时,它才可用。
它是一个包含几个密钥的散列,其中address
。举个例子(混淆(,这是我在本地主机上得到的:
$ ansible localhost -m setup -a gather_subset=network -a filter=*default_ipv4*
localhost | SUCCESS => {
"ansible_facts": {
"ansible_default_ipv4": {
"address": "x.y.z.a",
"alias": "interface",
"broadcast": "x.y.z.255",
"gateway": "x.y.z..1",
"interface": "interface",
"macaddress": "xx:xx:xx:xx:xx:xx",
"mtu": 1500,
"netmask": "255.255.255.0",
"network": "x.y.z..0",
"type": "ether"
}
},
"changed": false
}
因此,您在模板中查找的var的名称是ansible_default_ip4.address
您的完整固定模板:
{% for i in groups['app-servers'] %}
{{ hostvars[i].ansible_default_ipv4.address }}
{% endfor %}
可能的替代符号(混合点和阵列符号(:
{{ hostvars[i]['ansible_default_ipv4']['address'] }}
{{ hostvars[i].ansible_default_ipv4['address'] }}
etc.
所以我得到了它。它有点复杂。
行动手册如下:
---
- hosts: app-servers
tasks:
- ping:
- hosts: dbhost1.domain.net
tasks:
- include_role:
name: test-for
...
主机文件如上所述:
all:
children:
application1:
children:
application1-webserver:
hosts:
host1.domain.net:
host2.domain.net:
application1-database:
hosts:
dbhost1.domain.net:
application2:
children:
application2-webserver:
hosts:
host3.domain.net:
host4.domain.net:
application1-database:
hosts:
dbhost2.domain.net:
app-servers:
hosts:
host1.domain.net:
host2.domain.net:
host3.domain.net:
host4.domain.net:
只有在我ping主机后,我得到IP,我需要
然后在模板中:
{% for i in groups['app-servers'] %}
{{ hostvars[i].ansible_default_ipv4.address }}
{% endfor %}
它是有效的。
感谢