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: {}