【chef】knife-soloでchef-soloをリモート実行
今回はVagrantで構築したゲストOSに対してknife-soloを使ってchef-soloをリモート実行してみます
環境
◆ホストOS(RHEL6.7)
◆ゲストOS(CentOS6.7)
※1、Vagrantで仮想環境を構築
※2、内部IPアドレスは192.168.33.10
※3、ホストOS(ユーザ:root)からゲストOS(ユーザ:vagrant)へのSSHはパスワードなしでログインできる
必要なモジュールのインストール(ホストOS)
# gem install knife-solo # gem install berkshelf
「knife-solo」は作業用マシン上に用意したCookbookなどの設定ファイルを設定対象のマシンにコピーし、 設定対象のマシン上でchef-soloコマンドを実行する、という一連の作業を自動実行するツールです。
設定ファイルのコピーにはrsyncが、chef-soloコマンドの実行にはsshを使います。
「berkshelf」は定義ファイルに使うcookbookを定義しておけば、リポジトリから勝手に依存関係を解消 した上で落としてきてくれるツールのようです。
リポジトリ作成(ホストOS)
Vagrantfileがあるディレクトリ上にリポジトリを作成します
# cd /root/vagrant/centos67 # knife solo init . WARNING: No knife configuration file found Creating kitchen... Creating knife.rb in kitchen... Creating cupboards... Setting up Berkshelf... # ls -l 合計 32 -rw-r--r-- 1 root root 35 4月 26 09:37 2016 Berksfile -rw-r--r-- 1 root root 3080 4月 25 16:04 2016 Vagrantfile drwxr-xr-x 2 root root 4096 4月 26 09:37 2016 cookbooks drwxr-xr-x 2 root root 4096 4月 26 09:37 2016 data_bags drwxr-xr-x 2 root root 4096 4月 26 09:37 2016 environments drwxr-xr-x 2 root root 4096 4月 26 09:37 2016 nodes drwxr-xr-x 2 root root 4096 4月 26 09:37 2016 roles drwxr-xr-x 2 root root 4096 4月 26 09:37 2016 site-cookbooks
リポジトリ関連のファイルが生成されます
ゲストOSにChef Soloのインストール(ホストOS)
「knife solo bootstrap [ホスト名 or IPアドレス]」コマンドを実行します。
「knife solo bootstrap」コマンドは、knife solo prepareによるChefのインストールとknife solo cookによるカレントリポジトリのアップロード とchef-soloの実行を同時に実施してくれるコマンドとなります。
# knife solo bootstrap 192.168.33.10 Bootstrapping Chef... /root/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/net-ssh-2.9.4/lib/net/ssh/transport/session.rb:67:in `initialize': Object#timeout is deprecated, use Timeout.timeout instead. /root/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/net-ssh-2.9.4/lib/net/ssh/transport/session.rb:84:in `initialize': Object#timeout is deprecated, use Timeout.timeout instead. /root/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/net-ssh-2.9.4/lib/net/ssh/transport/session.rb:67:in `initialize': Object#timeout is deprecated, use Timeout.timeout instead. /root/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/net-ssh-2.9.4/lib/net/ssh/transport/session.rb:84:in `initialize': Object#timeout is deprecated, use Timeout.timeout instead. % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 19602 100 19602 0 0 18652 0 0:00:01 0:00:01 --:--:-- 67593 el 6 x86_64 Getting information for chef stable 12.9.38 for el... downloading https://omnitruck-direct.chef.io/stable/chef/metadata?v=12.9.38&p=el&pv=6&m=x86_64 to file /tmp/install.sh.2869/metadata.txt trying wget... sha1 2b859af3d6e99502b7a1d75671a4f629a224e9ad sha256 0aca8e46ff8ada7af09b0d65b6f7738eb7b25d269482000be1dee7aaba154011 url https://packages.chef.io/stable/el/6/chef-12.9.38-1.el6.x86_64.rpm version 12.9.38 downloaded metadata file looks valid... downloading https://packages.chef.io/stable/el/6/chef-12.9.38-1.el6.x86_64.rpm to file /tmp/install.sh.2869/chef-12.9.38-1.el6.x86_64.rpm trying wget... Comparing checksum with sha256sum... Installing chef 12.9.38 installing with rpm... 警告: /tmp/install.sh.2869/chef-12.9.38-1.el6.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY 準備中... ########################################### [100%] 1:chef ########################################### [100%] Thank you for installing Chef! Generating node config 'nodes/192.168.33.10.json'... Running Chef on 192.168.33.10... Installing Berkshelf cookbooks to 'cookbooks'... Resolving cookbook dependencies... Uploading the kitchen... /root/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/net-ssh-2.9.4/lib/net/ssh/transport/session.rb:67:in `initialize': Object#timeout is deprecated, use Timeout.timeout instead. /root/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/net-ssh-2.9.4/lib/net/ssh/transport/session.rb:84:in `initialize': Object#timeout is deprecated, use Timeout.timeout instead. /root/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/net-ssh-2.9.4/lib/net/ssh/transport/session.rb:67:in `initialize': Object#timeout is deprecated, use Timeout.timeout instead. /root/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/net-ssh-2.9.4/lib/net/ssh/transport/session.rb:84:in `initialize': Object#timeout is deprecated, use Timeout.timeout instead. WARNING: Local cookbook_path '/root/vagrant/centos67/cookbooks' does not exist Generating solo config... Running Chef: sudo chef-solo -c ~/chef-solo/solo.rb -j ~/chef-solo/dna.json Starting Chef Client, version 12.9.38 Installing Cookbook Gems: Compiling Cookbooks... Converging 0 resources Running handlers: Running handlers complete Chef Client finished, 0/0 resources updated in 02 seconds
ゲストOSにログインして確認
# ssh 192.168.33.10 Last login: Tue Apr 26 01:43:34 2016 from 10.0.2.2 [vagrant@localhost ~]$ che (tabキーを押して補完表示させてます) checkmodule checkpolicy chef-apply chef-client chef-shell chef-solo/
chef solo関連のプログラムが表示されています
クックブックの作成(ホストOS)
# cd /root/vagrant/centos67 # knife cookbook create dovecot -o site-cookbooks ** Creating cookbook dovecot in /root/vagrant/centos67/site-cookbooks ** Creating README for cookbook: dovecot ** Creating CHANGELOG for cookbook: dovecot ** Creating metadata for cookbook: dovecot
レシピの編集(ホストOS)
# vi /root/vagrant/centos67/site-cookbooks/dovecot/recipes/default.rb # # Cookbook Name:: dovecot # Recipe:: default # # Copyright 2016, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # package "dovecot" do action :install end
上記の3行を追加します。
上記はdovecotをインストールするレシピとなります。
ノードオブジェクト(ランリスト)の修正(ホストOS)
# vi /root/vagrant/centos67/nodes/192.168.33.10.json { "run_list": [ "recipe[dovecot]" ], "automatic": { "ipaddress": "192.168.33.10" } }
上記の1行を追加します。
上記を記述することにより「knife-solo」コマンド実行時にクックブックを明示的に指定する必要が無くなります。
knife-solo実行(ホストOS)
# cd /root/vagrant/centos67 # knife solo cook 192.168.33.10 Running Chef on 192.168.33.10... Checking Chef version... /root/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/net-ssh-2.9.4/lib/net/ssh/transport/session.rb:67:in `initialize': Object#timeout is deprecated, use Timeout.timeout instead. /root/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/net-ssh-2.9.4/lib/net/ssh/transport/session.rb:84:in `initialize': Object#timeout is deprecated, use Timeout.timeout instead. /root/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/net-ssh-2.9.4/lib/net/ssh/transport/session.rb:67:in `initialize': Object#timeout is deprecated, use Timeout.timeout instead. /root/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/net-ssh-2.9.4/lib/net/ssh/transport/session.rb:84:in `initialize': Object#timeout is deprecated, use Timeout.timeout instead. Installing Berkshelf cookbooks to 'cookbooks'... Resolving cookbook dependencies... Uploading the kitchen... WARNING: Local cookbook_path '/root/vagrant/centos67/cookbooks' does not exist Generating solo config... Running Chef: sudo chef-solo -c ~/chef-solo/solo.rb -j ~/chef-solo/dna.json Starting Chef Client, version 12.9.38 Installing Cookbook Gems: Compiling Cookbooks... Converging 1 resources Recipe: dovecot::default * yum_package[dovecot] action install - install version 2.0.9-19.el6_7.2 of package dovecot Running handlers: Running handlers complete Chef Client finished, 1/1 resources updated in 14 seconds
ゲストOSにdovecotがインストールされているか確認
# ssh 192.168.33.10 Last login: Tue Apr 26 02:02:51 2016 from 10.0.2.2 [vagrant@localhost ~]$ rpm -qa | grep dovecot dovecot-2.0.9-19.el6_7.2.x86_64 [vagrant@localhost ~]$
dovecotがインストールされています