Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

[READY] ansibleのショートカットコマンドを提供するanseed

Last updated at Posted at 2017-02-25

これは完全に私の趣味/趣向によるものなのですが、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 ディレクトリが作成されます。このディレクトリに 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を表示するためにはunmakeが必要です。unmakeに関しては http://qiita.com/TakesxiSximada/items/cb64d27b3e30a0430d60 をどうぞ。

git submoduleでanseedを使う

今度はanseedをサブモジュールとしてインストールします。

  1. anseed をforkします。

私のリポジトリを直接サブモジュールにしてもいいのですが、それでは権限がないので好きなタイミングでpushできません。そこでお勧めなのが、anseedをforkしてそれをサブモジュールにすることです。そうすればfork先anseedにはpushできるので修正をリポジトリホスティング側で管理できます。

  1. forkしたanseedをsubmoduleとして登録します。
$ git submodule add git@github.com: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

まだ使い始めたばかりなのでしばしば機能の変更があると思います。

ちなみにanseedの兄貴分でCloudFormation用のcfseed https://github.com/TakesxiSximada/cfseed もあります。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?