Saltstack和使状态通用

时间:2016-10-27 13:40:29

标签: jinja2 salt-stack

需要一些帮助,因为我现在有点卡住了。最终目标是拥有一个通用的状态,并允许我们将我们的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。有没有办法专门测试这个?

有人可以帮忙吗?

2 个答案:

答案 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的包含。

现在一切顺利。