堡垒主机
要在 Ansible 中使用代理/堡垒主机/跳转主机,您需要在 ansible.cfg 中指定 ansible_ssh_common_args。
您可以在all 组级别的静态清单中设置此功能以进行试验(在没有动态清单的情况下更容易先尝试) - 请参阅this blog 了解更多详细信息。
[all:vars]
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p my-bastion.example.com"'
一旦你有了这个工作,你可以使用动态库存 - 创建一个文件group_vars/all.yml(首先使用静态库存测试),将上述 INI 格式库存转换为 YAML(将 = 更改为 :)。
ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p my-bastion.example.com"'
在动态库存中使用私有 IP
要确保清单输出中的ansible_host 使用私有IP,您必须使用export AZURE_USE_PRIVATE_IP=true(使用经典的azure_rm.py 清单脚本,尚未尝试使用插件清单)。
- 没有这个,
ansible_host 可能为空或设置为公共 IP/域名
- 如果您使用解析为私有 IP 的域名,则可能不需要此设置
测试动态库存
在开始将动态清单用于剧本之前,请务必测试它是否生成了正确的 JSON 数据。
要检查特定清单值是否映射到正确的主机,请尝试:
$ AZURE_USE_PRIVATE_IP=true ansible -i azure_rm.py mygroup -m debug -a var=ansible_host
test01 | SUCCESS => {
"ansible_host": "10.0.0.1"
}
您还可以检查 Ansible SSH 是否像这样工作,在调试时使用 -vvvvv:
$ AZURE_USE_PRIVATE_IP=trueansible -i azure_rm.py mygroup -m debug -a var=ansible_host
test01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
经典与基于插件的广告资源
我在这里使用了“经典”azure_rm.py 动态库存——同样的方法适用于新的基于插件的动态库存(从 Ansible 2.4 开始,包括库存缓存)。
在任一模式下查看动态库存 JSON 输出:
- 经典:
AZURE_USE_PRIVATE_IP=true python azure_rm.py | jq .
- 基于插件:
ansible-inventory -i azure.yml --graph
jq 的使用是可选的,它只是格式化输出以提高可读性。