我正在编写一个自定义Salt执行模块,该模块针对状态文件运行一些基本测试,这些状态文件包含一个具有不同测试和参数的YAML文件。该模块将读取这些YAML文件,并根据测试要求设置粒度,然后使用提供的粒度数据针对状态运行state.show_sls
。在我需要从pillar获取一些内容之前,该模块一直运行良好。然而柱子的数据从来没有根据新的颗粒集得到更新。我们也运行了一个无主设置,所以奴才做了所有的工作。
# pillar/top.sls
base:
'G@roles:bind and G@location:MyTown':
- match: compound
- bind.MyTown
在我的执行模块中,我设置:
#_/modules/my_execution_module.py
def all():
tests = _get_tests()
for test in tests:
__grains__.update(test['grains'])
__pillar__.update(__grains__)
print(__salt__['grains.get']('roles')) # Comes back with expected data.
print(__salt__['grains.get']('location')) # Comes back with expected data.
print(__salt__['pillar.get']('bind_conf')) # This comes back as blank.
__salt__['state.show_sls'](test['state'])
运行相同的测试,但单独运行所有salt命令来设置颗粒并打印颗粒/支柱信息,这与预期的一样。只有在这个自定义模块中,当它设置颗粒时,不会更新支柱信息。
salt-call.bat --versions
Salt Version:
Salt: 3004.1
Dependency Versions:
cffi: 1.14.6
cherrypy: 18.6.1
dateutil: 2.8.1
docker-py: Not Installed
gitdb: 4.0.7
gitpython: 3.1.18
Jinja2: 2.10.1
libgit2: Not Installed
M2Crypto: Not Installed
Mako: 1.1.4
msgpack: 0.6.2
msgpack-pure: Not Installed
mysql-python: Not Installed
pycparser: 2.20
pycrypto: Not Installed
pycryptodome: 3.10.1
pygit2: Not Installed
Python: 3.8.8 (tags/v3.8.8:024d805, Feb 19 2021, 13:18:16) [MSC v.1928 64 bit (AMD64)]
python-gnupg: 0.4.7
PyYAML: 5.4.1
PyZMQ: 19.0.0
smmap: 4.0.0
timelib: 0.2.4
Tornado: 4.5.3
ZMQ: 4.3.2
System Versions:
dist:
locale: cp1252
machine: AMD64
release: 10
system: Windows
version: 10 10.0.22621 SP0 Multiprocessor Free
1条答案
按热度按时间2hh7jdfx1#
颗粒和柱状物都被高速缓存,并且刷新是异步的。
在更改颗粒后运行该命令应该会有效:
尝试将颗粒添加到柱子(
__pillar__.update(__grains__)
)中是行不通的。它总是被最新编译的柱子替换。更多信息:www.example.comhttps://docs.saltproject.io/en/3005/topics/pillar/#in-memory-pillar-data-vs-on-demand-pillar-data
事实证明,在无主机设置中,刷新永远不会完成,因为没有主机来完成刷新。
像这样的黑客工程,但你需要多一点的情况下,新的支柱有一些关键删除。
考虑一下在无主设置中是否确实需要pillar,或者它是否可以是一个runner或orchestration,而不是一个执行模块。