Не удается выполнить встроенное состояние Saltstack с помощью gitfs

#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