社内の開発環境を毎回手動で作っていたのでリソースがもったない気がしたのとお気軽導入できそうだったので試した際のメモです
結構前に作ったのでだいぶ忘れているので思い出すためのメモでもあります。。。
構成
.
├── README.md
├── Vagrantfile
├── hosts
├── provision_vagrant.yml
├── roles
│ ├── common
│ │ └── tasks
│ │ └── main.yml
│ ├── composer
│ │ └── tasks
│ │ └── main.yml
│ ├── git
│ │ └── tasks
│ │ └── main.yml
│ ├── mysql
│ │ ├── handlers
│ │ │ └── main.yml
│ │ └── tasks
│ │ └── main.yml
│ ├── nginx
│ │ ├── handlers # 再起動taskなどの定義
│ │ │ └── main.yml
│ │ ├── tasks # install taskなどの定義
│ │ │ └── main.yml
│ │ └── templates # サーバにupするテンプレを定義
│ │ └── nginx.conf.j2
│ ├── php
│ │ ├── handlers
│ │ │ └── main.yml
│ │ └── tasks
│ │ └── main.yml
│ └── redis
│ ├── handlers
│ │ └── main.yml
│ └── tasks
│ └── main.yml
└── vars
└── package.yml
基本的にrolesにいろいろなタスクをyaml形式で記述し
packageなどをまとめて定義したい場合は基本的にvarsにpackage.ymlをグルーピングして定義するようにしています。
wgetやvim/opensslなどはcommonタスク内でwith_itemsとしてグルーピングしてyum install
を実行するようにしています
playbookファイル定義
- 簡単なinstall taskを定義してみる
- name: git install # タスク名
yum: name=git state=installed # ミドルウェア stateにlatestなどを指定すると最新versionがinstallされる
ここではstate=installedを指定していますが最新のansible公式ドキュメントには
present # installされていること
latest # 最新があればupdate
absent # 削除
となっているので presentを使う方がいいと思います。
- nginxをinstallしてnginx.confをあげてみる
main.yml
#nginxをyumでinstallするためにrpmを登録
- name: nginx rpm update
yum: name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
- name: nginx install
yum: name=nginx state=latest
# docrookのディレクトリ作成
- name: docroot mkdir
file: dest=/var/www group=vagrant owner=vagrant recurse=yes
# confのバックアップ
- name: default nginx conf backup
shell: mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
# .j2テンプレートで定義したconfのupload
- name: nginx conf
template: src=nginx.conf.j2 dest=/etc/nginx/conf.d/nginx.conf owner=nginx group=nginx
# service start
- name: start nginx
service: name=nginx state=started enabled=yes
かなり直感的でわかりやすいです。
とりあえずざっくり思い出せた気がする。
実行
すべてを実行する場合
- vagrant up
ansibleのタスクのみを実行する場合
- ansible-playbook -i hosts provision_vagrant.yml
特定タスクのみ実行する場合
- ansible-playbook -i hosts --tags hogehoge provision_vagrant.yml
出来上がったもの
githubにあげていつでもどこでもplaybook
playbookでのshell実行やtimezoonの変更(replace)など他の細かい部分は下記に定義してあります。
今回はphp用の環境を構築したがrubyなど他の言語で開発を行う際にもtaskを定義して使用しています。
ansiblePlayBookを作成する際に vagrantのplugin saharaに非常にお世話になりました。
Transaction最高でした。