Ansible 如何将变量转移到playbook中?

Ansible 如何将变量转移到playbook中?,ansible,ansible-2.x,Ansible,Ansible 2.x,我有剧本,其中包括。还有var_提示符“name_VM”,我需要include playbook“new VM.yml”中的transfer变量,但我有错误: 任务[主机名] ****************************************************************致命:[192.168.250.102]:失败!=>{“failed”:true,“msg”:“the 字段“args”的值无效,似乎包含变量 这是未定义的。错误是:{{name\u VM}:'n

我有剧本,其中包括。还有var_提示符“name_VM”,我需要include playbook“new VM.yml”中的transfer变量,但我有错误:

任务[主机名] ****************************************************************致命:[192.168.250.102]:失败!=>{“failed”:true,“msg”:“the 字段“args”的值无效,似乎包含变量 这是未定义的。错误是:{{name\u VM}:'name\u VM'是 未定义\n\n该错误似乎已被忽略 “/etc/ansible/playbooks/tasks/new vm.yml”:第7行第7列,但 根据确切的语法,可能\n出现在文件的其他位置 问题。\n\n出现问题的行是:\n\n预\u任务:\n- 主机名:\n^此处\n“}

如何在pre_任务(包括playbook)中传递变量

主要剧本:

- hosts: localhost
  gather_facts: false
  connection: local
  become: true
  vars_files:
    - ../roles/vm-create/vars/am-default.yml
  vars_prompt:
    - name: "name_VM"
      prompt: "VM name:"
      private: no
      default: "vm001"

    - name: "size_hard"
      prompt: "Size hard disk (Gb)"
      private: no
      default: "16"

    - name: "size_memory"
      prompt: "Size memory (Mb)"
      private: no
      default: "2048"

    - name: "count_CPU"
      prompt: "Count CPU:"
      private: no
      default: "2"

  roles:
    - vm-create

  tasks:
    - include: tasks/check-ip.yml

- include: tasks/new-vm.yml
- hosts: temp
  vars:
      ldap_server: ldap://ldap.example.com
      agent_server: zabbix.aexample.com
  pre_tasks:
    - hostname:
        name: "{{ name_vm }}"
  roles:
    - { role: zabbix-agent, tags: [ 'zabbix' ] }
    - { role: ldap-client, tags: [ 'ldap' ] }
    - { role: motd, tags: [ 'motd' ] }
  tasks:
    - telegram:
        token: 'bot12345:XXXXXX'
        chat_id: XXXXX
        msg: "New VM {{ ansible_hostname }} ({{ ansible_all_ipv4_addresses }}) is created and has been configured."
      tags:
        - telegram
新虚拟机剧本:

- hosts: localhost
  gather_facts: false
  connection: local
  become: true
  vars_files:
    - ../roles/vm-create/vars/am-default.yml
  vars_prompt:
    - name: "name_VM"
      prompt: "VM name:"
      private: no
      default: "vm001"

    - name: "size_hard"
      prompt: "Size hard disk (Gb)"
      private: no
      default: "16"

    - name: "size_memory"
      prompt: "Size memory (Mb)"
      private: no
      default: "2048"

    - name: "count_CPU"
      prompt: "Count CPU:"
      private: no
      default: "2"

  roles:
    - vm-create

  tasks:
    - include: tasks/check-ip.yml

- include: tasks/new-vm.yml
- hosts: temp
  vars:
      ldap_server: ldap://ldap.example.com
      agent_server: zabbix.aexample.com
  pre_tasks:
    - hostname:
        name: "{{ name_vm }}"
  roles:
    - { role: zabbix-agent, tags: [ 'zabbix' ] }
    - { role: ldap-client, tags: [ 'ldap' ] }
    - { role: motd, tags: [ 'motd' ] }
  tasks:
    - telegram:
        token: 'bot12345:XXXXXX'
        chat_id: XXXXX
        msg: "New VM {{ ansible_hostname }} ({{ ansible_all_ipv4_addresses }}) is created and has been configured."
      tags:
        - telegram
选中我在其中添加主机的\u ip.yml:

- vsphere_guest:
    vcenter_hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_user }}"
    password: "{{ vcenter_pass }}"
    guest: "{{ name_VM }}"
    vmware_guest_facts: yes
    validate_certs: no
  register: vsphere_facts
  until: vsphere_facts.ansible_facts.hw_eth0.ipaddresses[0] | match("192.168.250.")
  retries: 6
  delay: 10
- name: Ensure virtual machine is in the dynamic inventory
  add_host:
    name: "{{ vsphere_facts.ansible_facts.hw_eth0.ipaddresses[0] }}"
    ansible_user: root
    ansible_ssh_pass: pass
    groups: temp

在您的情况下,
name\u VM
已绑定到播放,在第二次播放时将不可见

您需要将一个事实分配给
temp
host(我猜您使用
add\u host
vm create
角色中的某个地方;所以只需添加
name\u vm:{{{name\u vm}}”
主机事实即可。
然后在第二个游戏中,您可以访问主机事实

更新:示例,基于问题编辑

- name: Ensure virtual machine is in the dynamic inventory
  add_host:
    name: "{{ vsphere_facts.ansible_facts.hw_eth0.ipaddresses[0] }}"
    name_vm: "{{ name_VM }}"
    ansible_user: root
    ansible_ssh_pass: pass
    groups: temp

在您的情况下,
name\u VM
已绑定到播放,在第二次播放时将不可见

您需要将一个事实分配给
temp
host(我猜您使用
add\u host
vm create
角色中的某个地方;所以只需添加
name\u vm:{{{name\u vm}}”
主机事实即可。
然后在第二个游戏中,您可以访问主机事实

更新:示例,基于问题编辑

- name: Ensure virtual machine is in the dynamic inventory
  add_host:
    name: "{{ vsphere_facts.ansible_facts.hw_eth0.ipaddresses[0] }}"
    name_vm: "{{ name_VM }}"
    ansible_user: root
    ansible_ssh_pass: pass
    groups: temp

sry,我不知道如何在主机中添加事实。我添加了我添加主机的部分剧本,请举例说明,我不知道如何在主机中添加事实。我添加了部分剧本,其中我添加了主机,请举例说明