Ansible 使用一个额外的变量设置hosts值';I don’我不能胜任我的职责

Ansible 使用一个额外的变量设置hosts值';I don’我不能胜任我的职责,ansible,ansible-2.x,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

我的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"
我使用以下命令启动此剧本:

---
- 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说“
跳过:没有匹配的主机。”

但是当我用“
--tags post\u install
”重新启动我的剧本时,我只扮演这个角色有效

---
- 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"
我不知道为什么当我发布整个剧本时它不起作用,而当我只发布第三个角色时。。它起作用了

有人能帮我吗

Thx:)

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

[VM]
toto

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

如果您不想显式地
添加\u主机
,那么还有另一种方法可以。在播放之前,您必须调用元模块刷新库存,这需要更新的库存

示例

- name: Re-read inventory files
  meta: refresh_inventory

“PS:由于第二个角色,我将我的{{Host_Name}}计算机添加到/etc/ansible/hosts文件中”这是否意味着在第二个角色运行之前,ansible不知道
toto
主机名?因为如果是这样的话,我想你还需要用它来教内存中的ansible关于主机谢谢你@Kanwar Saad,你的例子解决了我的问题!很高兴这有帮助。。你也能接受我的回答吗