azure - 仅具有私有 IP 的 Azure VM 的 Ansible 动态清单
问题描述
在 Azure 上,我有一个包含 2 个服务器的 1 个 vnet 的资源组;主人和工人。只有 master 有公共 IP。
ansible_host
使用“普通”Ansible,我可以通过在文件中定义工作人员的私有 IPhosts
并创建一个group_vars
带有 ssh ProxyCommand 参数的文件来管理两个服务器,以申请工作人员组,如此处针对跳转主机所述(请注意,也有涉及直接的较旧方法ssh 配置,但我认为 group_vars 方法更可取,因为它对其他用户更便携)。
然而,这种方法需要对 IP 进行硬编码,这在 Azure 上不是很好。有一个azure_rm
清单脚本或插件(取决于 Ansible 版本)将提供动态清单,避免对主机文件的需要,但在这种情况下,我该如何进行与 ProxyCommand 设置等效的操作?
这种情况一定很常见,所以我觉得我一定错过了一些东西。
解决方案
堡垒主机
要将代理/堡垒主机/跳转主机与 Ansible 一起使用,您需要ansible_ssh_common_args
在ansible.cfg
.
- 应该有一个 environment variable
ANSIBLE_SSH_COMMON_ARGS
,但由于这个 Ansible 问题而丢失了- 自 Ansible 2.9.3 起尚未修复。
您可以在组级别将其设置在静态清单中以all
进行试验(在没有动态清单的情况下更容易首先尝试) - 有关更多详细信息,请参阅此博客。
[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
可以为 null 或设置为公共 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"
}
您还可以-vvvvv
在调试时检查 Ansible SSH 是否像这样工作:
$ 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的使用是可选的,它只是格式化输出以提高可读性。
推荐阅读
- swiftui - 在 iOS 上的 SwiftUI 中的 onDismiss 处理程序中触发共享表
- c# - C# 在 winform 应用程序中显示数据,类似于 Web 应用程序
- spring-cloud-stream - Spring Cloud Stream binder kafka如何使用ErrorHandlingDeserializer将错误记录发送到默认的DLQ主题?
- python - 如何从另一个类中获取一个函数中计算的变量
- html - 从网页 Excel VBA 导入数据
- javascript - Javascript FileSystem 功能未按预期工作
- arrays - 将多个文本文件合并为一个文本文件
- r - 计算值在行中出现的次数
- android - 用于自动启动网络共享的 AOSP 配置文件
- indexeddb - indexedDb 无法创建对象存储