« ^ »

ansibleのショートカットコマンドを提供するanseedを作った

所要時間: 約 4分

これは完全に私の趣味/趣向によるものなのですが、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
include environ/$(environ)/config.mk
include $(ANSEED)/anseed.mk
Makefile

ANSEED : $(CURDIR)/.anseed= はanseedのディレクトリがどこにあるかを指定しています。 例えば =.anseed= 以外の場所にanseedを入れた場合はここを変更する必要があります。 =include environ/$(environ)/config.mk= は読み込む環境設定を切り替えるための設定です。 bootstrap.shでインストールすると `environ` ディレクトリが作成されます。 このディレクトリに stagingproduction といったディレクトリを作成して、 その配下にそれぞれの環境依存の設定をします。 インベントリファイルはここに作成します。 例えば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をサブモジュールとしてインストールします。

  1. anseedをforkします。 私のリポジトリを直接サブモジュールにしてもいいのですが、それでは権限がないので好きなタイミングでpushできません。そこでお勧めなのが、anseedをforkしてそれをサブモジュールにすることです。そうすればfork先anseedにはpushできるので修正をリポジトリホスティング側で管理できます。
  1. forkしたanseedをsubmoduleとして登録します。
git submodule add [email protected]:YOUR_ACCOUNT/anseed.git .anseed
  1. environ/staging ディレクトリを作成する
mkdir environ/staging
  1. =environ/staging/inventry ファイルを作成する。
  2. Makefileに以下を追加する。
ANSEED := $(CURDIR)/.anseed
include environ/$(environ)/config.mk
include $(ANSEED)/anseed.mk
Makefile

まだ使い始めたばかりなのでしばしば機能の変更があると思います。 ちなみにanseedの兄貴分でCloudFormation用のcfseedもあります。

脚注