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

Я пытаюсь использовать цикл 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 debug state.show_highstate» и посмотрю на отображаемый вывод top.sls, при использовании команды salt['file.find'] строка комментария будет отображаться как

#[u'expected']

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

#['expected']

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

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

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

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


person pwan    schedule 21.05.2018    source источник


Ответы (1)


Используйте 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 %}
person blhsing    schedule 19.06.2018
comment
Этот подход сработал, но я не понимаю, почему подход file.find не сработал. - person pwan; 07.08.2018
comment
file.find находит файлы на миньонах, а cp.list_master_dirs перечисляет каталоги на мастере. Папки соляных проектов, которые вы ищете, находятся на мастере. - person blhsing; 07.08.2018