使用 extra-vars 设置主机值对我的 Ansible 角色不起作用

Set hosts value with an extra-vars doesn't work for my Ansible role

我的 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”重新启动我的剧本时只扮演这个角色...... 它有效!

我不知道为什么当我启动整个剧本时它不起作用,而当我只启动第 3 个角色时..它有效..

有人可以帮助我吗?

谢谢:)

PS:由于第二个角色,我将我的 {{ Host_Name }} 机器添加到 /etc/ansible/hosts 文件中:

[VM]
toto

Ansible 在启动 playbook 之前读取 /etc/ansible/hosts 或任何其他清单文件。在播放期间(或之间)不会再次阅读它。您在播放期间填充主机的文件,然后尝试在下一个播放中读取;这是行不通的。您必须使用 add_host 将动态创建的主机添加到 playbook 的内存清单中。

如果您不想明确地add_host,那么还有另一种方法refresh inventory。您必须在需要更新库存的播放之前调用元模块来刷新库存。

示例

- name: Re-read inventory files
  meta: refresh_inventory