LoginSignup
18
19

More than 5 years have passed since last update.

Vagrant 環境で chef-solo を使って git をインストールしてみる

Posted at

以下の続きだけれども、最初からやりたい症候群のため、また box の取得から

vagrant 初回処理

$ vagrant init
Vagrantfile
config.vm.box = "chef/centos-6.5"

特にURLを指定しなくても、vagrant 側で、Vagrant Cloud から探して、vagrant box add してくれるっぽい

$ vagrant up

vagrant-vbox-snapshot を使う

vagrant のスナップショットをとってくれる
cook に失敗しても、vagrant destory して作りなおしたりしなくて良いので、便利

$ vagrant plugin install vagrant-vbox-snapshot

スナップショット作成

$ vagrant snapshot take init ← "init" がスナップショット名 
Taking snapshot init

スナップショット一覧

$ vagrant snapshot list
Listing snapshots for 'default':
   Name: init (UUID: ef144906-56a9-4c83-a09e-61f5b6f90e26) *

それ以外のコマンドについては後述

bundler

$ bundle init
Gemfile
source "https://rubygems.org"

gem 'rake'
gem 'knife-solo'
gem 'serverspec'
$ bundle install --path vendor/gems

knife solo をサーバにインストール

サーバにホスト名でログインできるようにする

vagrant ssh-config で、vagrant サーバにログインするための ssh-config を教えてもらえる

$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2201
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/kasei_san/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

$ vagrant ssh-config >> ~/.ssh/config

Host 名は複数環境がある場合、変えたほうが良い

knife solo のインストール

$ bundle exec knife solo prepare default

スナップショットを作成

$ vagrant snapshot take add_kinfe_solo

$ vagrant snapshot list
Listing snapshots for 'default':
   Name: init (UUID: ef144906-56a9-4c83-a09e-61f5b6f90e26)
      Name: add_kinfe_solo (UUID: b86f606c-9ed8-4161-9e0a-9190d71dc0e6) *

serverspec 初期化

bundle exec serverspec-init
echo "--color" >> .rspec

テスト実行

bundle exec rake spec

サンプルテストがこけることを確認

git をサーバにインストール

serverspec 実装

spec/default/git_spec.rb
require 'spec_helper'

describe package('git') do
  it { should be_installed }
end

サンプルのテストは削除

テスト実行

$ bundle exec rake spec

/Users/kasei_san/.rbenv/versions/2.1.0/bin/ruby -S rspec spec/default/git_spec.rb
F

Failures:

  1) Package "git" should be installed
     Failure/Error: it { should be_installed }
       sudo rpm -q git
       パッケージ git はインストールされていません。

       expected Package "git" to be installed
     # ./spec/default/git_spec.rb:4:in `block (2 levels) in <top (required)>'

Finished in 4.9 seconds
1 example, 1 failure

Failed examples:

rspec ./spec/default/git_spec.rb:4 # Package "git" should be installed
/Users/kasei_san/.rbenv/versions/2.1.0/bin/ruby -S rspec spec/default/git_spec.rb failed

こける

cookbook 生成

knife cookbook create 〜 で、cookbook が生成される

$ mkdir cookbooks
$ bundle exec knife cookbook create git -o cookbooks

cookbooks ディレクトリに、git の cookbook が生成される

$ tree cookbooks/
cookbooks/
└── git
    ├── CHANGELOG.md
    ├── README.md
    ├── attributes
    ├── definitions
    ├── files
    │   └── default
    ├── libraries
    ├── metadata.rb
    ├── providers
    ├── recipes
    │   └── default.rb
    ├── resources
    └── templates
        └── default

recipe を書く

package 〜 install で、プラットフォームに合わせて、パッケージをインストールしてくれる

  • yum とか apt とか
cookbooks/git/recipes/default.rb
#
# Cookbook Name:: git
# Recipe:: default
#
# Copyright 2014, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#

package 'git' do
  action :install
end

nodes/default.json サーバ default で実行される レシピ を書く

nodes/default.json
{
  "run_list":[
    "recipe[git]"
  ]
}

cook 実行

$ bundle exec knife solo cook default

...

Starting Chef Client, version 11.12.2
Compiling Cookbooks...
Converging 1 resources
Recipe: git::default
  * package[git] action install
    - install version 1.7.1-3.el6_4.1 of package git

...

無事インストールされた

テスト再実行

$ bundle exec rake spec
/Users/kasei_san/.rbenv/versions/2.1.0/bin/ruby -S rspec spec/default/git_spec.rb
.

Finished in 5.22 seconds
1 example, 0 failures

スナップショット作成

$ vagrant snapshot take add_git
$ vagrant snapshot list
vagrant snapshot list
Listing snapshots for 'default':
   Name: init (UUID: ef144906-56a9-4c83-a09e-61f5b6f90e26)
      Name: add_kinfe_solo (UUID: b86f606c-9ed8-4161-9e0a-9190d71dc0e6)
         Name: add_git (UUID: bba37259-54bc-4a0f-b6b4-81aa0283eda1) *

無事、gitがインストールされたことを確認できた

(おまけ)スナップショットの移動

vagrant snapshot go

add_kinfe_solo に移動したい場合

$ vagrant snapshot list
Listing snapshots for 'default':
   Name: init (UUID: ef144906-56a9-4c83-a09e-61f5b6f90e26)
      Name: add_kinfe_solo (UUID: b86f606c-9ed8-4161-9e0a-9190d71dc0e6)
         Name: add_git (UUID: bba37259-54bc-4a0f-b6b4-81aa0283eda1) *


$ vagrant snapshot go add_kinfe_solo

$ vagrant snapshot list
Listing snapshots for 'default':
   Name: init (UUID: ef144906-56a9-4c83-a09e-61f5b6f90e26)
      Name: add_kinfe_solo (UUID: b86f606c-9ed8-4161-9e0a-9190d71dc0e6) *
         Name: add_git (UUID: bba37259-54bc-4a0f-b6b4-81aa0283eda1)

vagrant snapshot back

最新のスナップショットに戻す
なにかやらかした場合に使う

用語

本家用語集

node

Chef で管理されるサーバ

Recipe

Chef によって環境設定するための、カプセル化されたリソース。Ruby の DSL で書かれた設定ファイル

Cookbook

サーバに設定をするためのコードのパッケージ
Cookbook の中に1〜複数の Recipe がある

参考

18
19
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
18
19