no about note

エンジニアのメモ書き

Ansibleを使ってみる

Ansilbeとは

  • Ansible
  • エージェントレスの構成管理ツール
  • PlaybookというYAML形式のテキストファイルに実行したいタスクを記述して複数ホストに対して実行できる

Anibleインストール

# yum install ansible

# ansible --version
ansible 1.9.4
  configured module search path = None

ディレクトリ構成のベストプラクティス

ベストプラクティスを一括生成するスクリプト

ansibleのベストプラクティスの構成を一括生成するスクリプト

Playbookを使う

使い方の例

# ansible-playbook (playbook_name).yml -i (inventory_name) -vvv -k -C
  • playbook_name --> 実行するPlaybookの名前:カレントディレクトリにあるPlaybookを読み込む
  • inventory_name --> Playbookを実行するインベントリを指定する
  • -vvv --> 実行ログを出力する :vが多いほど詳細なログを出力する
  • -k --> パスワード認証
  • -C --> 実行はせずにチェックのみ

python-simplejsonパッケージがない場合の対処

  • CentOS5系などでパッケージがないためにエラーになるケースがある
failed: [172.16.0.1] => {"failed": true}
msg: Error: ansible requires the stdlib json or simplejson module, neither was found!

yumで入れる

# yum install python-simplejson

Ansibleで複数ホストにインストールする

  • 複数台あった場合に一気にインストールしたい場合、rawモジュールを使う
  • コマンドを実行するモジュールが複数あるが、このパッケージがないとそもそも実行できないので、
  • リモートホストを取得するgather_factsなどをせずにコマンドを実行させる
# ansible -i hosts [サーバのIPアドレス] -k -m raw -a "yum -y install python-simplejson"

Ansibleでリモート先にsimplejsonをインストールするときのメモ

python-simplejson.yml

- hosts:
  hogehoge
  gather_facts: no
  roles:
    - python-simplejson

roles/python-simplejson/tasks/main.yml

- name: Install pyrhon-simplejson
  raw: "yum install -y python-simplejson"

Tips

Ansibleでホストを再起動を制御する

- name: test connection (before reboot)
  ping:

- name: reboot after change selinux
  shell: sleep 2s && /sbin/reboot &

- name: wait for SSH port down
  local_action: wait_for host={{ inventory_hostname }} port=22 state=stopped

- name: wait for SSH port up
  wait_for: host={{ inventory_hostname }} port=22 state=started delay=30
  delegate_to: 192.168.1.1

- name: test connection (after reboot)
  ping:

Ansibleの事例とちょっとしたTips

NFSマウントを制御する

ansible-playbooks

参考

入門Ansible

入門Ansible