как применить состояния соли только к одной среде

#salt-stack

#соль-стек

Вопрос:

Я пытаюсь применить состояние соли к моей непроизводственной среде в / srv/salt/ non-prod, и я получаю этот результат:

 [root@salt non-prod]# salt '*' state.apply
salt.localdomain:
----------
          ID: states
    Function: no.None
      Result: False
     Comment: No Top file or external nodes data matches found.
     Changes:

Summary for salt.localdomain
------------
Succeeded: 0
Failed:    1
  

У меня это местоположение определено в моей основной конфигурации

    non-prod:
     - /srv/non-prod
     - /srv/salt/non-prod/services
     - /srv/salt/non-prod/states
  

У меня есть верхний файл, расположенный здесь:

 [root@salt ~]# cat /srv/salt/non-prod/top.sls
base:
  '*':
    - apache
    - python
    - ssh
    - users
  

Это содержимое каталога non-prod

   [root@salt ~]# ls -lh /srv/salt/non-prod/
total 16K
drwxr-xr-x. 2 root root 4.0K Oct  3 21:02 apache
drwxr-xr-x. 2 root root   45 Oct  3 20:57 python
drwxr-xr-x. 2 salt salt    6 Oct  3 14:10 services
drwxr-xr-x. 2 root root   54 Oct  3 18:23 ssh
drwxr-xr-x. 2 salt salt    6 Oct  3 14:10 states
-rw-r--r--. 1 root root   80 Oct  3 15:29 state.template
-rw-r--r--. 1 root root  174 Oct  3 15:30 test.sls
-rw-r--r--. 1 root root   61 Oct  3 21:14 top.sls
drwxr-xr-x. 2 root root   22 Oct  3 21:03 users
drwxr-xr-x. 2 salt salt   99 Oct  3 18:28 webserver
  

он содержит несколько модулей соли

Как я могу применить состояния соли только к непроизводственной среде?

Ответ №1:

Если вы проверите синтаксис с помощью некоторых инструментов проверки yaml, мы можем перейти к следующему шагу.

Внимательно прочитайте документацию saltstack top, вы заметите, что, устанавливая другую среду, вы сначала явно определяете альтернативную среду name в /etc/salt/master, а также указываете ее в top.sls

т.Е. Вы file_roots указываете non-prod среду

 file_roots:
  #non-prod environment
  non-prod:
    - /srv/non-prod
    - /srv/salt/non-prod/services
    - /srv/salt/non-prod/states
  

Таким образом, ваш top.sls должен использовать имя среды non-prod , а не base

 non-prod:
  '*':
    - apache
    - python
    - ssh
    - users
  

Поскольку saltstack всегда использует «базовую» среду по умолчанию, вы должны применить состояние явно.

 salt '*' state.highstate saltenv=non-prod
  

Комментарии:

1. Это работает. Но я решил проблему, установив переменную environment: non-prod в конфигурации /etc/salt/minion . Перезапуск службы minion заставил это работать. Я также протестировал ваш метод, и он тоже работает таким образом. Спасибо!