Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
44
Help us understand the problem. What is going on with this article?
@yusabana

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

More than 5 years have 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を使い倒せます!

44
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
44
Help us understand the problem. What is going on with this article?