首页 文章

如何在无主模式下使用来自ext_pillar:file_tree的contents_pillar引用支柱项目?

提问于
浏览
1

我在独立的minion模式中使用salt,即只有一个没有master的实例 . /srv/secrets/ 文件夹包含秘密文件,如 id_rsa 文件和其他文件 . 在支柱状态文件中,我有以下内容

ext_pillar:
  - file_tree:
      root_dir: /srv/secrets/
      follow_dir_links: False
      keep_newline: True
  - some_other_var: some_other_value

当我做 salt-call saltutil.refresh_pillarsalt-call pillar.items 时,我得到以下内容

[INFO    ] Determining pillar cache
[INFO    ] Determining pillar cache
local:
    ----------
    ext_pillar:
        |_
          ----------
          file_tree:
              ----------
              follow_dir_links:
                  False
              keep_newline:
                  True
              root_dir:
                  /srv/secrets/
        |_
          ----------
          some_other_var:
              some_other_value

My question :如何使用 contents_pillar 参考例如 id_rsa 文件的竞争?

当我尝试 salt-call state.apply

ssh_private_key:
  file.managed:
    - name: /root/.ssh/id_rsa
    - contents_pillar: ext_pillar:id_rsa

我得到 Pillar ext_pillar:id_rsa does not exist . 当我使用 ext_pillar:some_other_var 时, contents_pillar 工作并设置为 some_other_value (如上所述) . 所以我猜整个支柱系统都在工作,但我错误地引用了它 . 我也尝试了 ext_pillar:file_tree:id_rsa 没有成功 .

我的设定:

1 回答

  • 2

    file_tree 提供的文件作为支柱数据公开,没有任何区别 . 要获取文件 tree_root/keys/id_rsa ,您需要使用: - contents_pillar: keys:id_rsa 根据我的需要,我添加一个名为 files 的根文件夹,以确保我不会在 file_tree 文件和其他支柱值之间产生冲突 .

    此外,在当前实现中,您必须将文件放在节点组或主机的目录结构中 .

    ext_root

    nodegroups/servers/ {files}
    nodegroups/stations/ {files}
    nodegroups/.../ {files}
    hosts/host1/ {files}
    hosts/host2/ {files}
    hosts/.../ {files}
    

    如果希望所有主机都获取某些文件,则必须创建包含所有主机的节点组,然后将文件放入: nodegroups/all/ . 但是,您还有其他问题,例如无法使用 salt-ssh 获取您的文件,因为此处不支持节点组(粒度不可用) . 我认为这也是独立盐的情况 .

    所以我想,在您的情况下,您可以将文件放在 hosts/{minion_id} 中 . minion_id 是您的主机名 .

相关问题