【问题标题】:Ansible dynamic inventory for Azure VM with private IP only仅具有私有 IP 的 Azure VM 的 Ansible 动态清单
【发布时间】:2019-10-22 20:17:14
【问题描述】:

在 Azure 上,我有一个包含 2 个服务器的 1 个 vnet 的资源组;主人和工人。只有 master 有公共 IP。

使用“普通”Ansible 我可以通过在hosts 文件中将工作人员的私有IP 定义为ansible_host 并创建一个带有ssh ProxyCommand 参数的group_vars 文件来管理两个服务器,以申请工作人员组,如@ 987654321@ 此处(请注意,还有一些较旧的方法也涉及直接 ssh 配置,但我认为 group_vars 方法更可取,因为它更便于其他用户使用)。

但是,这种方法需要对 IP 进行硬编码,这在 Azure 上不是很好。有一个 azure_rm inventory scriptplugin(取决于 Ansible 版本)将提供动态清单,避免需要 hosts 文件,但在这种情况下我该如何做相当于 ProxyCommand 设置?

这种情况一定很常见,所以我觉得我一定是错过了什么。

【问题讨论】:

    标签: azure ssh proxy ansible ansible-inventory


    【解决方案1】:

    堡垒主机

    要在 Ansible 中使用代理/堡垒主机/跳转主机,您需要在 ansible.cfg 中指定 ansible_ssh_common_args

    • 应该有一个环境变量 ANSIBLE_SSH_COMMON_ARGS,但由于 this Ansible issue 而缺少该变量 - 自 Ansible 2.9.3 起尚未修复。

    您可以在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 的使用是可选的,它只是格式化输出以提高可读性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多