我有我的 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 中的变量是一组值,将替换某些占位符。您在运行剧本时提供它们,如果您包含角色等,它们将“向下渗透”。检查文档以了解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
不是必需的,但对于很少更改的变量来说可以很方便