devops 研修 中級編#01
TRANSCRIPT
I’m …深海 寛信 Hiro Fukami
株式会社シェイクソウル 代表取締役 CEO
創業者 + エンジニア + 一人娘のパパ
Blog hirofukami.com
Facebook /fukami
Twitter @d_sea
サンプルCookbook実行マシン上(Linux/Mac)の適当なディレクトリ上で、
git clone [email protected]:shakesoulinc/sample-cookbooks.git
もしくは
https://github.com/shakesoulinc/sample-cookbooks/archive/master.zipからDownload ZIPして解凍
Practice - knife solo実行cd /sample-cookbooks-master
knife solo prepare [email protected]
nodes/node00.json の中身を nodes/192.168.33.10.json へコピペ
knife solo cook [email protected]
ブラウザから Node へアクセス
Practice - 変数
nodes/node00.json の中身を node/[node].json 内の “title” から後の文字列を適当に変更してみる
knife solo cook [node]
ブラウザから Node へアクセス
knife solo prepare
NodeをChef Clientに仕立てる(knifeコマンドをインストール)
nodes 配下にホストに適用するJSONファイルを作成する
一度 Chef Client に仕立てれば2回目以降は不要
Cook 動作フロー1. nodes ディレクトリ配下にある [ホスト名].json ファイルを探す
2. ファイル内の “run_list” を読み、指定されたレシピを把握
3. [ホスト名] に ssh login
4. レシピファイルなどを rsync して Node にコピーする
5. Node 内で指定されたレシピを実行
作業の仕方例1. knife solo init
2. Cookbook作成、レシピ作成
3. knife solo prepare
4. knife solo cook -W : チェック
5. knife solo cook
6. エラーが出たら修正 && knife solo cook(繰り返し)
Cookbooks を作る
knife solo init [repository-name]
cd [repository-name]
knife cookbook create [cookbook-name] -o site-cookbooks
リポジトリディレクトリcookbooks : サードパーティーcookbooksの置き場
data_bags : 入力したいデータを管理する
nodes : Nodeに対して適用する設定内容、ホストごとにJSONファイルを置く
roles : 適用レシピのグルーピング
site-cookbooks : 自作cookbookの置き場
自作cookbookを作る
knife cookbook create [cookbook-name] -o site-cookbooks
-o オプション : cookbookの出力先指定
site-cookbooks 配下に [cookbook-name]ディレクトリが作られる
Cookbook ディレクトリattributes : 変数のデフォルト値を設定したファイルを置く
files : アップロードするファイルを置く
recipes : 実行ファイルを置く
templates : アップロードするファイル(変数設定可)を置く
recipes/xxx.rbの書き方
Resources Reference
https://docs.chef.io/chef/resources.html
多くのpackageをインストールしたい時
rubyのeachが使える
%w{
tar
git
gcc
}.each do |pkg|
package pkg do
action :install
end
end
Serviceサービスプロセスのマネージ
service "nginx" do
supports :status => true, :restart => true, :reload => true
action [:enable, :start]
end
Templateファイルの配置、.erbファイルとして変数が扱える
template "site.conf" do
path "/etc/nginx/conf.d/default.conf"
source "site.conf.erb"
owner "root"
group "root"
mode 0644
notifies :reload, 'service[nginx]'
end
Bashbashの実行
bash 'install_something' do
user 'root'
cwd '/tmp'
code <<-EOH
wget http://www.example.com/tarball.tar.gz
tar -zxf tarball.tar.gz
cd tarball
./configure
make
make install
EOH
end
not_iffalse の時に実行する
template '/tmp/somefile' do
mode 00644
source 'somefile.erb'
not_if do
File.exists?('/etc/passwd')
end
end
only_iftrue の時に実行する
template '/tmp/somefile' do
mode 00644
source 'somefile.erb'
only_if do ! File.exists?('/etc/passwd') end
end
変数template(.erb)ファイル内に変数を定義
<h1><%= node['title'] %> サンプルページ</h1>
nodes/[hostname].json内に値を設定する
"title" : "Chef Tech Study",
変数 階層化階層化も可能
template
<%= node[‘userinfo']['username']%>
node
"userinfo" : {
"username" : "shakesoul"
},
nodejson形式
run_listに適用するレシピを書く(配列)
"run_list": [ “recipe[nginx_html]”, “recipe[php]” ]
変数の値を書く(サンプルcookbook参照)
ルールどんな状態にするCookbookかしっかり意図する
Chef Super Marketなどから一部コードのコピペはOK(まるごと持ってきて動かすだけはNG)
サードパーティーCookbookを利用してもOK
作成中の質問はいつでも受け付けます