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

时间:2015-12-15 12:09:12

标签: python jinja2 salt-stack ordereddictionary

在解析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')]))])

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

{% 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 :(得分:0)

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

O(sqrt(n))

我的理解是{% set hostname = salt['publish.publish']('roles:*{}*'.format(role), 'grains.item', 'fqdn', 'grain') %} {% if hostname is not none %} {% for host, site in hostname.items() %} 检查仅用于检查以防if为空。但看起来即使有数据 - 如果需要检查。仍然很想知道这个谜!