Search code examples
salt-project

Must specify saltenv=base?


I'm trying to understand what's wrong with my config that I must specify saltenv=base when running sudo salt '*' state.highstate saltenv=base. If I run the high state without specifying the saltenv, I get the error message:

No Top file or master_tops data matches found.

Running salt-call cp.get_file_str salt://top.sls on the minion or master pulls back the right top.sls file. Here's a snippet of my top.sls:

base:
  # All computers including clients and servers
  '*':
    - states.schedule_highstate

  # any windows machine server or client
  'os:Windows':
    - match: grain
    - states.chocolatey

Also, I can run any state that's in the same directory or subdirectory as the top.sls without specifying the saltenv=. with sudo salt '*' state.apply states.(somestate).

While I do have base specified in /etc/salt/master like this:

file_roots:
  base:
    - /srv/saltstack/salt/base

There is nothing in filesystem on the Salt master. All of the salt and pillar files are coming from GitFS. Specifying the saltenv= does grab from the correct corresponding git branch, with the master branch responding to saltenv=base or no saltenv specified when doing state.apply (that works).

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

The behavior is so inconsistent where it can't find top.sls unless specifying the saltenv, but running states is fine without saltenv=.

Any ideas?


Solution

  • After more debugging I found the answer. One of the other environment top.sls files was malformed and causing an error. When specifying saltenv=base, none of the other top files are evaluated, which is why it worked. After I verified ALL of the top.sls files from all the environments things behaved as expected.

    Note to self, verify all the top files, not just the one you are working on.