需要一些帮助,因为我现在有点卡住了。最终目标是拥有一个通用的状态,并允许我们将我们的pem cert文件推送到任何需要它的服务器和每个服务器的不同目录。我希望这是有道理的。换句话说,我不希望每个服务器都有一个单独的状态来分发pem文件。
到目前为止我所拥有的:
要包含在相关服务器中的主要状态(我已将变量的具体细节更改为其他内容):
{% if 'custom_id' in pillar.get('the_custom_id') %}
{% set theuser = 'relevantuser' %}
{% set certpath = '/path/to/certs' %}
{% elif 'another-custom_id' in pillar.get('the_custom_id') %}
{% set theuser = 'relevantuser' %}
{% set certpath = '/path/to/certs' %}
{% else %}
{% set theuser = 'relevantuser' %}
{% set certpath = '/path/to/certs' %}
{% endif %}
{{ certpath }}:
file.directory:
- user: {{ theuser }}
- group: {{ theuser }}
- file_mode: 600
- dir_mode: 755
- makedirs: True
- recurse:
- user
- group
- mode
{% for cert_type in pillar.get('pem_certs', {}) %}
{{ certpath }}{{ cert_type }}.pem:
file.managed:
- context:
cert_type: {{ cert_type }}
- mode: 600
- source: salt://path/to/file/filename
- template: jinja
{% endfor %}
上面的file.managed源代码的内容:
{{ pillar['pem_certs'][cert_type] }}
pillar.get函数中的支柱文件将包含pem键。
pem_certs:
ca-cert:
-----BEGIN CERTIFICATE---------
etc
Saltstack环境已启动并正常运行。在添加rsa_id私钥时采取了相同的路线,以便工作正常。 file.directory工作正常并创建dir并相应地应用正确的用户。
从调试中我可以看到file.managed状态没有被渲染,我也不知道为什么。
运行状态调试输出:
[DEBUG ] Rendered data from file: /var/cache/salt/minion/files/base/path/to/state.sls:
/path/to/certs:
file.directory:
- user: theuser
- group: theuser
- file_mode: 600
- dir_mode: 755
- makedirs: True
- recurse:
- user
- group
- mode
[DEBUG ] LazyLoaded config.get
目前我假设pillar.get没有检索或无法检索pem_certs。有没有办法专门测试这个?
有人可以帮忙吗?
答案 0 :(得分:1)
你现在做的{% for cert_type in pillar.get('pem_certs', {}) %}
如果在小兵的支柱中不存在则返回一个空的dict - 我想这是第一件事。
对于调试,您希望通过salt 'minionid' pillar.get pem_certs
之类的操作知道是否有可用于您的仆从的数据。如果这没有显示支柱数据,请检查支柱的top.sls。支柱数据是否适用于您的小兵?
此外,您应该考虑使用{% for cert_type, cert_data in pillar.get('pem_certs', {}).iteritems() %}
- 如果这样做,您可以直接将内容移交到file.manage
模板的上下文,不再需要查询模板内的支柱数据了
答案 1 :(得分:0)
非常感谢dahrens帮助他追踪问题。我遗漏了包含pem证书的支柱数据的minion的包含。
现在一切顺利。