小编Ale*_*lex的帖子

如何在ansible中测试jinja2模板?

有时我需要测试一些我在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)

jinja2 ansible ansible-playbook ansible-template

46
推荐指数
4
解决办法
4万
查看次数

检查ansible中Jinja2模板中的dict中是否存在键

我有一个带有所有接口的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 …

python templates dictionary jinja2 ansible

21
推荐指数
2
解决办法
3万
查看次数

使用回调查询使用内联键盘更新消息

我想在内联键盘的聊天中更新消息但是无法理解如何接收inline_message_id,或者它是否仅用于内联查询我如何确定chat_idmessage_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)

python telegram python-telegram-bot telegram-bot

1
推荐指数
1
解决办法
7822
查看次数