从可解释的事实中找出变数
更新:我有四个系统,在这些系统中,我需要提取事实,然后使用它们作为Jinja2模板上的变量。真正的主机名有一个带有破折号的前缀,这使得很难将整个主机名用作变量。系统设置为:
office1
debn-web01
ubun-web02
office2
linx-web01
linx-web02
在Ansible的剧本中我有:
^{pr2}$我想提取主机名上破折号后的主机名部分,即“debn-web01”->;“web01”,将其用作先前创建的ansible变量。在
所以在Jinja2模板中我有:
# This should create the var: web01
{% set trimd_hostname = ansible_hostname.split("-")[1] %}
# Start of Ansible Config File:
host_name: {{ ansible_hostname }}
web01 host_ip: {{ ansible_eth0.ipv4.address }}
host_peer: {{ office1[ trimd_hostname ]peer }}
trim选项正在工作,因为我可以在模板上自己打印输出。但是我得到一个错误,peer不是office1.trimd_hostname的变量对象。在
回答这个问题有点棘手,因为你还没有发布完整的复制品。这意味着这个问题可能有点离题,因为我不得不对你所做的做一些假设。在
如果我尝试用下面的示例术语集重现您的问题,它可以正常工作:
在
^{pr2}$output.txt
中生成以下内容:我已经指出了你问题中的一个错误,但很难判断这是一个真正的错误,还是仅仅是一个复制/粘贴错误,当你写问题的时候。在
我想建议一种不同的方式来组织你的数据。去掉
office1
和office2
变量,改用ansible host_vars来存储信息。在也就是说,使用以下内容创建
host_vars/dbn-web01.yml
:其他主人也一样。然后你的模板就变成了:
peer
变量的值将是适合于运行任务的特定主机的值。在相关问题 更多 >
编程相关推荐