必须指定 saltenv=base 吗?
Must specify saltenv=base?
我试图了解我的配置有什么问题,我必须在 运行 宁 sudo salt '*' state.highstate saltenv=base
时指定 saltenv=base
。如果我 运行 高状态而不指定 saltenv,我会收到错误消息:
No Top file or master_tops data matches found.
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 中指定了基数,如下所示:
file_roots:
base:
- /srv/saltstack/salt/base
Salt master 上的文件系统中没有任何内容。所有的 salt 和 pillar 文件都来自 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,否则无法找到 top.sls 的行为是如此不一致,但是 运行 宁状态在没有 saltenv=
的情况下很好。
有什么想法吗?
经过更多的调试,我找到了答案。其他环境 top.sls 文件之一格式不正确并导致错误。当指定 saltenv=base
时,会评估其他顶级文件的 none,这就是它起作用的原因。在我验证了所有环境中的所有 top.sls 文件后,一切都按预期运行。
自我提醒,验证所有顶级文件,而不仅仅是您正在处理的文件。
我试图了解我的配置有什么问题,我必须在 运行 宁 sudo salt '*' state.highstate saltenv=base
时指定 saltenv=base
。如果我 运行 高状态而不指定 saltenv,我会收到错误消息:
minion 或 master 上的No Top file or master_tops data matches found.
运行 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 中指定了基数,如下所示:
file_roots:
base:
- /srv/saltstack/salt/base
Salt master 上的文件系统中没有任何内容。所有的 salt 和 pillar 文件都来自 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,否则无法找到 top.sls 的行为是如此不一致,但是 运行 宁状态在没有 saltenv=
的情况下很好。
有什么想法吗?
经过更多的调试,我找到了答案。其他环境 top.sls 文件之一格式不正确并导致错误。当指定 saltenv=base
时,会评估其他顶级文件的 none,这就是它起作用的原因。在我验证了所有环境中的所有 top.sls 文件后,一切都按预期运行。
自我提醒,验证所有顶级文件,而不仅仅是您正在处理的文件。