Chef-solo+knife-solo+Vagrantã§ãµã¼ãæ§ç¯ãèªååãã¦ã¿ã - ãã®ï¼ ã¦ã¼ã¶ã¼è¿½å
æ¬æ¥ï¼8/24ï¼ãLL祭りã§ã
Inftastructure as LLã¨ããã»ãã·ã§ã³ãè¦ã¦ãã¾ããã
æè¿ãChef-soloï¼knife-soloãããããããã£ã¦ããã®ã§ã仿¥ã¯ä¸çªè峿·±ãã»ãã·ã§ã³ã§ããã
ããæ©ä¼ãªã®ã§ãæè¿èªåãChef+Vagrantã§ãã£ãäºããã¡ã¢ãã¦ããããã¨æãã¾ãã
ä»åã®æµã
â»å種ã¤ã³ã¹ãã¼ã«ã«é¢ãã¦ã¯åèãµã¤ãã«ãä»»ããã¾ãã
Chef Soloと Knife Soloでの ニコニコサーバー構築 (2) 〜導入編〜:dwango エンジニア ブロマガ:ドワンゴ研究開発チャンネル(ドワンゴグループのエンジニア) - ニコニコチャンネル:生活
Chef Soloの正しい始め方 | tsuchikazu blog
開発メモ#5 : Amazon Linux で knife-solo を使って chef-solo 実行 - naoyaのはてなダイアリー
- ä»åã®ç°å¢ã®å種è¨å®ãæãã¦ã¿ã
- chefãªãã¸ããªï¼kitchenï¼ï¼ãä½ã
- ã¦ã¼ã¶ã¼è¿½å ã®ã¬ã·ããæ¸ã
- kife-soloã§ãµã¼ãã«é©ç¨ãã
- ã¬ã·ãã§ãã£ã¦ãäºããªã½ã¼ã¹åãã
- ãã£ããé©ç¨ãã¦ã¿ãï¼çµæãå¤ãããªãäºã確èªï¼
- ãã¾ã
ä»åã®ç°å¢ã®å種è¨å®ãæãã¦ã¿ã
Gemfile
chefã¯rubyã®gemã«ãªã£ã¦ããã®ã§ãbundlerã§ç®¡çããçºã«Gemfileãæ¸ãã¾ããã
source 'http://rubygems.org' gem 'chef' gem 'knife-solo', '~> 0.3.0.pre3' gem 'berkshelf'
Vagrantfile
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "ubuntu13.04" config.vm.network :private_network, ip: "192.168.33.10" config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", "2048", "--cpus", "2"] end end
ä»åã¯VMã®IPã192.168.33.10
ã«åºå®ãã¾ããã
chefãªãã¸ããªï¼kitchenï¼ï¼ãä½ã
ã§ã¯æ©éãchefã£ã¦ããã¾ãã
â»è©³ããå
容ã¯åèãµã¤ãã«ãä»»ããã¾ãã
$ bundle exec knife solo init chef-repo Creating kitchen... Creating knife.rb in kitchen... Creating cupboards... Setting up Berkshelf... $ cd chef-repo
ã¦ã¼ã¶ã¼è¿½å ã®ã¬ã·ããæ¸ã
ã¨ããããã§ãæ©éæ¸ãã¦ã¿ã¾ãã
ã§ãã¾ãã¯cookbookãä½ãã¾ãã
$ bundle exec knife cookbook create users -o site-cookbooks ** Creating cookbook users ** Creating README for cookbook: users ** Creating CHANGELOG for cookbook: users ** Creating metadata for cookbook: users
ã¦ã¼ã¶ã¼ã追å ããã¬ã·ããªã®ã§usersã¨ããã¯ãã¯ããã¯ãä½ãã¾ããã
ã§ã¯ã¬ã·ããæ¸ãã¦ããã¾ãã
ä»åã¯defaultã®ã¬ã·ãã¨ãã¦ãæ¸ãã¾ããã
æ¬å½ã¯è¿½å ãªã®ã§ãadd
ã¨ãã®ã¬ã·ãã«ããæ¹ãè¯ãã®ããªãã¨ãæã£ã¦ã¾ãã
( recipe[users::add]ã¿ãããªï¼
site-cookbooks/users/recipes/default.rb
ãç·¨éãã¾ãã
group 'deploy' do group_name 'deploy' gid 999 action :create end user 'deploy' do comment 'deploy user' group 'deploy' home '/home/deploy' shell '/bin/bash' supports :manage_home => true action :create end
OKããããããã¾ã§å®è¡ãã¦ã¿ã¾ãï¼
ã§ã¯Vagrantã§VMèµ·åãã¦ãknife-soloã§chef-soloãã¤ã³ã¹ãã¼ã«ããã¦ãã¬ã·ããå®è¡ãã¾ãã
ï¼ä»åã¯~/.ssh/config
ã§VMã«chef-test
ã¨ããååãã¤ãã¾ããï¼
$ vagnrant up Bringing machine 'default' up with 'virtualbox' provider... [default] Importing base box 'ubuntu13.04'... [default] Matching MAC address for NAT networking... [default] Setting the name of the VM... [default] Clearing any previously set forwarded ports... [default] Creating shared folders metadata... [default] Clearing any previously set network interfaces... [default] Preparing network interfaces based on configuration... [default] Forwarding ports... [default] -- 22 => 2222 (adapter 1) [default] Running any VM customizations... [default] Booting VM... [default] Waiting for VM to boot. This can take a few minutes. [default] VM booted and ready for use! [default] Configuring and enabling network interfaces... [default] Mounting shared folders... [default] -- /vagrant
$ bundle exec knife solo prepare chef-test Bootstrapping Chef... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 6790 100 6790 0 0 1158 0 0:00:05 0:00:05 --:--:-- 8161 Downloading Chef 11.6.0 for ubuntu... ^[[DInstalling Chef 11.6.0 (Reading database ... 65296 files and directories currently installed.) Preparing to replace chef 10.12.0-3 (using .../chef_11.6.0_amd64.deb) ... * Stopping chef-client chef-client [ OK ] Unpacking replacement chef ... dpkg: warning: unable to delete old directory '/etc/chef': Directory not empty dpkg: warning: unable to delete old directory '/var/log/chef': Directory not empty Setting up chef (11.6.0-1.ubuntu.13.04) ... Thank you for installing Chef! Processing triggers for ureadahead ... Processing triggers for man-db ... Generating node config 'nodes/chef-test.json'...
ããã§ãnodes
ãã£ã¬ã¯ããªé
ä¸ã«jsonãã¡ã¤ã«ãåºæ¥ãã®ã§ã
chef-test.json
ãç·¨éãã¾ãã
{ "run_list":[ "recipe[users]" ] }
$ bundle exec knife solo cook chef-test ..çç¥.. Converging 2 resources Recipe: users::default * group[deploy] action create - create group[deploy] * user[deploy] action create - create user user[deploy] Chef Client finished, 2 resources updated
ãã¾ãè¡ã£ãã£ã½ãæãã§ãã
確èªãã¦ã¿ã¾ãããã
$ ssh chef-test $ id deploy uid=1002(deploy) gid=999(deploy) groups=999(deploy) $ ls -al /home/deploy/ total 20 drwxr-xr-x 2 deploy deploy 4096 Aug 24 14:14 . drwxr-xr-x 5 root root 4096 Aug 24 14:14 .. -rw-r--r-- 1 deploy deploy 220 Mar 30 15:37 .bash_logout -rw-r--r-- 1 deploy deploy 3637 Mar 30 15:37 .bashrc -rw-r--r-- 1 deploy deploy 675 Mar 30 15:37 .profile
ã¡ããã¨ã¦ã¼ã¶ã¼ã追å ããã¾ããã
ã§ã¯ãã¤ãã§ã«å ¬ééµã®ç»é²ããã£ã¦ãã¾ãã¾ãããã
site-cookbooks/users/recipes/default.rb
ãç·¨éãã¾ãã
group 'deploy' do group_name 'deploy' gid 999 action :create end user 'deploy' do comment 'deploy user' group 'deploy' home '/home/deploy' shell '/bin/bash' supports :manage_home => true action :create end # 以ä¸ã追å directory "/home/deploy/.ssh/" do owner 'deploy' group 'deploy' mode 0755 end cookbook_file "/home/#{params[:name]}/.ssh/authorized_keys" do owner params[:name] mode 0600 source "#{params[:name]}.authorized_keys" end
site-cookbooks/users/files/default/deploy.authorized_keys
ã«å
¬ééµãæ¸ãããã¡ã¤ã«ãç¨æãã¾ããã
ã§ã¯ããä¸åchefã£ã¦ã¿ã¾ãã
$ bundle exec knife solo cook chef-test .. çç¥ .. Converging 4 resources Recipe: users::default * group[deploy] action create (up to date) * user[deploy] action create (up to date) * directory[/home/deploy/.ssh/] action create - create new directory /home/deploy/.ssh/ - change mode from '' to '0755' - change owner from '' to 'deploy' - change group from '' to 'admin' * file[/home/deploy/.ssh/authorized_keys] action create - create new file /home/deploy/.ssh/authorized_keys - update content in file /home/deploy/.ssh/authorized_keys from none to 4d65e9 --- /home/deploy/.ssh/authorized_keys 2013-08-24 14:31:27.907907024 +0000 +++ /tmp/.authorized_keys20130824-8101-ibsszv 2013-08-24 14:31:27.907907024 +0000 @@ -0,0 +1 @@ (å ¬ééµ) - change mode from '' to '0600' - change owner from '' to 'deploy' Chef Client finished, 2 resources updated
ãµã¼ãã«ãã°ã¤ã³ãã¦ç¢ºèªãã¦ã¿ã¾ãããã
å¤åã§ãã¦ãã¯ãã
ã¬ã·ãã§ãã£ã¦ãäºããªã½ã¼ã¹åãã
ããã¾ã§deploy
ã¦ã¼ã¶ã®è¨å®ã¯ã§ãã¾ãããã
ããããæ¬¡ãyagi
ã£ã¦ããã¦ã¼ã¶ã¼è¿½å ãã¦ããã¿ãããªè©±ã«ãªã£ãå ´åã
ã¡ããã¨DRYã«æ¸ãããã§ãããã
ãªã®ã§ãããã¤ãããªã½ã¼ã¹åãã¦ä½¿ãã¾ãããããã«ãã¦ã¿ã¾ãã
ä»åã¯Definitionã使ã£ã¦Resourceãå®ç¾©ãã¾ãã
site-cookbooks/users/definitions/create_user.rb
ã使ãã¾ãã
define :create_user, :group => 'admin' do user params[:name] do comment "#{params[:name]} user" group params[:group] home "/home/#{params[:name]}" shell '/bin/bash' supports :manage_home => true action :create end directory "/home/#{params[:name]}/.ssh/" do owner params[:name] group params[:group] mode 0755 end cookbook_file "/home/#{params[:name]}/.ssh/authorized_keys" do owner params[:name] mode 0600 source "#{params[:name]}.authorized_keys" end end
site-cookbooks/users/recipes/default.rb
ãç·¨éãã¾ãã
group 'deploy' do group_name 'deploy' gid 999 action :create end create_user 'deploy' do group 'deploy' end
ããã§ãåå®è¡ããã°OKã§ãã
- ãã¾ã
ã¤ãã§ã«ãè¤æ°ã®ã¦ã¼ã¶ãç»é²ã§ããããã«å¤ãã¦ã¿ã¾ãã
site-cookbooks/users/recipes/default.rb
ãç·¨éãã¾ãã
group 'deploy' do group_name 'deploy' gid 999 action :create end node['users'].each{|user| create_user user['name'] do group user['group'] # ã°ã«ã¼ãã¯å ã«ä½æãã¨ããªãããããªããã©ãããã¯ã¾ãä»åº¦ end }
nodes/chef-test.json
ãç·¨éãã¾ãã
{ "users": [ { "name": "yagi", "group": "deploy"}, { "name": "deploy", "group": "deploy"} ], "run_list":[ "recipe[users]" ] }
æå¾ã«ãdeploy
ã¦ã¼ã¶ã¼ã¨åãããã«
site-cookbooks/users/files/default/yagi.authorized_keys
ãä½ã£ã¦ããã¾ãã
ããã§åå®è¡ããã°ãyagi
ã¦ã¼ã¶ãåºæ¥ãã¯ãã§ãã
$ id yagi uid=1003(yagi) gid=999(deploy) groups=999(deploy)
次åã¯
sudoersãããã£ã¦ã¿ããã¨æãã¾ãã
æ¯åº¦ã®äºã§ãããã¨ã³ããªã¼ã®å
容ãé·ãã§ããããã
ã¡ã¢ãªã®ã§ãã容赦ä¸ããã»ã»ã»

å ¥éChef Solo - Infrastructure as Code
- ä½è : ä¼è¤ç´ä¹
- åºç社/ã¡ã¼ã«ã¼: ä¼è¤ç´ä¹
- çºå£²æ¥: 2013/03/11
- ã¡ãã£ã¢: Kindleç
- è³¼å ¥: 16人 ã¯ãªãã¯: 1,027å
- ãã®ååãå«ãããã° (15ä»¶) ãè¦ã
ï¼ï¼ï¼ï¼é¨ããã売ãã¦ããããã§ãããããã