首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将变量转换为包含剧本?

如何将变量转换为包含剧本?
EN

Stack Overflow用户
提问于 2017-01-31 09:53:01
回答 1查看 1.1K关注 0票数 0

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

任务主机名****************************************************************致命: 192.168.250.102: FAILED!=> {“variable”:true,"msg":“args”字段有一个无效的值,该值似乎包含一个未定义的变量。错误是:{{ name_VM }:'name_VM‘是未定义的\n\n该错误似乎出现在’/etc/ansible/playbook/Task/new-vm.yml‘:第7行,第7列,但可能\n在文件的其他地方,这取决于确切的语法问题。\n冒犯行似乎是:\n pre_tasks:\n -主机名:\n pre_tasks:\n\n“}

如何在pre_tasks中传递变量包括剧本?

主要剧本:

代码语言:javascript
复制
- 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

新的-vm手册:

代码语言:javascript
复制
- 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,在其中添加主机:

代码语言:javascript
复制
- 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-31 10:09:19

在您的例子中,name_VM是游戏绑定的,在第二次播放时是不可见的。

您需要将一个事实分配给temp主机(我猜您在vm-create角色中的某个地方使用了add_host;所以只需在那里添加name_vm: "{{ name_VM }}"主机事实)。

然后,在第二次播放中,您可以访问{{ name_vm }}主机事实。

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

代码语言:javascript
复制
- 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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41954395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档