Python中文
首页
教程
问答
标签
搜索
登录
注册
检查ansib上Jinja2模板中的dict中是否存在密钥
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我有一个主机变量负责与dict的所有接口:</p> <pre><code>--- interfaces: vlan0: ip: 127.0.0.1 mask: 255.255.255.0 state: true vlan2: ip: 127.0.1.1 mask: 255.255.255.0 state: true </code></pre> <p>我想检查dict是否有一个key<strong>vlan1</strong>if ok put to template value<strong>vlan1.ip</strong>else put<strong>vlan2.ip</strong>。</p> <pre><code>{% if interfaces.vlan1 %} # and also I try {% if 'vlan1' in interfaces %} {{ interfaces.vlan1.ip }}; {% else %} {{ interfaces.vlan2.ip|default("127.0.0.1") }}; {% endif %}; </code></pre> <p>但我有个错误:</p> <pre><code>fatal: [127.0.0.1] => {'msg': "AnsibleUndefinedVariable: One or more undefined variables: 'dict object' has no attribute 'vlan1'", 'failed': True} </code></pre> <p>我<a href="https://stackoverflow.com/questions/27740153/check-if-key-exists-in-a-python-dict-in-jinja2-templates">found</a>认为它必须在Jinja2工作,但似乎在ansible不工作。也许有人有别的办法来解决这个问题? 当我定义<strong>vlan1时,它工作正常。Ansible版本1.9.2</p> <p>我试图在python中复制它,如果我的字典没有键vlan1,则不会出错。感谢@GUIDO</p> <pre><code>>>> from jinja2 import Template >>> b = Template(""" ... {% if interfaces.vlan1 %} ... {{ interfaces.vlan1.ip }} ... {% else %} ... {{ interfaces.vlan2.ip|default("127.0.3.1") }} ... {% endif %}""") >>> b.render(interfaces={'vlan3':{'ip':'127.0.1.1'},'vlan2':{'ip':'127.0.2.1'}}) u'\n\n127.0.2.1\n' >>> b.render(interfaces={'vlan1':{'ip':'127.0.1.1'},'vlan2':{'ip':'127.0.2.1'}}) u'\n\n127.0.1.1\n' </code></pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>答案很简单,并显示在ansible错误消息中。首先,我需要检查是否定义了var。</p> <pre><code>{% if interfaces.vlan1 is defined %} {{ interfaces.vlan1.ip }} {% else %} {{ interfaces.vlan2.ip|default("127.0.3.1") }} {% endif %} </code></pre> <p>这种组合效果很好。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
我想从用户inpu创建一个类的实例
7 回答
我想从用户导入值,为此
3 回答
我想从用户那里得到一个整数输入,然后让for循环遍历该数字,然后调用一个函数多次
1 回答
我想从用户那里收到一个列表,并在其中执行一些步骤,然后在步骤完成后将其打印回来,但它没有按照我想要的方式工作
9 回答
我想从用户那里获取输入,并将值传递给(average=dict[x]/6),然后在那里获取resu
8 回答
我想从第一个列表中展示第一个词,然后从第二个列表中展示十个词,以此类推- Python
6 回答
我想从第一个空lin开始解析文本文件
4 回答
我想从简历、简历中提取特定部分
2 回答
我想从给定字典(python)的字符串中删除\u00a9、\u201d和类似的字符。
3 回答
我想从给定的网站Lin下载许多文件扩展名相同的Wget或Python文件
3 回答
我想从网上搜集一些关于抵押贷款的数据
2 回答
我想从网站上删除电子邮件地址
8 回答
我想从网站上读取数据该网站包含可下载的文件,然后我想用python脚本把它发送给oracle如何?
9 回答
我想从网站中提取数据,然后将其显示在我的网页上
7 回答
我想从网页上提取统计数据。
3 回答
我想从网页上解析首都城市,并在用户输入国家时在终端上打印它们
6 回答
我想从色彩图中删除前n个颜色,而不丢失原始颜色数
1 回答
我想从课堂上打印字典里的键
8 回答
我想从费用表中获取学生上次支付的费用,其中学生id=id
2 回答
我想从较低的顺序对多重列表进行排序,但我无法在一行中生成结果
5 回答