如何包含来自角色(vars)目录ansible的变量?

问题描述 投票:0回答:1

我有我的 ansible 剧本,它基本上从 esxi 中的模板创建一个新的虚拟机,我必须将剧本转换为角色。我是 ansible 新手,所以我不知道如何从 Roles(install)->vars 目录调用我的硬编码变量。

这是我的剧本

---
# create a new VM from a template

- name: VM from template
  hosts: localhost
  gather_facts: false
  connection: local
  vars:
    vcenter_hostname: vcenter-app
    vcenter_user: john@doe
    vcenter_pass: blabla6
    esxhost: esx-4.cbalo.fr
    datastore: VM-PROD-02-NORMAL
    vmtemplate: Centos7-template
    name: "newvm2"
    notes: Ansible Test
    dumpfacts: False
  tasks:
    - name: Create VM from template
      vmware_guest:
        validate_certs: False
        hostname: "{{ vcenter_hostname }}"
        username: "{{ vcenter_user }}"
        password: "{{ vcenter_pass }}"
        esxi_hostname: "{{ esxhost }}"
        datacenter: CD06
        folder: Test
        name: "{{ name }}"
        template: "{{ vmtemplate }}"
        hardware:
          memory_mb: "{{ vm_memory | default(1024) }}"
        wait_for_ip_address: True
        state: present
      register: newvm2

我已将其分为我的角色(安装)->任务->main.yml,如下所示

---
- name: Create VM from template
              vmware_guest:
                validate_certs: False
                hostname: "{{ vcenter_hostname }}"
                username: "{{ vcenter_user }}"
                password: "{{ vcenter_pass }}"
                esxi_hostname: "{{ esxhost }}"
                datacenter: CD06
                folder: Test
                name: "{{ name }}"
                template: "{{ vmtemplate }}"
                hardware:
                  memory_mb: "{{ vm_memory | default(1024) }}"
                wait_for_ip_address: True
                state: present
              register: newvm2

然后在我的主目录中创建新文件

run.yml
并包含我的角色

---
    # create a new VM from a template
    
    - name: VM from template
      hosts: localhost
      gather_facts: false
      connection: local
      
      roles:
        - install

问题是我不知道如何从 Roles->vars 目录调用 vars,正如您在我的剧本中看到的那样,我有硬代码变量。我需要获取或设置文件中的变量并从该文件中调用它。

**vcenter_hostname: vcenter-app
vcenter_user: john@doe
vcenter_pass: blabla6
esxhost: esx-4.cbalo.fr
datastore: VM-PROD-02-NORMAL
vmtemplate: Centos7-template
name: "newvm2"
datacenter: CD06
folder: Test**
ansible
1个回答
0
投票

ansible 中的变量是一组值,将替换某些占位符。您在运行剧本时提供它们,如果您包含角色等,它们将“向下渗透”。检查文档以了解ansible中的变量优先级。

因此,您要做的是将变量分配放入 inventory 中(您也可以使用

group_vars
将变量拆分到单独的文件中),然后在
-i path/to/inventory.yml
命令上使用
ansible-playbook

结构可能看起来像这样:

my-ansible/
  roles/
    my-role/
      tasks/
        main.yaml
      defaults/
        main.yaml # contains default values for your variables
  inventory/
    inventory.yaml # contains hosts and variable assignments
  run.yaml
  

然后,你可以像这样运行它:

ansible-playbook -i inventory/inventory.yaml run.yaml

提示:

  • 不要使用
    my-role/vars
    ,因为很难覆盖其中的变量分配。 (参见变量优先级)
  • defaults/main.yaml
    不是必需的,但对于很少更改的变量来说可以很方便
© www.soinside.com 2019 - 2024. All rights reserved.