概要
chef入門ということでchef-soloを利用してchefのハンズオンをしてみたいと思います。
index
とりあえず、30分でchef-soloを動かそう!
とりあえず、30分で他に人が作ったCookBookを使ってみよう!
環境
CentOS 6.4 Minimal
とりあえず、30分でchef-soloを動かそう![手順1~10まで]
[手順1]chefdkインストール
wget https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chefdk-0.7.0-1.el6.x86_64.rpm
rpm -ivh chefdk-0.7.0-1.el6.x86_64.rpm
[手順2]パッケージインストール
chefはrsyncとsshを利用するのでないと後で怒られました。
必須パッケージインストール
yum install rsync openssh-clients
その他パッケージインストール
yum install wget vim man
[手順3]環境変数設定
chefdkに置いてある各種プログラムを最優先させるため以下のように環境変数を設定しました。
export PATH=/opt/chefdk/embedded/bin:$PATH
[手順4]knife-soloインストール
なぜかchefdk中にはknife-soloは含まれてません。なので別途入れておきます。
gem install knife-solo
[手順5]chef-solo初期設定&レポジトリ作成&CookBook作成
どのディレクトリで実行しても構いません。
初期設定
色々と聞かれるけど全てデフォルトでOKです。
knife configure
レポジトリ作成
knife solo init chef-repo
CookBook作成
作成したレポジトリに移動してBaaeという名前のCookBookを作成します。
cd chef-repo
knife cookbook create base -o site-cookbooks/
[手順6] レシピ作成
Hello Word的にapacheとtreeをインストールするレシピを作ってみましょう
%w{httpd tree}.each do |pkg|
package pkg do
action :install
end
end
[手順7] リモートサーバにchefインストール
レシピを実行する側のサーバにchefをインストールします。
これは最初一回だけ実行すればいいです。
knife solo prepare xx@xxx.com
[手順8]RunList登録
[手順7]が終わったらnodesフォルダーに該当ホストのjsonファイルができがあります。(xxx.com.json)
そのファイルに実行したいレシピを指定します。(この設定がないと何も実行しません)
{
"run_list":[
"recipe[base]"
]
}
※cookbookの名前だけ指定するとデフォルトとレシピであるDefault.rbが実行されます。
[手順9]実行!
実際RunListに登録したレシピを実行します。
(この時内部的にはrsyncとsshを利用します。)
knife solo cook xx@xxx.com
[手順10]動作確認
正常に終わってなかったらエラーが出るはずです。
後、リモートサーバ側に行ってレシピに登録した動作が正常に実行されたか確認すれば良いかと思います。
とりあえず、30分で他に人が作ったCookBookを使ってみよう![手順1~5まで]
次はコミュニティーにあるCookBookを利用する方法について学びます。
今回はBerkShelfというのを利用してコミュニティーにあるソースを取得します。
ただ、chefDKを使わないとBerkShelfをインストールするのが面倒でした。。
のでchefDKではない方でchef環境を構築した人は30分で終わるか断言できません。。
chefDKを入れておいたらberksShelfはすでに利用できる状態です。(環境変数さえ合ってれば)
[手順1]berksShelf環境構築
先ほど作ったレポジトリディレクトリに移動
cd /opt/chef/chef-repo
berkshelf initを実行するため
以下のファイル作成
name 'hoge'
maintainer ‘tbpgr’
maintainer_email 'sample'
license 'All rights reserved'
description 'Installs/Configures createdb'
long_description 'long_description'
version '0.1.0'
depends 'git'
それから
berks init
するとBerksfileが作成されてるはず
Berksfileに以下の設定を入れておきます。
source "https://api.berkshelf.com"
cookbook 'mysql', '~>5.3.6'
このようにバージョンの指定は'~>5.3.6'のように指定できます。
Berksfileに設定したmysqlのcookbookをコミュニティーから取得するコマンドを実行します。
[手順2]cookbook取得
berks vendor cookbooks
ちなみに特定cookbookにの最新情報取得には
cookbooks/mysqlディレクトリを削除して
berks update mysqlすればいいです。
[手順3]取得したcookbookのレシピを登録
nodeにレシピ登録
"recipe[mysql::server]"
(knife solo prepare xx@xxが実行済みという仮定でnodesの下にリモートサーバ側のホスト.jsonファイルがあるはずです)
Run List が更新されたか確認
(しなくてもいいが、実行する前にRunListが間違ってないかチェックできる)
knife node show xx(host) -z
[手順4]実行
登録したレシピをリモートサーバ側に実行させる
knife solo cook xxx@xxx
[手順5]動作確認
実行後エラーが出なくリモートサーバ側で確認したらmysqlがインストールされていました。
rpm -qa | grep mysql
mysql-5.1.73-5.el6_6.x86_64
mysql-libs-5.1.73-5.el6_6.x86_64
mysql-server-5.1.73-5.el6_6.x86_64
その他
他の人が作ったレシピを自分が作った
recipe内で呼び出して色々設定を変えることもできます。
その時は自分のレシピで
include_recipe
と記述すればよいです。
設定例
include_recipe 'mysql::server'
mysql_connection = {:host => "localhost", :username => 'root',
:password => node['mysql']['server_root_password']}
mysql_database node['mysql_test']['database'] do
connection mysql_connection
action :create
end
mysql_database_user node['mysql_test']['username'] do
connection mysql_connection
password node['mysql_test']['password']
database_name node['mysql_test']['database']
host 'localhost'
privileges [:select,:update,:insert, :delete]
action [:create, :grant]
end