我正在尝试了解我的配置有什么问题,我必须在运行saltenv=base
时指定sudo salt '*' state.highstate saltenv=base
。如果我在没有指定saltenv的情况下运行高状态,则会收到错误消息:
找不到Top文件或master_tops数据匹配。
在minion或master上运行salt-call cp.get_file_str salt://top.sls
会拉回右侧top.sls文件。这是我的top.sls的片段:
base:
# All computers including clients and servers
'*':
- states.schedule_highstate
# any windows machine server or client
'os:Windows':
- match: grain
- states.chocolatey
此外,我可以运行与top.sls位于同一目录或子目录中的任何状态,而不指定saltenv=
。与sudo salt '*' state.apply states.(somestate)
。
虽然我在/ etc / salt / master中指定了base,但是这样:
file_roots:
base:
- /srv/saltstack/salt/base
Salt master上的文件系统中没有任何内容。所有的salt和posts文件都来自GitFS。指定saltenv=
会从正确的相应git分支中获取,主分支响应saltenv=base
或执行state.apply
时没有指定saltenv(可行)。
gitfs_remotes
- https://git.asminternational.org/SaltStack/salt.git:
- user: someuser
- password: somepassword
- ssl_verify: False
.
.
.
ext_pillar:
- git:
- master https://git.asminternational.org/SaltStack/pillar.git:
- name: base
- user: someuser
- password: somepassword
- ssl_verify: False
- env: base
- dev https://git.asminternational.org/SaltStack/pillar.git:
- name: dev
- user: someuser
- password: somepassword
- ssl_verify: False
- env: dev
- test https://git.asminternational.org/SaltStack/pillar.git:
- name: test
- user: someuser
- password: somepassword
- ssl_verify: False
- env: test
- prod https://git.asminternational.org/SaltStack/pillar.git:
- name: prod
- user: someuser
- password: somepassword
- ssl_verify: False
- env: prod
- experimental https://git.asminternational.org/SaltStack/pillar.git:
- user: someuser
- password: somepassword
- ssl_verify: False
- env: experimental
除非指定saltenv,否则行为是如此不一致,除非指定saltenv,否则无法找到top.sls,但运行状态没有saltenv=
。
有什么想法吗?
答案 0 :(得分:0)
经过更多调试后,我找到了答案。其中一个环境top.sls文件格式错误,导致错误。指定saltenv=base
时,不评估其他顶级文件,这就是它工作的原因。在我验证了所有环境中的所有top.sls文件之后,事情就像预期的那样。
请注意自己,验证所有顶级文件,而不仅仅是您正在处理的文件。