これは完全に私の趣味/趣向によるものなのですが、ansibleでplaybookを実行するコマンドがとても長くて気に入りません。そこでMakefileによく使うコマンドを書いて make deploy
でデプロイできるようにしてました。使っていると環境切り替えをするためにMakefileにいろいろなロジックを書くようになりました。複数のリポジトリで同じようなMakefileが散らばって、こっちのMakefileは他のリポジトリで書いたロジックが入っていないなど、結構ストレスが溜まってきました。そこでそのあたりの処理を共通化すべくanseedというMakefile Utiltiyを作りました。
インストールと使用方法
インストールといっても、実行可能なファイルが入るわけではありません。カスタムコマンドを定義したMakefile達をお使いの構成管理リポジトリに含めるだけです。直ファイルコピーでもシンボリックリンクでもgit submoduleでも構いません。
直ファイルコピーでanseedを使う
インストール
これはインストールが一番簡単な方法です。自分の構成管理リポジトリでanseedも管理します。まず自分の構成管理リポジトリのルートディレクトリに移動します。
$ cd YOUR_ANSIBLE_REPOSITORY_ROOT_DIRECTORY
anseedが提供するbootstrap.shを使ってファイルをダウンロードします。
curl -L https://raw.githubusercontent.com/TakesxiSximada/anseed/master/bootstrap.sh | sh
これを実行すると.anseed
ディレクトリにanseedがダウンロードされます。この .anseed
はgitにコミットして管理することをお勧めしますが強制ではありません。
設定
ルートディレクトリにMakefileを作成し、次のコードを追加します。
ANSEED := $(CURDIR)/.anseed
include environ/$(environ)/config.mk
include $(ANSEED)/anseed.mk
ANSEED := $(CURDIR)/.anseed
はanseedのディレクトリがどこにあるかを指定しています。例えば .anseed
以外の場所にanseedを入れた場合はここを変更する必要があります。
include environ/$(environ)/config.mk
は読み込む環境設定を切り替えるための設定です。bootstrap.shでインストールすると environ
ディレクトリが作成されます。このディレクトリに staging
や production
といったディレクトリを作成して、その配下にそれぞれの環境依存の設定をします。インベントリファイルはここに作成します。例えばstagingのinventryはenviron/staging/inventry
です。
config.mk
で設定値を定義することで anseedの内部変数を上書きできます。この環境名は実行時に environ=staging make
のように指定することになります。
Playbookの実行
playbookはdeploy.ymlという名前で既に作成済みとします。このdeploy.ymlをstaging環境に実行するには次のようにします。
$ environ=staging make play book=./deploy.yml
productionに実行するにはenviron=
の値を変えて実行します。
$ environ=production make play book=./deploy.yml
その他の使えるコマンドや使い方に関してはUsageを見るといいでしょう。
$ environ=production make help
Usageを表示するためにはunmakeが必要です。unmakeに関しては http://qiita.com/TakesxiSximada/items/cb64d27b3e30a0430d60 をどうぞ。
git submoduleでanseedを使う
今度はanseedをサブモジュールとしてインストールします。
- anseed をforkします。
私のリポジトリを直接サブモジュールにしてもいいのですが、それでは権限がないので好きなタイミングでpushできません。そこでお勧めなのが、anseedをforkしてそれをサブモジュールにすることです。そうすればfork先anseedにはpushできるので修正をリポジトリホスティング側で管理できます。
- forkしたanseedをsubmoduleとして登録します。
$ git submodule add git@github.com:YOUR_ACCOUNT/anseed.git .anseed
-
environ/staging
ディレクトリを作成する
$ mkdir environ/staging
-
environ/staging/inventry
ファイルを作成する。 -
Makefileに以下を追加する。
ANSEED := $(CURDIR)/.anseed
include environ/$(environ)/config.mk
include $(ANSEED)/anseed.mk
まだ使い始めたばかりなのでしばしば機能の変更があると思います。
ちなみにanseedの兄貴分でCloudFormation用のcfseed https://github.com/TakesxiSximada/cfseed もあります。