如何使用 Azure 动态清单以及有条件的键控组执行 ansible-playbook

How to execute ansible-playbook with Azure Dynamic Inventories along with keyed groups conditional

我正在尝试在 ansible 中使用 azure_rm 插件在 Azure 平台上生成动态主机。使用键控组条件,我能够成功地使其与 ansible ad-hoc 命令一起工作。但是,当我尝试使用 "ansible-playbook" 传递相同内容时,它不起作用。任何人都可以帮助我如何以同样的方式 运行 ansible-playbook 吗?

下面是我的动态库存生成文件:

---
plugin: azure_rm
auth_source: msi
keyed_groups:
- prefix: tag
  key: tags

当我使用该文件对目标VM 执行ping 操作时,以下是成功响应。

使用的命令:

ansible -m ping tag_my_devops_ansible_slave -i dynamic_inventory_azure_rm.yml

回复:

devops-eastus2-dev-ansibleslave-vm_2f44 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

但是,当我将其与 ansible-playbook 一起使用时,出现以下错误。 使用的命令:

ansible-playbook  tag_cdo_devops_ansible_slave -i dynamic_inventory_azure_rm.yml test-playbook.yml

错误:

ansible-playbook: error: unrecognized arguments: test-playbook.yml

任何人都可以帮助解决如何为上述用例执行 ansible-playbook 吗?

ansible-playbook 命令不接受命令行上的目标列表,而是 playbook 文件将 hosts: 作为顶级键,指示该 playbook 将应用到的主机。

所以,如果该剧本总是要与该标签一起使用,您可以在剧本中指出:

- hosts: tag_cdo_devops_ansible_slave
  tasks:
  - debug: var=ansible_host

hosts: 似乎也支持 jinja2 模板,所以您可以通过以下方式实现您想要做的事情:

- hosts: '{{ azure_playbook_hosts }}'
  tasks:
  - debug: var=ansible_host

然后是ansible-playbook -e azure_playbook_hosts=tag_cdo_devops_ansible_slave -i dynamic_inventory_azure_rm.yml test-playbook.yml

或者您可以创建一个专用清单文件,其中只有 returns 台主机与您想要的标签相匹配,然后使用 -i 作为该清单以及剧本文件中的 hosts: all