Как мога да извлека списък с директории под /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 (Oxygen).

Има ли нещо нередно с реда сол['file.find']?

Има ли друг, по-добър начин, който трябва да използвам, за да получа списък с директориите под /srv/salt/projects на salt-master?


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