我正在尝试编写一个匹配柱值的状态文件,但我不确定如何(或者是否可能)匹配dicts中的柱属性值。 salt.module.match API文档没有详细说明,并且没有一种显而易见的方法富有成效:
root@ms-tapir:~ # salt clowder saltutil.refresh_pillar
clowder:
None
root@ms-tapir:~ # salt clowder pillar.item wsgi_still
clowder:
----------
wsgi_still:
----------
foo:
bar
nginx_default:
----------
directives:
- return 444
root@ms-tapir:~ # salt clowder match.pillar 'wsgi_still["foo"]:bar'
clowder:
False
root@ms-tapir:~ # salt clowder match.pillar "wsgi_still['foo']:bar"
clowder:
False
root@ms-tapir:~ # salt clowder match.pillar "wsgi_still.foo:bar"
clowder:
False
我调试情况的尝试得到了在match.py中粘贴pdb_trace()
并在前台运行salt-minion,但这完全没用,导致通信错误而不是调试shell,大概是由于Salt与ØMQ的奇怪互动。 :)
为了澄清,我的目标是在我的/srv/salt/top.sls
文件中使用这样的工作:
base:
'wsgi_still["foo"]:bar':
- match: pillar
- wsgi_distiller
我已确认salt clowder match.pillar "foo:bar"
适用于我的设置(返回True
),当foo: bar
位于此小兵的支柱时。
另外,我认为从不同角度来看这也是同样的问题:
root@ms-tapir:~ # salt -I "foo:bar" test.ping
clowder:
True
root@ms-tapir:~ # salt -I "wsgi_still['foo']:bar" test.ping
我只是把它包括在内,因为'使用-I'标志是迄今为止我收到的唯一建议。 :)
答案 0 :(得分:2)
支柱数据中的嵌套dicts按以下方式访问:
salt -I "wsgi_still:foo:bar" test.ping
在topfile中进行匹配也是如此:
base:
'wsgi_still:foo:bar':
- match: pillar
- wsgi_distiller