2

我正在启动一个使用 Salt Stack 来协调配置的项目。但它现在不工作了——日志文件(在minion上,在/var/log/salt/minion)没有显示任何错误,但是minion没有按照我的要求做。

基本上,我正在构建一个包含几个顶级文件和至少两个 minion 配置的 SaltStack。特别是,我正在调试一个我称之为引导程序的奴才(因为它应该在奴才上引导一个盐主):

master: localhost
file_client: local
file_roots:
  base:
    - /srv/salt/base
    - /srv/salt/states
  master:
    - /srv/salt/master
    - /srv/salt/master/states

据我所知,Salt 很好地加载了顶级文件,并将它们解析为有效对象,但 Salt 没有运行任何命令来响应这些对象。事实上,minion 日志文件说:

2014-03-01 23:00:09,644 [salt.utils.jinja ][DEBUG   ] Jinja search path: '['/srv/salt/base', '/srv/salt/state
2014-03-01 23:00:09,651 [salt.template    ][DEBUG   ] Rendered data from file: /srv/salt/base/top.sls:
base:
  '*':
    - edit.vim
    - essential
    - users.root

2014-03-01 23:00:09,656 [salt.loaded.int.render.yaml][DEBUG   ] Results of YAML rendering:
OrderedDict([('base', OrderedDict([('*', ['edit.vim', 'essential', 'users.root'])]))])

一切看起来都不错,只是它立即跳转到:

2014-03-01 23:00:09,661 [salt.utils.jinja ][DEBUG   ] Jinja search path: '['/srv/salt/master', '/srv/salt/mas
2014-03-01 23:00:09,662 [salt.template    ][DEBUG   ] Rendered data from file: /srv/salt/master/top.sls:
master:
  '10.47.94.0/24':
     - match: ipcidr
     - master
     - srv.dns.unbound

2014-03-01 23:00:09,665 [salt.loaded.int.render.yaml][DEBUG   ] Results of YAML rendering:
OrderedDict([('master', OrderedDict([('10.47.94.0/24', [OrderedDict([('match', 'ipcidr')]), 'master', 'srv.dns.unbound'])]))])

在整个日志文件的其余部分中,base 再也没有被提及。并且与 base 相关的命令/状态没有运行。我确实看到了 edit.vim、srv.dns.unbound 等的日志条目。但它们都遵循相同的模式:解析并且什么都不做。

我究竟做错了什么?我有一个模糊的印象,它与我的 minion 配置中有多个 file_roots 有关,但在我知道架构应该是什么之前,我宁愿不进行架构更改。(我之前已经尝试过使用Salt,遇到“this”静默错误,重新开始,现在又遇到了)

4

2 回答 2

1
master: localhost
file_client: local

'master: localhost' 和 'file_client: local' 选项是互斥的。

如果你有 'file_client: local' 那么本地 salt-minion 根本不会寻找主人。

如果想在同一台机器上运行 salt-master 和 salt-minion,那么您可以在 minion 配置中使用 'master: localhost' 并将 'file_client' 注释掉。在这种情况下,您还需要将您的 minion 和 master 配置分开。

至于您关于 top.sls 文件渲染的问题。那是根据设计。Salt 将在每个文件环境的根目录中查找并呈现每个 top.sls。因此,因为您有两个环境,它总是会渲染两个 top.sls 文件,然后为每个 minion 评估它们以确定在每个 minion 上执行的 sls 文件。

需要更多信息来解决您的基础环境中的状态未执行的原因。尝试运行以下命令并提供输出:

salt-call state.show_highstate -l debug
于 2014-09-08T19:08:41.253 回答
1

当我开始阅读 saltstack 文档时,这通常是一种困惑。

  1. 始终坚持主从设置,避免任何尝试玩甚至“认为无主”。Going Masterless 不会为您节省太多 CPU 和内存资源,但会为 saltstack 学习/构建过程带来更多混乱。

  2. 总是画一个逻辑图而不是“直接思考盐堆”。

  3. 提问时,请务必记下正确/明确的文件路径和名称,即配置文件、状态等,不要走捷径。

我想做类似的事情,即使用我的内网 salt-master 名称 AA 在数据中心 D 中提供 salt master X ,然后从 salt master X 开始提供 minion 以控制数据中心 D 内的所有 minion。

所以这样做是合乎逻辑的

Salt Master AA <->(数据中心 D

Server XYZ [Salt master X, Salt minion X to AA ],
 Server S_1 [Salt minion S_1, salt-master X ], 
 Server S_2 [Salt minion S_2, salt-master X ],
 Server S_3 [Salt minion S_3, salt-master X ]  

)

所以盐主 AA 将控制服务器 XYZ 作为一个奴才。然后我可以将下一级控制代码从主 AA 发送到服务器 XYZ,也许运行一个自动化脚本来卸载 AA 中的 salt minion 连接器。

于 2016-03-09T13:17:29.530 回答