2人のGithub公開鍵をユーザーの承認済みユーザーファイルに追加しようとしています。 SSHキーを正常に取得できます。
---
- hosts: 127.0.0.1
connection: local
vars:
my_users:
belminf: "belminf"
bob: "tmessins"
tasks:
- name: Retrieving all keys from GitHub
Shell: /usr/bin/curl https://github.com/{{ item.value }}.keys 2> /dev/null
register: ssh_keys
with_dict: my_users
- debug: var=ssh_keys
ただし、ssh_keys
の結果をループ処理し、authorized_keys
タスクを使用して取得したキーを追加する方法がわかりません。
私のとんでもない試み:
- name: Adding keys to authorized_keys
authorized_key: user=belminf key="{{ item }}" path=/home/belminf/test_auth state=present
with_items: ssh_keys.results
結果はinvalid key specified
になります。当然のことながら、私はアイデアがありません。誰でも?
わかりました、私はあなたのプレイブックにいくつかの微調整を加えました、そしてこれは改訂版です
---
- hosts: 127.0.0.1
connection: local
vars:
my_users:
belminf: "belminf"
bob: "tmessins"
tasks:
- name: Retrieving all keys from GitHub
Shell: /usr/bin/curl https://github.com/{{ item.value }}.keys 2> /dev/null
register: ssh_keys
with_dict: my_users
- name: Adding keys to authorized_keys
authorized_key: user=belminf key="{{ item.stdout }}" path=/home/belminf/test_auth state=present
with_items: ssh_keys.results
ignore_errors: yes
いくつかの変更点:
authorized_key
モジュールで、キーがitem.stdout
に変更されました。 stdoutは、必要な公開鍵でした。authorized_key
モジュールでは、インターネットの問題または404 Not found(tmessinsのキーなど)のいずれかのcurlタスクがフェッチに失敗したときにPlaybookの実行を再開するようにignore_errors: yes
を定義しました。もちろん 失敗の定義を制御する で微調整することができるので、他のエラーが発生しても失敗します。Ansible 1.9以降では、key
の値をURLにすることができ、Shell
モジュールを介してURLを丸める必要がなくなります。
例:
- name: Add my SSH key
authorized_key: user=jeffwidman key=https://github.com/jeffwidman.keys
今では本当に簡単です:
- name: get github key(s) and update the authorized_keys file
authorized_key:
user: "{{ username }}"
key: "https://github.com/{{ username }}.keys"
詳細については、このgithubを確認してください role