首页 文章

使用Salt中的Jinja从OrderedDict解析/提取

提问于
浏览
0

在解析salt命令的结果时,我遇到了一个相当奇怪的问题 . 我正在运行的命令是

{% set hostname = salt['publish.publish']('roles:*{}*'.format(role), 'grains.item', 'fqdn', 'grain') %}

输出如下:

OrderedDict([('1.server.com', OrderedDict([('fqdn', '1.server.com')])), ('0.server.com', OrderedDict([('fqdn', '0.server.com')]))])

现在我的理解是,当我在上面的结果上使用下面一行上的items()时,它应该工作

{% for hostname, fqdn in salt['publish.publish']('roles:*{}*'.format(role), 'grains.item', 'fqdn', 'grain').items() %}

但是当我在上面的行中使用 items() 时,我开始遇到错误:

failed: Jinja variable 'None' has no attribute 'items'

我尝试了其他几种方法(做items() . items()或将结果存储在变量中然后运行for循环)以获得 OrderedDict 列表,但似乎没有任何方法可以提供帮助 .

1 回答

  • 0

    要么我不太了解Python,要么就会发生奇怪的事情 . 只需添加支票即可完成上述工作 . 所以工作块看起来像(当然是部分代码):

    {% set hostname = salt['publish.publish']('roles:*{}*'.format(role), 'grains.item', 'fqdn', 'grain') %}
    {% if hostname is not none %}
    {% for host, site in hostname.items() %}
    

    我的理解是 if 检查仅用于检查以防 hostname 为空 . 但看起来即使有数据 - 如果需要检查 . 知道这个谜仍然很好奇!

相关问题