2015年4月29日水曜日

Ansible の authorized_key モジュールで lookup プラグインを使う時にユーザー名を変数で指定

タイトルの通りですが、Ansible の authorized_key モジュールで lookup プラグインを使う時にユーザー名を変数で指定したかったのですが、方法をなかなか見つけることができなかったのでブログに残しておきます。

環境

  • Ubuntu 14.04 (Trusty Tahr) Server
  • Ansible 1.5.4

まずはうまくいかない場合ですが、以下のような Playbook を用意します。
$ cat test_playbook.yml
- hosts: all
  sudo: yes
  vars:
    user: worker
  tasks:
    - authorized_key: user={{ user }} key="{{ lookup('file', '/home/{{ user }}/.ssh/id_rsa.pub') }}"

lookup プラグインの中で user 変数をネストしてます。

ansible-playbook を実行すると以下のようにエラーになります。
$ ansible-playbook --ask-pass --ask-sudo-pass -i hosts test_playbook.yml
SSH password:
sudo password [defaults to SSH password]:

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
ok: [test_host]
ERROR: /home/{{user}}/.ssh/id_rsa.pub does not exist
Playbook を以下のようにするとうまくいきました。
$ cat test_playbook.yml
- hosts: all
  sudo: yes
  vars:
    user: worker
  tasks:
    - authorized_key: user={{ user }} key="{{ lookup('file', '/home/' + user + '/.ssh/id_rsa.pub') }}"

+ で文字列として結合してます。


0 件のコメント:

コメントを投稿