これは完全に私の趣味/趣向によるものなのですが、ansibleでplaybookを実行するコマンドがとても長くて気に入りません。そこでMakefileによく使うコマンドを書いて `make deploy` でデプロイできるようにしてました。使っていると環境切り替えをするためにMakefileにいろいろなロジックを書くようになりました。複数のリポジトリで同じようなMakefileが散らばって、こっちのMakefileは他のリポジトリで書いたロジックが入っていないなど、結構ストレスが溜まってきました。 そこでそのあたりの処理を共通化すべくanseed1という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= は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を表示するためにはunmake2が必要です。
git submoduleでanseedを使う
今度はanseedをサブモジュールとしてインストールします。
- anseedをforkします。 私のリポジトリを直接サブモジュールにしてもいいのですが、それでは権限がないので好きなタイミングでpushできません。そこでお勧めなのが、anseedをforkしてそれをサブモジュールにすることです。そうすればfork先anseedにはpushできるので修正をリポジトリホスティング側で管理できます。
- forkしたanseedをsubmoduleとして登録します。
git submodule add [email protected]:YOUR_ACCOUNT/anseed.git .anseed
environ/staging
ディレクトリを作成する
mkdir environ/staging
- =environ/staging/inventry ファイルを作成する。
- Makefileに以下を追加する。
まだ使い始めたばかりなのでしばしば機能の変更があると思います。 ちなみにanseedの兄貴分でCloudFormation用のcfseedもあります。