#salt-stack #gitfs
#солевой стек #gitfs
Вопрос:
Я работаю с функцией «gitfs» в SaltStack, чтобы выполнить файл состояния. Файл состояния использует функцию «включить» для встраивания двух других файлов состояния из репозитория.
Мой репозиторий имеет следующую иерархию:
salt
- dir1
- dir3 / init.sls
- dir4 / init.sls
- dir2
- dir5 / init.sls
Мой основной файл выглядит следующим образом:
. . .
fileserver_backend:
- git
gitfs_remotes:
- https://username@bitbucket.org/path/to/repo.git
. . .
salt/dir1/dir3/init.sls содержит следующее:
include:
- salt/dir2/dir5/init.sls
- salt/dir1/dir4/init.sls
. . .
При перезапуске salt-master и последующем выполнении
salt-run fileserver.file_list saltenv=base backend= git
показывает мне все файлы из репозитория.
Но при запуске
salt » state.apply salt.dir1.dir3 -l debug
Я получаю следующую ошибку:
[ERROR ] Data passed to highstate outputter is not a valid highstate return: {'<minion-id>': ['Specified SLS salt/dir2/dir5/init.sls in saltenv base is not available on the salt master or through a configured fileserver', 'Specified SLS salt/dir1/dir4/init.sls in saltenv base is not available on the salt master or through a configured fileserver']}
Мои системные конфигурации следующие:
$ salt --versions-report
Salt Version:
Salt: 2016.3.3
Dependency Versions:
cffi: Not Installed
cherrypy: 3.2.2
dateutil: 1.5
gitdb: 0.5.4
gitpython: 0.3.2 RC1
ioflo: Not Installed
Jinja2: 2.7.2
libgit2: Not Installed
libnacl: Not Installed
M2Crypto: Not Installed
Mako: 0.9.1
msgpack-pure: Not Installed
msgpack-python: 0.3.0
mysql-python: 1.2.3
pycparser: Not Installed
pycrypto: 2.6.1
pygit2: Not Installed
Python: 2.7.6 (default, Jun 22 2015, 17:58:13)
python-gnupg: Not Installed
PyYAML: 3.10
PyZMQ: 14.0.1
RAET: Not Installed
smmap: 0.8.2
timelib: Not Installed
Tornado: 4.2.1
ZMQ: 4.0.5
System Versions:
dist: Ubuntu 14.04 trusty
machine: x86_64
release: 3.13.0-91-generic
system: Linux
version: Ubuntu 14.04 trusty
При перезапуске salt-master репозиторий кэшируется в путь «/var/cache/salt/master/gitfs/refs/base / salt».
Но я нашел «dir2 / dir5 / init / sls» вместо «dir2 / dir5 / init.sls»
В чем может быть причина этой проблемы?
Комментарии:
1. Находится ли код для этого репозитория в ветке «master»? Если нет, то это объясняет, почему salt-master не может найти файлы sls. По умолчанию
gitfs_base
используется ведущая ветвь. Чтобы настроить таргетинг на определенную ветку, вам нужно будет изменить этот параметр в главной конфигурации. В качестве альтернативы вы можете установить базовое__env__
значение, а затем при выполнении команды salt просто указатьsaltenv=your_branch
Ответ №1:
Проблема, скорее всего, в вашем include
объявлении. include
Модуль Salt обрабатывает файлы SLS, аналогичные модулям Python. Например, вы могли бы ссылаться на файл SLS foo/bar/baz.sls
как foo.bar.baz
.
Кроме того, init.sls
файл получает специальную обработку и позволяет обрабатывать весь каталог как модуль. Например, foo.bar.baz
будет включать либо foo/bar/baz.sls
или foo/bar/baz/init.sls
(в зависимости от того, какой из них действительно существует).
В заключение, ваше include
утверждение должно выглядеть следующим образом:
include:
- salt.dir2.dir5
- salt.dir1.dir4
Комментарии:
1. Спасибо, Хелмберт. Как мне получить доступ к файлу dir2 / dir5 /abc.conf? Должно ли это быть dir2.dir5.abc.conf