我的ansible剧本有问题:
我的剧本由5个角色组成,看起来像这样:
---
- name: Création de la machine virtuelle {{ Host_Name }} à l'aide du template {{ vcenter_template }}
hosts: localhost
gather_facts: no
roles:
- roles/VMWare/deploy
tags: deploy
- name: Configuration de l'échange de clé de root@lrtstfpe vers root@{{ Host_Name }}
hosts: localhost
gather_facts: no
roles:
- roles/VMWare/pre_config
tags: pre_config
- name: Opérations post install
hosts: '{{ Host_Name }}'
gather_facts: no
roles:
- roles/VMWare/post_install
tags: post_install
- name: Ajout du pointeur DNS sur le controleur de domaine wpsrvctldom1.uem.lan
hosts: DNS
gather_facts: no
roles:
- roles/DNS/
tags: DNS
- name: Ajout du mot de passe Keepass de l'utilisateur root de la machine
hosts: DNS
gather_facts: no
roles:
- roles/Keepass/
tags: keepass
我使用以下命令启动此剧本:
ansible-playbook playbook/deployVM.yml --extra-vars "Host_Name=toto"
我的任务名称中正确解释了我的变量,但是使用该变量的值在相应主机上执行操作的第三个角色被跳过,Ansible说“ skipping: no hosts matched
”。
但是当我用“ --tags post_install
”重新启动剧本时,只扮演这个角色... 有效!
我不知道为什么当我启动整个剧本时不起作用,而当我仅启动第三个角色时..它起作用了。.
有人可以帮助我吗?
Thx:)
PS:由于第二个角色,我将{{ Host_Name }}
机器添加到/etc/ansible/hosts
文件中:
[VM]
toto
答案 0 :(得分:0)
Ansible在启动剧本之前先读取/etc/ansible/hosts
或任何其他清单文件。在播放过程中(或之间)不会再次读取。您正在播放中填充主机的文件,然后尝试在下一个播放中读取;这将无法正常工作。您必须使用add_host将动态创建的主机添加到Playbook的内存清单中。
如果您不想显式地add_host
,则可以使用另一种方式来refresh inventory。您必须在需要更新清单的播放之前调用元模块来刷新清单。
示例:
- name: Re-read inventory files
meta: refresh_inventory