ansibleってchefより手軽に使えていいよねーという声が多いのですが、
手軽でいいけど、何かファイルをいくつか用意するのが面倒ですよね。
ワンライナーでやれる手がないかなという事で思い出したのがこれ
##bashのプロセス置換機能
$ diff -u <(ssh host1 cat /etc/hosts) <(ssh host2 cat /etc/hsots)
これはリモートホストにあるファイルをdiffするときによく使うやつです。
これを使おう!
ansible ワンライナー
Ansible Best Practices に沿った
playbookのディレクトリ階層のスケルトンを生成するplaybookを、
githubにplaybookをおいて、
https://github.com/masahide/playbook-sample
$ ansible-playbook -i <(curl -s https://raw.github.com/masahide/playbook-sample/master/localhost) <(curl -s https://raw.github.com/masahide/playbook-sample/master/sample.yml) -e dir=`pwd`
こうするとローカルにinventoryファイルやplaybookファイルを置かなくても直接実行できます。
$ ansible-playbook -i <(curl -s https://raw.github.com/masahide/playbook-sample/master/localhost) <(curl -s https://raw.github.com/masahide/playbook-sample/master/sample.yml) -e dir=`pwd`
PLAY [localhost] **************************************************************
TASK: [create directories for ansible files.] *********************************
changed: [localhost] => (item=/home/masahide/work/playbook/group_vars)
changed: [localhost] => (item=/home/masahide/work/playbook/host_vars)
changed: [localhost] => (item=/home/masahide/work/playbook/roles/common/tasks)
changed: [localhost] => (item=/home/masahide/work/playbook/roles/common/defaults)
changed: [localhost] => (item=/home/masahide/work/playbook/roles/common/handlers)
changed: [localhost] => (item=/home/masahide/work/playbook/roles/common/templates)
changed: [localhost] => (item=/home/masahide/work/playbook/roles/common/files)
changed: [localhost] => (item=/home/masahide/work/playbook/roles/common/vars)
PLAY RECAP ********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0
##ansibleワンライナーは諸刃の剣
たとえば、rm -rf / 等が入れられたplay-bookに差し替えられてたとか
非常にヤバイので取り扱いには注意が必要です。
ansibleワンライナーが使えるのはver1.4以降
このansible-playbookのbashプロセス置換対応は
ver1.4以降でないとエラーが発生します。
かなり前にpullreqを出してたのが、最近やっとマージされて使えるようになりました。
https://github.com/ansible/ansible/pull/3937