![saltstack 配置“未找到顶级文件或外部节点数据匹配”](https://linux22.com/image/647421/saltstack%20%E9%85%8D%E7%BD%AE%E2%80%9C%E6%9C%AA%E6%89%BE%E5%88%B0%E9%A1%B6%E7%BA%A7%E6%96%87%E4%BB%B6%E6%88%96%E5%A4%96%E9%83%A8%E8%8A%82%E7%82%B9%E6%95%B0%E6%8D%AE%E5%8C%B9%E9%85%8D%E2%80%9D.png)
这个问题的一个非常相似的版本是这里,但由于此人将其顶级文件放在了错误的目录中,因此情况完全不同。
我有 3 个项目,分别称为 project1、project2 和 project3。我的目标是创建一个 master/minion 设置,其中我的 srv/salt 目录如下所示:
/srv/salt
|top.sls
|/project1
|__/postgresql
|__init.sls
|__config.sql
|__/iptables
|__init.sls
|__config.sh
|/project2
|__/tomcat
|__init.sls
|__config.sh
|__/java
|__init.sls
|__config.sh
|/project3
|__/serverconfig
|__init.sls
|__config.sql
|__/conky
|__init.sls
|__config.sh
为了实现这一点,我编辑了 /etc/salt/master 以读取
#/etc/salt/master
file_roots:
base:
- /srv/salt
project1:
- /srv/salt/project1
project2:
- /srv/salt/project2
project3:
- /srv/salt/project3
我还想设置节点,因为我有涉及每个项目的静态服务器,这对我来说是一种非常直观的组织方式。
我首先编辑 /etc/salt/master 来显示我的节点组
#/etc/salt/master
nodegroups:
project1: 'L@project1_server1,project1_server2,project1_server3'
project2: 'L@project2_server1,project2_server2,project2_server3'
project3: 'L@project3_server1,project3_server2,project3_server3'
在运行设置好的程序时,我尝试使用以下命令将 project1 状态应用到其服务器:
salt -N project1 state.highstate
这对于 project1_server2 和 project1_server3 来说正确完成,但是对于 project1_server1 来说失败。
project1_server1 的错误是“未找到顶级文件或外部节点数据匹配”
我愿意听取关于如何更轻松地实施此设置的建议,但我想知道此设置不起作用的原因。感谢您的帮助。
编辑1
添加我的 top.sls 文件
#/srv/salt/top.sls
project1:
project1:
- match: nodegroup
- postgresql
- iptables
project2:
project2:
- match: nodegroup
- tomcat
- java
project3:
project3:
- match: nodegroup
- serverconfig
- conky
编辑2
salt -N project1grains.item id 的输出
project1_server1:
----------
id:
project1_server1
project1_server2:
----------
id:
project1_server2:
project1_server3:
----------
id:
project1_server3:
编辑3
正确答案由 ChrisV 提供
问题出在 /etc/salt/master 中节点的语法错误。我需要更改它,然后重新启动 salt-master
pkill salt-master
salt-master -d