Saltstack load pillar em um loop for

1

Estou desenvolvendo uma instalação automática do Proftpd com o Salt. Eu não vou conseguir os usuários de ftp de um modelo, mas não consigo trabalhar o pilar. Eu inicializei o pilar com os dados dos usuários e chamei-os em um loop for, mas não obtive os dados do usuário da coluna no loop.

Quando eu faço a chamada de sal pillar.get ftpusers no servo, a resposta é:

local:

Este é o meu pilar ftpusers.sls :

ftp-server.ftpusers:
  user:
    - user: user
    - passhash: j2k3hk134123l1234ljh!"·$ser
    - uuid: 1001
    - guid: 1001
    - home: /srv/ftp/user
    - shel: /bin/false

E este é o loop for:

{% for users in pillar.get('ftpusers', {}).items() %}

  /srv/herma-ftp/.ftpusers:
    file.managed:
      - user: root
      - group: root
      - mode: 444
      - contents:'{{ user }}:{{ args['passhash'] }}:{{args['uuid'] }}:{{ args['guid'] }}::{{ args['home'] }}:{{ args['shel'] }}'
      - require:
        - file: /srv/herma-ftp

  /srv/herma-ftp/{{user}}:
    file.directory:
      - user: nobody
      - group: nobody
      - dir_mode: 775
      - makedirs: True
      - require:
        - file: /srv/herma-ftp
      - watch:
        - file: /srv/herma-ftp
    module.run:
      - name: file.set_selinux_context
      - path: {{ args['home']}}
      - type: public_content_t
      - unless:
        - stat -c %C {{ args['home'] }} |grep -q public_content_t

{% endfor %}

Quando eu faço no lacaio

salt-call -l debug state.sls herma-ftp-server saltenv=My-enviroment test=True

Não espere isso porque não pode obter os dados do pilar.

    
por Fernando Morata Martínez 27.11.2014 / 12:42

1 resposta

2

Você deve notar que os pilares funcionam como dicionários. Na sua sintaxe atual, para acessar o pilar, o nome da chave é "ftp-server.ftpusers", não ftpusers. Se você quiser as informações em uma hierarquia, a abordagem usual é:

ftp-server:
 ftpusers:
   user:
    - user: user
    - passhash: j2k3hk134123l1234ljh!"·$ser
    - uuid: 1001
    - guid: 1001
    - home: /srv/ftp/user
    - shel: /bin/false

Em seguida, no modelo:

{%- set ftp-server = pillar.get("ftp-server", {}) %}
{%- for users in ftp-server.get('ftpusers', {}).items() %}
{%- do_something() %}
{%- endfor %}
    
por 05.12.2014 / 12:58