【问题标题】:How to transfer variables to include playbook?如何传输变量以包含剧本?
【发布时间】:2017-01-31 09:53:01
【问题描述】:

我有剧本,其中包括。还有 var_prompt “name_VM”,我需要在包含剧本“new-vm.yml”中传输变量,但我有错误:

任务 [主机名] ****************************************************** ************** 致命:[192.168.250.102]:失败! => {“失败”:真,“味精”:“ 字段“args”的值无效,似乎包含一个变量 那是未定义的。错误是: {{ name_VM }}: 'name_VM' is 未定义\n\n错误似乎出现在 '/etc/ansible/playbooks/tasks/new-vm.yml':第 7 行,第 7 列,但是 可能\n位于文件中的其他位置,具体取决于确切的语法 问题。\n\n违规行似乎是:\n\n pre_tasks:\n - 主机名:\n ^ 这里\n"}

pre_tasks include 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

new-vm 剧本:

- 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

check_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

【问题讨论】:

    标签: ansible ansible-2.x


    【解决方案1】:

    在您的情况下,name_VM 是播放绑定的,并且在第二次播放时将不可见。

    您需要为temp 主机分配一个事实(我猜您在vm-create 角色中的某个位置使用add_host;所以只需在此处添加name_vm: "{{ name_VM }}" 主机事实)。
    然后在第二场比赛中你可以访问{{ name_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
    

    【讨论】:

    • 抱歉,我不明白如何在主机中添加事实。我添加了我添加主机的部分剧本,请举例
    猜你喜欢
    • 2018-09-21
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多