在Ansible中使用Azure标签作为剧本

时间:2017-10-11 15:54:15

标签: azure ansible

这是一个相当广泛的问题,因为我无法找到任何具体的文档或人们使用我要问的内容的例子,所以请原谅我。

我创建了一个Azure ARM模板,并成功地使用azure_rm.py动态库存通过Ansible进行部署:https://github.com/ansible/ansible/blob/devel/contrib/inventory/azure_rm.py

我已经在Ansible docs网站上看到我能够使用AZURE_TAGS =,我可以假设,利用部署机器时创建的Azure标签,这样我就可以使用playbooks只影响我定义的那些标记机器。 / p>

Azure文档:http://docs.ansible.com/ansible/latest/guide_azure.html

我们的想法是在某些已标记的计算机上运行playbooks来更新/修改其设置。就像在静态Ansible主机文件中定义的组运行一样。

也许我把这一切都搞错了,这不是我能做的,或者也许是这样,但对于我的生活,我无法找到任何在剧本中使用azure_tags =的人的例子。我不知道即使它是在剧本中定义的,也不是它的论点。

以此为指导,步骤12:http://codeheaven.io/15-things-you-should-know-about-ansible/

我可以看到这个人如何在hosts参数中使用了tag选项,我已经完成了这项工作,但是在检查动态库存时找不到该机器。

任何人都可以指导我朝正确的方向发展,或者更好的是,给我一个这些标签系统如何运作的例子?

1 个答案:

答案 0 :(得分:2)

对于那些关心或被困的人来说,这就是答案。

以下示例不是运行playbooks,而是针对与给定主机选择匹配的主机运行Ansible ping命令。

选择Azure订阅中的所有VM:

ansible azure -i ./azure_rm.py -m win_ping

选择给定区域/位置名称中的所有虚拟机(我们在ukwest和uksouth中拥有主机 - 取自先前创建的资源组):

ansible ukwest -i ./azure_rm.py -m win_ping 

选择名为ServerRole的标记设置为值WebServer

的所有VM
ansible ServerRole_WebServer -i ./azure_rm.py -m win_ping

在部署虚拟机时,我使用了某些标签来识别它们,这里是一个使用Playbook来对抗'AnsibleVM1'的'displayName'标签的示例

# Run post build scripts on machines taggedd with AnsibleVM1 from commad line variable with "{{ hosts }}"
# ansible-playbook scripts.yml -i azure_rm.py --extra-vars "hosts=displayName_AnsibleVM1" --ask-vault-pass

- hosts: "{{ hosts }}"
  gather_facts: no

  vars_files:
   - ./vars/vault.yml
   - ./vars/vars.yml

  tasks:
   - include_vars: vault.yml
   - name: formatDataDisk script
     script: ./files/formatDataDisk.ps1

   - name: prepMachine script
     script: ./files/prepMachine.ps1

   - name: Reboot machine to apply scripts
     win_reboot:

这是我用来运行它的命令行。请注意,变量包含在命令行中,因此我可以动态更改名称:

ansible-playbook scripts.yml -i azure_rm.py --extra-vars "hosts=displayName_AnsibleVM1" --ask-vault-pass