Понимание солевой среды

Я хотел бы знать, какова польза от объявления сред в /etc/salt/master?

Пример :

file_roots:
  base:
    - /srv/salt
  env1:
    - /srv/salt/env1

Это дерево /srv/salt:

.
├── base
├── env1
│   └── domain1
│       ├── init.sls
│       └── nginx.conf
└── top.sls

И топ.sls:

env1:
  '*':
    - env1.domain1

Это init.sls внутри env1/domain1/

/etc/nginx/nginx.conf:
  file.managed:
      - source: salt://env1/domain1/nginx.conf 

При выполнении:

salt '*' state.sls env1.domain1

все работает нормально.

Но с высоким состоянием:

# salt '*' state.highstate
myHost:
    Data failed to compile:
----------
    No matching sls found for 'env1.domain1' in env 'env1'

Учитывая, что среда «env1» объявлена ​​​​в основной конфигурации. Я изменил свою конфигурацию и поставил:

- source: salt://domain1/nginx.conf 

вместо:

- source: salt://env1/domain1/nginx.conf 

У меня была эта ошибка:

 Comment: Source file salt://domain1/nginx.conf not found

Где-то неправильная конфигурация? Какая польза от объявления окружения в master conf, если мы не можем вызвать его напрямую, используя salt://subfolder вместо salt://environment/subfolder напрямую?

Я не могу найти хорошую документацию о создании сред и их использовании!

===Изменить===

Это новая конфигурация:

Мастер:

file_roots:
  base:
    - /srv/salt/base
  env1:
    - /srv/salt/env1

Древо /srv/salt

.
├── base
│   └── init.sls
├── conf_template
├── env1
│   └── domain1
│       ├── init.sls
│       └── nginx.conf
└── top.sls

top.sls:

base:
  '*':
    - init
env1:
  '*':
    - domain1

И env1/domain1/init.sls:

/etc/nginx/nginx.conf:
  file.managed:
      - source: salt://domain1/nginx.conf

и результат выполнения:

salt '*' state.sls env1.domain1
myHost:
    Data failed to compile:
----------
    No matching sls found for 'env1.domain1' in env 'base'

person 4m1nh4j1    schedule 21.11.2014    source источник
comment
Эта проблема github (диалог комментариев) помогла мне решить эту проблему: github.com/saltstack/salt/issues /10447   -  person Aaron Lelevier    schedule 06.11.2015


Ответы (1)


Не найдено соответствующего sls для «env1.domain1» в env «env1»

Я считаю, что это потому, что ссылка на состояние не должна включать среду, т.е. у вас есть лишний env1, он должен быть:

env1:
  '*':
    - domain1

Другая ваша ошибка заключается в том, что у вас есть env1 в качестве подкаталога base, что может сделать вещи действительно запутанными, поскольку это не то, как предполагается структурировать среды.

Это единственные две ошибки, которые я могу заметить, и после их исправления highstate должен работать так же, как и ссылка на salt://domain1/nginx.conf (что в данном случае правильно).

Наконец, я считаю, что среды действительно сбивают с толку, и я обнаружил, что могу лучше понять их, сосредоточившись на том, как они на самом деле реализованы: несколько деревьев состояний. Технически понятия «окружающая среда» не существует. Это всего лишь один из нас, чтобы использовать эту функцию.

person Amr Mostafa    schedule 22.11.2014
comment
Спасибо. Я сделал то, что вы рекомендовали. Не могли бы вы взглянуть на обновление? - person 4m1nh4j1; 24.11.2014