我的Ansible角色无法使用Extra-var设置主机值

时间:2018-11-11 16:48:13

标签: ansible ansible-2.x

我的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

1 个答案:

答案 0 :(得分:0)

Ansible在启动剧本之前先读取/etc/ansible/hosts或任何其他清单文件。在播放过程中(或之间)不会再次读取。您正在播放中填充主机的文件,然后尝试在下一个播放中读取;这将无法正常工作。您必须使用add_host将动态创建的主机添加到Playbook的内存清单中。

如果您不想显式地add_host,则可以使用另一种方式来refresh inventory。您必须在需要更新清单的播放之前调用元模块来刷新清单。

示例

- name: Re-read inventory files
  meta: refresh_inventory