Ansibleからknife soloを実行してみる
About
先に書いておくと、ほとんど意味ないです。
サーバの台数が増えてくるとサーバ1台1台にknife soloをするのが大変になってきます。CircleCIから自動実行させてもいいのですが、時間がかかってコンテナを圧迫してしまう心配があります。(お金があればいいのですが)じゃあChef Serverとかって選択もあると思うのですが、運用が大変という噂を聞いていてどっちつかずな状況です。じゃあ、せめてknife soloの実行を楽にしようということでAnsibleを使ってみました(錯乱)
環境
- ローカルマシン OSX10.10.5
- リモートノード dockerコンテナ
- ansible 1.9.3
- knife-solo 0.5.1
準備
Ansibleを導入する
$ sudo easy_install pip $ sudo pip install ansible
コンテナを準備
自分用リポジトリを作っておいたので、それを使います。公開鍵をDockerfile内で挿入しているので、そこだけ各々の鍵に変えればsshログインできるコンテナになるはずです。
$ docker-compose up -d
ローカルマシンからホスト名SSH接続できるようにする
面倒なので設定しておきます。
Host web HostName 192.168.59.103 User docker Port 40022 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile ~/.ssh/id_ci.docker IdentitiesOnly yes LogLevel FATAL
個人的に下記のssh分割の設定しているので、リポジトリにある.ssh/server-provisioning.confへのシンボリックリンクを~/.ssh/conf.dに作成しています。
やってみる
Ansibleは久しぶりなので、適当にcookbookを作っておきます。
- hostsファイル
$ cat hosts [web] 192.168.59.103:40022 [batch] 192.168.59.103:40024
- playbook
$ cat knife-solo.yml --- - hosts: localhost tasks: - command: bundle exec knife solo cook web --ssh-control-master no - command: bundle exec knife solo cook batch --ssh-control-master no
$ ansible-playbook -i hosts knife-solo.yml PLAY [localhost] ************************************************************** GATHERING FACTS *************************************************************** ok: [localhost] TASK: [command bundle exec knife solo cook web --ssh-control-master no] ******* changed: [localhost] TASK: [command bundle exec knife solo cook batch --ssh-control-master no] ***** changed: [localhost] PLAY RECAP ******************************************************************** localhost : ok=3 changed=2 unreachable=0 failed=0
一応できました。
勘違いしていたこと
- Ansibleは特定ホストに対して、コマンドを実行するもの。
knife solo
はローカルからリモートマシンに接続してrsyncしてcookbookなどを送信したのち、リモート上でcookする。なので、Ansibleを使うにはローカルのMacに対しコマンドを投げないと行けない。リモートに対してknife solo cook
すればいいじゃんとか思ってしまっておりました。 - 上記に関連しますが、ローカルに~/.ssh/configの設定を持たなくていいようになると思っていた。
- Ansibleの実行画面では構成変更があろうがなかろうが、毎回changedになってしまう。そりゃそうか。
終わりに
Chef Serverにはhostedサービスがあるらしいと聞きましたが、利用しているところ多いんですかね?プロビジョニングについては継続的に考えたいと思います。