fileglobパターンでネストされたループを作成するにはどうすればよいですか?


13

私は、Ansibleのユーザーのセットに対して許可されたSSHキーのセットを作成しようとしています。次のようにusers変数を設定しています:

users:
  - { username: root, name: 'root' }
  - { username: user, name: 'User' }

同じ役割で、files/public_keysディレクトリに承認済みキーファイルのセットもあります。承認済みキーごとに1つのファイルがあります。

roles/common/files/public_keys/home
roles/common/files/public_keys/work

各公開鍵を各ユーザーにコピーしたい。

次のタスクを使用してみました。

- name: copy authorized keys
  authorized_key: user={{ item.0.username }} key={{ item.1 }}
  with_nested:
    - users
    - lookup('fileglob', 'public_keys/*')

ただし、item.1にある"lookup('fileglob', 'public_keys/*')"各ファイルパスではなく、リテラル文字列が含まれますfiles/public_keys

files/public_keysディレクトリのリストを取得し、各公開キーを各ユーザーにコピーする方法はありますか?

回答:


8

トリックは、split関数を介してfileglobの戻り値をリストに変換することです。そのため、値を反復処理できます。

- name: copy authorized keys
  authorized_key: 
    user: "{{ item.0.username }}"
    key: "{{ lookup('file', item.1) }}"
  with_nested:
    - "{{ users }}"
    - "{{ lookup('fileglob', 'public_keys/*').split(',') }}"

なし、裸の変数を使用していることに注意してください{{}}のために、with_itemsAnsible V2で廃止されました。


これが答え受け入れられるべきである
Beyers

0

コマンドを大幅に書き直す必要があるかもしれませんが、ファイルグロブループするための規定があります

例から:

- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
  with_fileglob:
    - /playbooks/files/fooapp/*

他の有望なオプションは、SSHキーで実際に示されているサブ要素のループです。


3
を使用してファイルグロブをループできることを知っていますwith_fileglob。ネストされたループと組み合わせてそれを使用する方法がわからないだけです。サブ要素をループする可能性が動作しますが、私は私がするので、手動で、私がコピーしたいキーのリスト全体を指定する必要はありません願っていなければならないだけのリストとして(使用していることを得ることができるようにwith_fileglob)。
ミパディ14

私もわからない。次善の提案はにポップすることである#ansibleirc.freenode.net、そこ達人はどんな明るいのアイデアを持っているかどうかを確認します。
トムオコナー14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.