首页 文章

Saltstack和使状态通用

提问于
浏览
0

需要一些帮助,因为我现在有点卡住了 . 最终目标是拥有一个通用的状态,并允许我们将我们的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 回答

  • 1

    你现在做的是 {% for cert_type in pillar.get('pem_certs', {}) %} 如果不存在于小兵的支柱中那么会返回一个空的dict - 我想这是第一件事 .

    对于调试,如果有像 salt 'minionid' pillar.get pem_certs 这样的数据可用于你的小兵,你想要 know . 如果这没有显示支柱数据,请检查支柱的top.sls . 支柱数据是否适用于您的小兵?

    此外,您应该考虑使用 {% for cert_type, cert_data in pillar.get('pem_certs', {}).iteritems() %} - 如果这样做,您可以直接将内容移交到 file.manage 模板的上下文,不再需要再查询模板内的支柱数据 .

  • 0

    非常感谢dahrens帮助他追踪问题 . 我遗漏了包含pem证书的支柱数据的minion的包含 .

    一切都运作良好 .

相关问题