有时我需要测试一些我在ansible角色中使用的jinja2模板.这样做最简单的方法是什么?
例如,我有一个模板(test.j2):
{% if users is defined and users %}
{% for user in users %}{{ user }}
{% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
和vars(在group_vars/all中):
---
users:
- Mike
- Smith
- Klara
- Alex
Run Code Online (Sandbox Code Playgroud) 我有一个带有所有接口的dict的ans_ host_var:
---
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
Run Code Online (Sandbox Code Playgroud)
我想检查dict是否有密钥vlan1,如果确定放入模板值vlan1.ip else put vlan2.ip.
{% if interfaces.vlan1 %}
# and also I try {% if 'vlan1' in interfaces %}
{{ interfaces.vlan1.ip }};
{% else %}
{{ interfaces.vlan2.ip|default("127.0.0.1") }};
{% endif %};
Run Code Online (Sandbox Code Playgroud)
但我有一个错误:
fatal: [127.0.0.1] => {'msg': "AnsibleUndefinedVariable: One or more undefined variables: 'dict object' has no attribute 'vlan1'", 'failed': True}
Run Code Online (Sandbox Code Playgroud)
我发现它必须在Jinja2中工作,但似乎在ansible中不起作用.也许有人有另一种解决这个问题的方法?当我定义vlan1时它工作正常.Ansible版本1.9.2
我试图在python中重现它,如果我的字典没有密钥vlan1,则没有错误.感谢@GUIDO …
我想在内联键盘的聊天中更新消息但是无法理解如何接收inline_message_id,或者它是否仅用于内联查询我如何确定chat_id和message_id在类电报中的editMessageText(*args,**kwargs)上使用它.bot.Bot?
我的代码示例(部分内容):
#!/usr/bin/python
import telegram
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, InlineQueryHandler, CallbackQueryHandler
tokenid = "YOUR_TOKEN_ID"
def inl(bot, update):
if update.callback_query.data == "k_light_on":
#func for turn on light res = k_light.on()
bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text="Turning on light ON!")
bot.editMessageText(inline_message_id=update.callback_query.inline_message_id, text="Do you want to turn On or Off light? Light is ON")
#hardcoded vars variant
#bot.editMessageText(message_id=298, chat_id=174554240, text="Do you want to turn On or Off light? Light is ON") …Run Code Online (Sandbox Code Playgroud)