Ansible のメモ
Ansible 使用時に手間取った点がいくつかあったので書いておきます.
ディストリビューション毎に処理を分ける
ディストリビューションによって,yum と apt-get 等を使い分けたい場合は,
centos.yml や ubuntu.yml 等を作成して,yum や apt-get 等の処理を書いておきます.
main.yml
--- - include: ubuntu.yml when: ansible_distribution == "Ubuntu"
ubuntu.yml
--- - shell: apt-get -y update - shell: apt-get -y install aptitude - shell: aptitude -y install {{ item }} with_items: - make - gcc - curl - git
環境変数を指定する
環境変数を指定したい場合には environment: を指定します.
- shell: make environment: PATH: /opt/local/bin:/usr/bin:/usr/local/bin
PATH の場合は,追加だけしたいので,次のように指定した方が良いかもしれません.
- shell: make environment: PATH: "/opt/local/bin:{{ ansible_env.PATH }}"
ansible_facts で取得できない対象サーバの情報を指定したい場合には,stdout の値を使用することもできます.
- shell: echo $PATH register: path - shell: echo $PATH environment: PATH: "/opt/local/bin:{{ path.stdout }}"
git clone
Ansible には git モジュールがあるため,簡単に git リポジトリを clone できますが,
GitHub 等から ssh で clone する場合にはいくつか注意点があります.
- ホストキーのチェックによる処理の停止
- 公開鍵認証に使用する鍵の管理
ホストキーのチェックによる処理の停止
仮想環境等で、必要になった場合にのみインスタンスを作成するような場合には,
~/.ssh/known_hosts に Git/GitHub のサーバにホスト鍵は追加されていないことがよくあります.
このような環境で,StrictHostKeyChecking のデフォルト値が ask の場合には,git clone を実行するとホスト鍵の確認が入るため,Git/GitHub のサーバへのアクセスで処理が止まります.
これを回避するために,.ssh/config や /etc/ssh/ssh_config に StrictHostKeyChecking no を設定しておきます.
git モジュール を使用する前に,Git/GitHub のサーバへのアクセスする際の設定に StrictHostKeyChecking no を記載した ssh_config を, copy モジュール でアップロードしておきます.
- copy: src=ssh_config dest=/etc/ssh/ssh_confg - git: repo=... dest=/home/user/...
公開鍵認証に使用する鍵の管理
自分以外の誰かがアクセスできるサーバ上には、秘密鍵は置きたくないです.
そのため,ssh でログインしてリポジトリを clone する場合には ForwardAgent をすることが多いと思います.
ansible を使用する場合でも,通常の ssh の場合と同じように ForwardAgent を使用して,サーバ上に秘密鍵を置かずに,リポジトリを取得します.(ansible.cfg の設定以外は ssh でログインする場合と同じような手順です)
1. ansible.cfg の準備
$ cat ansible.cfg [ssh_connection] ssh_args = -o ForwardAgent=yes
$ ssh-aget -t 3600 bash $ ssh-add ~/.ssh/id_rsa
3. ansible-playbook の実行
$ ansible-playbook -i hosts playbook.yml