我正在配置一组 40 台服务器,由 SaltStack 进行管理。我目前只使用一台 minion 进行测试,我已将其成功添加到 master。为简单起见,我在各自的机器上使用来自 Ubuntu 14.04.1 软件包存储库的最新版本的 salt 和 salt-minion。
我拥有看似合理的配置和目录结构,但是每当我尝试运行时salt '*' state.highstate
,我都会收到错误消息,提示顶级文件与节点不匹配。如果我尝试使用手动运行状态文件salt '*' state.sls worker.users
,它会出错,提示不存在这样的文件。目录结构和文件如下。
知道为什么这不起作用吗?
root@salt-master:/srv/salt# tree /srv/salt
/srv/salt
├── worker
│ └── users.sls
└── top.sls
1 directory, 4 files
root@master:/srv/salt# salt '*' state.highstate
worker-2:
----------
State: - no
Name: states
Function: None
Result: False
Comment: No Top file or external nodes data matches found
Changes:
Summary
------------
Succeeded: 0
Failed: 1
------------
Total: 1
相关文件内容:
root@master:/srv/salt# cat top.sls
base:
'*':
- worker.users
root@master:/srv/salt# cat worker/users.sls
worker:
user.present:
- fullname: Service Account
- shell: /bin/bash
- home: /home/worker
admin:
user.present:
- fullname: Search Admin Account
- shell: /bin/bash
- home: /home/admin
文件根在主服务器上定义如下,并且我已经重新启动了所有机器:
file_roots:
base:
- /srv/salt
答案1
一般情况下,在调试的时候州.highstate你应该试试:
salt
(来自 master)
salt-call
(来自 minion)
Minion 已可联系到
- 确保没有防火墙阻碍,端口 4505 和 4506 应该对主服务器开放。另请参阅(http://docs.saltstack.com/en/latest/topics/tutorials/firewall.html)
salt '*' test.ping
-- 确保 minion 响应 ping(这确保 minion 服务正在运行)
版本匹配(推荐)
- 确保 minion/master 软件包的版本匹配。以 Ubuntu 为例(
dpkg -l salt-minion
在 minion 和dpkg -l salt-master
master 上)。
Minion 处于正确状态
- 彻底清除 minion 上的缓存
rm -rm /var/cache/salt/minion/files/base/*
- 检查以确保 Minion 具有正确的 Grain
salt-call grains.items
检查日志
salt-call -l debug state.highstate
-- 检查是否可以使用“调试”模式捕获有关错误的更多信息- 查看
/var/log/salt/minion
。