根据 Ansible 事实创建变量 [英] Create Variable From Ansible Facts
本文介绍了根据 Ansible 事实创建变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有四个系统,其中我需要提取事实,然后将它们用作 jinja 2 模板上的变量.
I have four systems, in those I need to extract facts then use them as variables on a jinja 2 template.
在 Ansible 中,我有:
In Ansible i have:
vars:
office1:
web01:
myip: 10.10.10.10 // or fact
peer: 10.10.10.20
web02
myip: 10.10.10.20 // or fact
peer: 10.10.10.10
office2:
web01:
myip: 10.20.20.30 // or fact
peer: 10.20.20.40
web02
myip: 10.20.20.40 // or fact
peer: 10.20.20.30
在我有的 jinja 2 模板上:
On the jinja 2 template I have:
# Config File:
host_name: {{ ansible_hostname }} // web01
host_ip: {{ ansible_eth0.ipv4.address }}
host_peer: {{ office1."{{ ansible_hostname }}".peer }}
但是我收到错误消息,Ansible 变量:office1.ansible_hostname.peer 未定义.
I however get error that Ansible variable: office1.ansible_hostname.peer is not defined.
对此的任何帮助将不胜感激.
Any help with this would be greatly appreciated.
推荐答案
Ansible 中的扩展不是递归的.试试下面的扩展
Expansion in Ansible is not recursive. Try the expansion below
host_peer: {{ office1[ansible_hostname].peer }}
例如下面的播放
- hosts: test_01
gather_facts: yes
vars:
office1:
test_01:
myip: 10.20.20.30
peer: 10.20.20.40
tasks:
- template:
src: template.j2
dest: /scratch/test_01.cfg
使用 template.j2
with template.j2
# Config File:
host_name: {{ ansible_hostname }}
host_peer: {{ office1[ansible_hostname].peer }}
给予
# cat /scratch/test_01.cfg
# Config File:
host_name: test_01
host_peer: 10.20.20.40
回答问题
问:根据 Ansible 事实创建变量"
A:一个选项是使用 lookup vars.例如下面的播放
A: An option would be to use lookup vars. For example the play below
vars:
var1: var1
var2: var2
var3: var3
tasks:
- debug:
msg: "{{ lookup('vars', 'var' + item) }}"
with_sequence: start=1 end=3
给出(删节)
"msg": "var1"
"msg": "var2"
"msg": "var3"
这篇关于根据 Ansible 事实创建变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文