ansible - 如何动态地将游戏中的主机设置为 Ansible 中 vars_file 中的变量
问题描述
我有一个根据调查定义一组变量的游戏,运行任务包括将变量写入文件。在第二场比赛中,我想根据文件中的变量设置主机。它给了我一个未定义的主机变量。
---
- name: "Provision Routers"
connection: network_cli
gather_facts: false
hosts: '{{ DataCenter }}'
vars:
customer_name: "{{ CustomerName }}"
data_center: "{{ DataCenter }}"
evpn_id: "{{ EVPN_ID }}"
layer_3: "{{ LAYER_3 }}"
ip_address: "{{ BVI_IP }}"
prefix_mask: "{{ MASK }}"
tasks:
- name: "Config Router EVPN"
iosxr_config:
lines:
- evi {{evpn_id}}
- control-word-disable
- advertise-mac
parents: evpn
------------------I'm leaving a bunch of tasks out to--------------------------
------------------Make this easier to read-------------------------------------
- name: Make vars persistent
local_action:
module: copy
content:
- customer_name: "{{ customer_name }}"
- data_center: "{{ data_center }}"
- evpn_id: "{{ evpn_id }}"
dest: /etc/ansible/group_vars/evpn_vars.yml
mode: 0666
# 2nd play---------------------------------------------------------------------
- name: "Provision Switches"
hosts: '{{ switch_group }}'
vars_files:
- /etc/ansible/group_vars/evpn_vars.yml
tasks:
- name: Set switch_group to Commerce
set_fact:
switch_group: Commerce_Switches
when: data_center == 'Commerce'
- name: Set switch_group to Gumlog
set_fact:
switch_group: Gumlog_Switches
when: data_center == 'Gumlog'
- name: Set switch_group to Richland
set_fact:
switch_group: Richland_Switches
when: data_center == 'Richland'
这是我得到的错误:
错误!字段“主机”具有无效值,其中包括未定义的变量。错误是:“switch_group”未定义错误似乎在“/tmp/awx_929_h3cfbasn/project/provision_evpn_beta.yml”中:第 106 行,第 3 列,但可能在文件中的其他位置,具体取决于确切的语法问题。违规行似乎是:
- 名称:“配置开关” ^ 此处
这是我的变量文件的样子:
[{“customer_name”:“TEST444”},{“data_center”:“Richland”},{“evpn_id”:“444”}]
为了概括我想要做的事情,我需要根据原始调查中的先前输入将主机设置为不同的组。
为了增加一些色彩,我的第一个游戏是在数据中心配置一组路由器,第二个游戏是交换机。我将它们分开,因为显然您不想将相同的配置推送到路由器作为交换机。如果有更好的方法来隔离这两组(他们确实有不同的操作系统),我全神贯注。
解决方案
你的switch_group是假的。
[{"customer_name": "TEST444"}, {"data_center": "Richland"}, {"evpn_id": "444"}]
它应该是有效的 JSON。看
$ ansible-inventory -i "8.8.4.4," --list all
{
"_meta": {
"hostvars": {}
},
"all": {
"children": [
"ungrouped"
]
},
"ungrouped": {
"hosts": [
"8.8.4.4"
]
}
}
因此通过测试ansible-inventory --list switch_group
。
推荐阅读
- matlab - 上下分屏实验
- node.js - 我想在运行 nightmare.js 后获取 gig 中的所有数据,但我不断得到 gig 未定义
- javascript - 将鼠标悬停在 Javascript 和/或 CSS 列表中的相应单词上时,如何显示不同的图像?
- python - 训练和验证的不同 Keras 增强
- oracle - 在 SQL Server 中有一个我想在 Oracle 中复制的计数器
- android - 旋转屏幕时可用蓝牙设备的 ListView 变为空白
- java - Android Firebase:如果 OnCompleteListener 在主应用程序线程上调用,它如何异步工作?
- django - Django - 图片未上传
- reactjs - React - 线性渐变内联样式供应商前缀
- r - R重塑数据框以获得观察的出现总数