Как я могу получить список каталогов в / srv / salt / projects в /srv/salt/top.sls - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь использовать цикл for, как показано ниже в моем файле /srv/salt/top.sls.

   {%- set prjlist = salt['file.find']('/srv/salt/projects',type='d',mindepth=1,maxdepth=1,print='name') %}
   # {{ prjlist }}
   {%- for prj in prjlist %}
      'role:{{ prj }}_server':
        - match: pillar
        - projects.{{ prj }}.server
   {%- endfor %}

Когда я запускаю "salt -l debug myhost state.apply test = True"не соответствует ожидаемой роли с блоком for выше.Однако если я заменю присвоение prjlist жестко закодированным списком, который find.file должен возвращать подобно

{%- set prjlist = ['expected'] %}

, тогда соль найдет роль, как и ожидалось ¯ \ _ (⊙︿⊙) _ / ¯.

Если я выполняю «отладочный вызов salt-call -l state.show_highstate» и смотрю на визуализированный вывод top.sls, то при использовании команды salt ['file.find'] строка комментария отображается как

#[u'expected']

Но если я использую жестко закодированный список, комментарии становятся

#['expected']

Кроме того, визуализированные блоки выглядят одинаково.

Я использую версию 2018.3.0 (Oxygen).

Что-то не так с линией соли ['file.find']?

Есть ли другой, лучший способ, который я должен использовать, чтобы получить список каталогов в / srv / salt / projects на salt-master?

1 Ответ

0 голосов
/ 19 июня 2018

Вместо этого используйте cp.list_master_dirs.

{% for path in salt['cp.list_master_dirs']() if salt['file.dirname'](path) == 'projects' %}
  {% set prj = salt['file.basename'](path) %}
  'role:{{ prj }}_server':
    - match: pillar
    - projects.{{ prj }}.server
{% endfor %}
...