ansible - 如何包含角色(vars)目录中的变量?
问题描述
我有我的 ansible 剧本,它基本上从 esxi 中的模板创建一个新的虚拟机,我必须将剧本转换为角色。我是 ansible 的新手,所以我不知道如何从角色(安装)->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
问题是我不知道如何从角色-> 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 中的变量是一组将替换某些占位符的值。你在运行你的剧本时提供它们,如果你包含角色等,它们将“涓涓细流”。检查文档以了解 ansible 中的变量优先级。
因此,您要做的是将变量分配放入库存中(您也可以使用 将变量拆分到单独的文件中group_vars
),然后使用-i path/to/inventory.yml
on 您的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
不是必需的,但可以方便您很少更改的变量
推荐阅读
- python - 试图用循环标记多个单词
- ios - 无需先向上滚动即可显示搜索栏?
- javascript - TypeError:无法解构“未定义”或“空”的属性“queryResult”
- node.js - JSON解析错误JSON代码验证正确,错误仍然存在
- django - 在哪里以及如何编辑默认的 Django 主页
- c - 为什么我的小 C 程序使用 cat 实用程序打印不同的字符串?
- python - 为什么我的 cogs 中的错误不会显示在 pycharm 的控制台中
- javascript - 循环并在javascript中的数组对象键中使用条件库创建编号
- google-chrome - IE浏览器中的vue框架 IE浏览器有坏图
- dropwizard - java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/TSFBuilder