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

2. ssh-agent と ssh-add

$ ssh-aget -t 3600 bash
$ ssh-add ~/.ssh/id_rsa

3. ansible-playbook の実行

$ ansible-playbook -i hosts playbook.yml