Berkshelfベースにvagrant, chef(knife-solo)環境を簡単に構築する方法

  • 44
    Like
  • 3
    Comment
More than 1 year has passed since last update.

前提

必要なファイルをインストール

今回の環境は以下のとおりです。(MacOSX)
VirtualBox 4.2.18 r88780
Vagrant 1.3.4
Ruby 2.0.0p247
Bundler 1.3.5 (Ruby Gems)

初期ディレクトリ

/tmp以下を今回の作業環境とする。以下のディレクトリ構成を作る。

/tmp
└── vagrant-test
    └── chef-repo

BundlerによるBerkshelfを使ってVagrantのセットアップ

bundleのinitまで
% cd /tmp/vagrant-test/chef-repo
% bundle init
bundle_initで生成されたGemfileを編集
% vi Gemfile
source "https://rubygems.org"
gem "knife-solo", "~> 0.3.0"
gem "foodcritic"
gem "berkshelf"
gem "serverspec"
gem "awesome_print"
bundleを実行
% bundle install --path vendor/bundle --binstubs vendor/bin
berkshelfのイニシャライズ(途中でGemfileのコンフリクトでどうするか求められるが、「n」でスキップして進める)
% bundle exec berks init
      create  Berksfile
      create  Thorfile
      create  .gitignore
         run  git init from "."
    conflict  Gemfile
Overwrite /private/tmp/vagrant-test/chef-repo/Gemfile? (enter "h" for help) [Ynaqdh] n
          skip  Gemfile
      create  Vagrantfile
Successfully initialized
berk_initで生成された不要なファイルを削除
% rm Thorfile  <= とりあえずthorは使うことがないので削除
「Vagrantfile」は以下のとおりにする。(Centosのバージョンなどは適宜合わせて下さい)
% vi Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.hostname = "chef-repo-berkshelf"
  config.vm.box = "centos6.5-x86_64-minimal_20131205"
  config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box"
  config.vm.network :private_network, ip: "192.168.33.100"
  config.vm.boot_timeout = 120
end

その他、Vagrantfileの設定でデフォルトで有効になっている箇所はvagrant-berkshelfプラグインの設定やvagrantのprovisioningの設定なので、ここでは使用しないため無効化している。適宜必要があれば有効化して下さい。

vagrant起動
vagrant upすると「config.vm.box」に指定したBoxをダウンロードしてVMを起動してくれる
% vagrant up

simply run `vagrant up`.   <= 起動完了
vagrant接続確認
vagrantのボックスが追加されていることを確認
% vagrant box list
Berkshelf-CentOS-6.4-x86_64-minimal (virtualbox)

VMのステータスを確認
% vagrant status
Current machine states:

default                   running (virtualbox)

vagrantコマンドでSSH接続
% vagrant ssh

ssh接続用のコンフィグファイルを作成して、sshコマンドでログインしてみる
% vagrant ssh-config --host myapp-test  >> ./myapp_sshconfig
% ssh -F ./myapp_sshconfig myapp-test

以上、SSHコマンドでの接続確認ができれば、Berkshelf init から Vagrantの設定まで完了です。


Chef(knife-solo)のセットアップ

先ほど立ち上げたvagrantのVMをホストにknife-soloのセットアップ
% cd /tmp/vagrant-test/chef-repo/

必要があれば実行する( knife-soloの共通設定「~/.chef/knife.rb」 を作るためのコマンド。すでにファイルがある場合はこの手順はスキップする)
% bundle exec knife solo conifigure

ディレクトリ構成を初期化
% bundle exec knife solo init .

VMホストにchefの設定を初期化する
% bundle exec knife solo prepare -F ./myapp_sshconfig myapp-test
berkshelfでサードパーティのyumクックブックを定義する
% vi Berksfile
site :opscode
cookbook "yum"

サードパーティのクックブックをインストール
% bundle exec berks install --path cookbooks

yum クックブックがダウンロードできていることを確認
% ls -ls ./cookbooks/

以上でknife-soloのセットアップ完了


knife-soloでクックブックを実行する

ここでは先ほどberkshelfでインストールしたyumのサードパーティクックブックの中のepelを入れようと思います。

jsonファイルにyum
% cd /tmp/vagrant-test/chef-repo/
% vi ./node/myapp-test.json
{"run_list":[
    "recipe[yum::epel]"
  ]
}
knife_soloを実行する
% bundle exec knife solo cook -F ./myapp_sshconfig myapp-test 

以上でepelのyumリポジトリがVMのホストにインストールされていると思います。
残りはberkshelfでその他サードパーティのクックブックを入れたり、site-cookbooks以下に独自のクックブックを作ったりしてよしなにvagrantのVMを使い倒せます!