将主机 IP 地址存储在变量文件中而不是清单中
store hosts IP addresses in variable file instead of inventory
我试着在网上查了一下,但找不到明确的答案。是否可以将清单主机的 IP 地址存储在剧本或 var 文件中,例如 group_vars 或 host_vars 甚至 myvault.yml?类似于:
[webserver]
webserver_ip_variable
然后该变量将在某些 var 文件中定义,例如 group_vars/all/myvars.yml 为:
webserver_ip_variable: 8.8.8.8
有可能吗?目标是将 IP 地址存储在 vault.yml 文件中,实现此目的的最佳方法是什么?
Q: "The goal is to store the IP addresses in a vault.yml file, what would be the best way to accomplish this?"
A:Ansible 不必知道远程主机的 IP 地址,只要 alias 或 ansible_host 是可解析的。参见 Connecting to hosts: behavioral inventory parameters。例如,让我们创建一个清单文件
shell> cat hosts
[srv]
srv1 ansible_host=srv1.example.com
srv2 ansible_host=srv2.example.com
srv3 ansible_host=srv3.example.com
然后使用 IP 地址创建保管库文件。例如
shell> cat group_vars/srv/ip.yml
srv_ip:
srv1: 192.168.1.11
srv2: 192.168.1.12
srv3: 192.168.1.13
shell> ansible-vault encrypt group_vars/srv/ip.yml
Encryption successful
现在可以在剧本中使用加密文件了。例如
shell> cat pb.yml
- hosts: srv
tasks:
- debug:
var: srv_ip[inventory_hostname]
给予
shell> ansible-playbook -i hosts pb.yml
ok: [srv2] => {
"srv_ip[inventory_hostname]": "192.168.1.12"
}
ok: [srv1] => {
"srv_ip[inventory_hostname]": "192.168.1.11"
}
ok: [srv3] => {
"srv_ip[inventory_hostname]": "192.168.1.13"
}
如您所说,您可以使用 IP 地址保管文件。因此您的清单可以有两个文件,一个包含主机,一个包含 IP:
inventory/hosts
:
srv1
srv2
srv3
inventory/ips
(保管此文件):
srv1 ansible_host=192.168.1.11
srv2 ansible_host=192.168.1.12
srv3 ansible_host=192.168.1.13
当然,您并不真的需要那个 hosts
文件,但您也可以使用它来对主机进行分组。
我试着在网上查了一下,但找不到明确的答案。是否可以将清单主机的 IP 地址存储在剧本或 var 文件中,例如 group_vars 或 host_vars 甚至 myvault.yml?类似于:
[webserver]
webserver_ip_variable
然后该变量将在某些 var 文件中定义,例如 group_vars/all/myvars.yml 为:
webserver_ip_variable: 8.8.8.8
有可能吗?目标是将 IP 地址存储在 vault.yml 文件中,实现此目的的最佳方法是什么?
Q: "The goal is to store the IP addresses in a vault.yml file, what would be the best way to accomplish this?"
A:Ansible 不必知道远程主机的 IP 地址,只要 alias 或 ansible_host 是可解析的。参见 Connecting to hosts: behavioral inventory parameters。例如,让我们创建一个清单文件
shell> cat hosts
[srv]
srv1 ansible_host=srv1.example.com
srv2 ansible_host=srv2.example.com
srv3 ansible_host=srv3.example.com
然后使用 IP 地址创建保管库文件。例如
shell> cat group_vars/srv/ip.yml
srv_ip:
srv1: 192.168.1.11
srv2: 192.168.1.12
srv3: 192.168.1.13
shell> ansible-vault encrypt group_vars/srv/ip.yml
Encryption successful
现在可以在剧本中使用加密文件了。例如
shell> cat pb.yml
- hosts: srv
tasks:
- debug:
var: srv_ip[inventory_hostname]
给予
shell> ansible-playbook -i hosts pb.yml
ok: [srv2] => {
"srv_ip[inventory_hostname]": "192.168.1.12"
}
ok: [srv1] => {
"srv_ip[inventory_hostname]": "192.168.1.11"
}
ok: [srv3] => {
"srv_ip[inventory_hostname]": "192.168.1.13"
}
如您所说,您可以使用 IP 地址保管文件。因此您的清单可以有两个文件,一个包含主机,一个包含 IP:
inventory/hosts
:
srv1
srv2
srv3
inventory/ips
(保管此文件):
srv1 ansible_host=192.168.1.11
srv2 ansible_host=192.168.1.12
srv3 ansible_host=192.168.1.13
当然,您并不真的需要那个 hosts
文件,但您也可以使用它来对主机进行分组。