ページ

2015年1月31日土曜日

山に来てBoxenやめてAnsibleにしました

気がついたら前回の退職エントリーから10ヶ月ぐらい何も書いてなかった。よくない。
最近あんまりネットにいませんね、とか(元々そんなにいなかったのに)言われるようになってた。よくない。

初心に立ち返って、環境構築のこと書く。
具体的には、boxenをやめてansibleにした話。

boxenを使ってきたけど、結論としては個人の環境構築に使うにはtoo much。使い始めた時点でうすうす感じてはいたことだった。
なんか一個brew upgradeしたいだけなのにpuppet moduleに手を入れなきゃならないのはコストがかかりすぎだし、boxen自体をour-boxenからfetchしてmergeしてアップデートしていくのもダルいし、それを他のところ(チームとか)でも使うならまだしも、自分しか使わないのであれば、新しいパソコンに毎回環境構築するほうが楽だと思った。
あとは、色んなものが/opt/boxen/の下に入るのがちょっと気持ち悪かった。brew installした時のインストール先とかわかりにくかった。

そんな感じでbrewfileにでも移行しようかと思っていたら、使ったことないうちにオワコンになってた。
じゃあどうすっぺーかと思っていたところで、今をときめくansible(僕の中で)をlocalで実行するという手があるとわかったので、そうすることにした。


boxenのhomebrew使ってた場合はboxen消すとhomebrewも消えるので、ansible導入後にまたbrew installするものはbrew listとかで洗い出しておくといい。

boxen関連のものを完膚無きまでに削除

$ /opt/boxen/repo/script/nuke --all --force

改めてHomebrewとAnsibleをインストールする

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew install ansible

ansibleをローカルに実行したい場合、playbookのhostsに127.0.0.1を指定してやって、実行時に--connection=localをつけるか、playbookにconnection:localと書いてやればssh経由でなく実行される。
参考: http://docs.ansible.com/playbooks_delegation.html#local-playbooks

そういうわけであとはplaybookを作って育てていけばいい。大抵の場合はlocalhost.ymlが1ファイルあるだけで事足りるんじゃないだろうか。

inventoryファイルに関しては普通に作ってやってもいいし、ansible-playbookするときに -i "localhost," とかつけてやると作らなくても済む。

あとはlocalhost.ymlを育てていけばよい。
- hosts: 127.0.0.1
connection: local
gather_facts: no
tasks:
- name: brew update
homebrew: update_homebrew=yes
- name: brew install packages
homebrew: name={{item}}
with_items:
- python
- ruby
- tmux
- z
- name: sudo easy_install pip
sudo: yes
easy_install: name=pip
- name: install powerline-status
pip: name=powerline-status state=latest
pip: name=psutil
- name: install emacs
homebrew: name=emacs install_options=cocoa
- name: brew linkapps
command: brew linkapps
view raw localhost.yml hosted with ❤ by GitHub


適用するときには
$ ansible-playbook localhost.yml -i "localhost," --ask-sudo-pass
のようにすればよし。

たぶん、最初から入ってないと大幅に使い勝手が変わったり困ったりするものって僕の場合はそれほどないので、それ以外のものは必要に応じて手で入れるようにして、dotfileとかtmuxとか、インストールして設定するのがめんどいものを自動化しておくのがいいバランスなんだろうと思う。