使用 Openstack 的 Ansible 动态库存
Ansible Dynamic Inventory with Openstack
我正在将几个 Linux 主机部署到 openstack 环境并尝试使用 ansible 配置它们。我在使用来自 https://github.com/ansible/ansible/blob/devel/contrib/inventory/openstack.py
的库存动态库存脚本时遇到了一些困难
如果我 运行 使用静态主机文件 ansible,一切正常
# inventory/static-hosts
localhost ansible_connection=local
linweb01 ansible_host=10.1.1.101
% ansible linweb01 -m ping -i ./inventory/static-hosts \
--extra-vars="ansible_user=setup ansible_ssh_private_key_file=/home/ian/keys/setup.key"
linweb01 |成功=> {
"changed":错误,
"ping": "pong"
}
但是如果我使用动态清单,找不到主机
% ansible linweb01 -m ping -i ./inventory/openstack.py \
--extra-vars="ansible_user=setup ansible_ssh_private_key_file=/home/ian/keys/setup.key"
linweb01 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname linweb01: Name or service not known\r\n",
"unreachable": true
}
当我运行手动清点脚本时,找到了主机并且返回的地址是正确的
% ./inventory/openstack.py --host linweb01
[...]
"name": "linweb01",
"networks": {},
"os-extended-volumes:volumes_attached": [],
"power_state": 1,
"private_v4": "10.1.1.101",
[...]
我的猜测是清单脚本不知道使用 IP 地址的 "private_v4" 值,尽管我似乎找不到这方面的参考。
如何使用清单脚本返回的 "private_v4" 值作为主机的 "ansible_host" 值?
快速查看代码表明 ip 地址应该在 interface_ip
键中:
hostvars[key] = dict(
ansible_ssh_host=server['interface_ip'],
ansible_host=server['interface_ip'],
openstack=server)
如果您需要解决方法,可以尝试将此添加到您group_vars/all.yml
:
ansible_host: "{{ private_v4 }}"
我正在将几个 Linux 主机部署到 openstack 环境并尝试使用 ansible 配置它们。我在使用来自 https://github.com/ansible/ansible/blob/devel/contrib/inventory/openstack.py
的库存动态库存脚本时遇到了一些困难如果我 运行 使用静态主机文件 ansible,一切正常
# inventory/static-hosts
localhost ansible_connection=local
linweb01 ansible_host=10.1.1.101
% ansible linweb01 -m ping -i ./inventory/static-hosts \ --extra-vars="ansible_user=setup ansible_ssh_private_key_file=/home/ian/keys/setup.key" linweb01 |成功=> { "changed":错误, "ping": "pong" }
但是如果我使用动态清单,找不到主机
% ansible linweb01 -m ping -i ./inventory/openstack.py \
--extra-vars="ansible_user=setup ansible_ssh_private_key_file=/home/ian/keys/setup.key"
linweb01 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname linweb01: Name or service not known\r\n",
"unreachable": true
}
当我运行手动清点脚本时,找到了主机并且返回的地址是正确的
% ./inventory/openstack.py --host linweb01
[...]
"name": "linweb01",
"networks": {},
"os-extended-volumes:volumes_attached": [],
"power_state": 1,
"private_v4": "10.1.1.101",
[...]
我的猜测是清单脚本不知道使用 IP 地址的 "private_v4" 值,尽管我似乎找不到这方面的参考。
如何使用清单脚本返回的 "private_v4" 值作为主机的 "ansible_host" 值?
快速查看代码表明 ip 地址应该在 interface_ip
键中:
hostvars[key] = dict(
ansible_ssh_host=server['interface_ip'],
ansible_host=server['interface_ip'],
openstack=server)
如果您需要解决方法,可以尝试将此添加到您group_vars/all.yml
:
ansible_host: "{{ private_v4 }}"