Edited at

DockerによるChefのCookbooks開発

More than 1 year has passed since last update.

Chefのcookbookをちょっと実行したい時、みなさんどうしているのでしょうか。

Amazon S3上に、手元のMacbookのVirtualbox(Vagrant)で、さくらのVPSで、XenサーバのDomUで。。。などなど色々だと思います。

仮想環境だとまっさらなOSを立ち上げるのにいちいち時間がかかる。

みなさん


Docker使いませんか?

私はUbuntuサーバにDockerをインストールした環境を用意して

その上でCentOSでも, UbuntuでもDockerで文字通り ドカドカ 作って消してChefのレシピを開発しています。

Docker上のOSはLinux Containerなので仮想環境よりもCreate/Destroyが早くできます。

そして、そのDockerを使ってChefのCookbookを開発するのに便利なkitchen-dockerの使い方を紹介します。

※今回はDockerに関する記事は割愛します。

kitchen-dockerはdockerコンテナをkitchenでコントロールする便利なプラグインです。


【インストール】

※Dockerが起動する環境に入れましょう。test-kitchenも一緒にインストールされます。

gem install kitchen-docker


【Option】


  • kitchen init ... 設定ファイル等環境を構築します。(kitchen-vagrantの設定ファイルができますので書き換えます)

  • kitchen create ... .kitchen.yml(or kitchen.local.yml)で指定したdockerのOSコンテナを立ち上げます。その後、OSコンテナでsshdも立ち上げてくれます。

  • kitchen setup ... 立ち上げたdocker上のOSコンテナにChef-soloをインストールします。その後、手元にあるchefのcookbookをアップロードしてChef-soloで.kichen.yml(.kichen.local.yml)で指定したレシピ or Roleを実行してくれます。

  • kitchen converge ... cookbookを再度アップロードしてChef-soloを実行してくれます。

  • kitchen destroy ... 作ったDocker上のOSコンテナを消してくれます。
    などなど他にもあります。


【使い方】


1. 環境設定

# cd /var/chef

# kitchen init


2. 設定ファイルの編集

YMLファイルなのでスペース(' ')に注意してください

* driver_plugin: docker ... dockerプラグインを利用します

* name: ... 何でもOK。

* image: "centos" ... コンテナを作成するときのdockerイメージ名を指定します。

* run_list: ... role, recipe等指定できます

* attributes: ... attributes等指定できます。

# .kitchen.yml

---
driver_plugin: docker
driver_config:
require_chef_omnibus: true

platforms:
- name: centos-docker-test
driver_config:
image: "centos"
platform: "rhel"
run_list:
recipe[httpd]

suites:
- name: default
run_list: []
attributes: {}


【demo】

あとはデモをどうぞ