社内Ansible勉強会
はてな社内Ansible勉強会
Feb 6th, 2015
Ansible
- 構成管理ツール
- Python製
- 色々便利なのでdeployとかにも使ってる人いる
私とAnsible
- 前職ではChefを全面的に採用
- フリー時代にお手伝いでAnsible導入を手伝う
- 自分のVPS構築にAnsibleを最近採用
仕組み
- pip install ansible
- リモートはpythonだけ入っていればOK
- ローカルでビルドされたpythonスクリプトがリモートに送り込まれて動く。並列で実行可能。すごい
使ってみて感じたこと
- サーバー側に何も入れなくて良いのは便利
- 環境差異の吸収にはこだわらない。割りきり必要
- gather_facts(ohai的なやつ)が遅いのでなるべく切ってつかいたい
- 構成管理として使うならrole寄せ
- roleを並べるだけで、playbookには処理を書かない
- debugちょっと大変なことも
Playbook
- Chefのcookbookと同じ
- ansible-playbookコマンドで動かす。基本的にこれを使う
- YAMLで書く
Inventory
- host一覧とか記述するやつ
- dynamic inventoryとかある
Moduleとはなにか
- Chefのリソースタイプに対応
- 操作の単位
- 自分も書くことができる
- あんま自分で書かない
Roleとは
- Chefのrecipeのようなもの
- 設定の単位
- ディレクトリ深くなってつらいけどみんなどうしてるのかな?
タスク間の協調
- registerで変数に入れる
- var.rc
- var.stdout
- var.stderr
- var|failed
高まる冪等欲求
- changed撲滅厨
- 事前に差分があったら変更するとかそういう感じ
- changed_when
- failed_when
- when
jinja2で頑張る世界観
- lookup万能だけどlookupで頑張るのつらい
Copyモジュールの闇
毎回changedになる。ファイルの末尾に改行が自動的に加えられる。
- name: copy
copy:
content: "hoge
"
dest: /path/to/file
synchronizeモジュールの闇
synchronizeモジュールはrsyncしてくれるやつ。便利っぽい。
- name: sync application
synchronize:
rsync_path: 'sudo rsync'
src: ~/myapp/
dest: /var/www/myapp/
rsync_opts: --exclude-from={{ lookup('env','HOME') }}/myapp/config/rsync_exclude.txt,--quiet
# --quietを指定して出力抑制しないと、ansibleが期待しているmodule出力が崩れるかなんかで、ansibleが固まる…