3

私はSaltを使用したproftdの自動インストールを開発しています。テンプレートからftpユーザーを取得することはできませんが、柱を処理できません。柱をユーザーデータで初期化し、それをforループに呼び出しましたが、得られませんループ内の柱のユーザー データ。

ミニオンで salt-call pillow.get ftpusers を作成すると、応答は次のようになります。

ローカル:

これは私の柱 ftpusers.sls です:

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

そして、これは 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 %}

ミニオンで作ると

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

ピラーデータを取得できないため、これを期待しないでください。

4

1 に答える 1

4

ループも次のようになります。

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

また、contentsa の引数はfile.managedテンプレート化をサポートしていません。必要なことは/srv/herma-ftp/.ftpusers、状態をループの外に移動し、ループをファイル テンプレート内に作成することです。状態の最終的なレイアウトは次のようになります。

/srv/herma-ftp/.ftpusers
  file.managed:
    source: salt://ftpserver/dot.ftpusers
    template: jinja
    ...
    ...

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

/srv/herma-ftp/{{user}}:
  file.managed:
    ...

{% endfor %}

そして、あなたftpserver/dot.ftpusersは次のようになります:

{% for user, args in pillar.get('ftpusers', {}).items() %}
{{ user }}:{{ args['passhash'] }}:{{args['uuid'] }}:{{ args['guid'] }}::{{ args['home'] }}:{{ args['shel'] }}
{% endfor %}
于 2014-12-05T13:17:39.470 に答える