Upload
hiro-fukami
View
1.016
Download
0
Embed Size (px)
Citation preview
I’m …深海 寛信 Hiro Fukami
株式会社シェイクソウル 代表取締役 CEO
創業者 + エンジニア + 一人娘のパパ
Blog hirofukami.com
Facebook /fukami
Twitter @d_sea
演習環境の確認実行サーバに knife solo コマンドが入っていること
Nodeとなるサーバがあること
knife コマンド実行環境からNodeにsshログインできること
Chefのレポジトリディレクトリが作成済なこと
sample-cookbookがダウンロード済なこと
鍵生成実行マシンで以下を実施
$ cd /home/ikusei/vagrant/sample
$ ssh-keygen
Enter file in which to save the key : ./id_rsa
Enter passphrase (empty for no passphrase): (何も入力しない)
Enter same passphrase again: (何も入力しない)
id_rsa, id_rsa.pub が生成される
Nodeに公開鍵設定Nodeにて以下を実行
$ cd /vagrant
$ ls
id_rsa, id_rsa.pub が確認できる
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
自分のレポジトリに取り込む実行マシンにて
$ cd [レポジトリディレクトリ]
$ knife cookbook site install yum
$ knife cookbook site install yum-epel
[レポジトリディレクトリ]/cookbooks 配下に yum, yum-epel があること
サンプルcookbookをコピー実行マシンで以下を実施
$ cd [sample-cookbooks]
$ cp -rf site-cookbooks/nginx_html [自分の作ったレポジトリディレクトリ]/site-cookbooks/
nodesを作る実行マシンで以下を実施
$ knife solo prepare [email protected] -i C:/cygwin/home/ikusei/.vagrant/sample/id_rsa
[レポジトリディレクトリ]/nodes/192.168.33.10.json が確認できること
jsonを編集実行マシンにて、[レポジトリディレクトリ]/nodes/192.168.33.10.json を以下のように編集する。
{
"title" : "Chef Tech Study",
"run_list": [
"recipe[yum-epel]",
"recipe[nginx_html]"
]
}
cookする実行マシンにて以下を実行
$ knife solo cook [email protected] -i id_rsa
処理が終わったらブラウザで http://192.168.33.10 へアクセス
変数の値を変える実行マシンにて、テキストエディタで 192.168.33.10.json をひらく
"title" : “learning Chef, Right Now!”,
再度、
$ knife solo cook [email protected] -i id_rsa
再度 http://192.168.33.10 へアクセス
ルールどんな状態にするCookbookかしっかり意図する
サードパーティーCookbookを利用してもOK
referenceのサンプルからコードのコピペはOK(まるごと持ってきて動かすだけはNG)
作成中の質問はいつでも受け付けます
リポジトリディレクトリ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"
},