knife zero でCentOSのプロビジョニング
対象
- クライアントOS Windows7
- プロビジョニング対象ホストOS CentOS 6.7
対象ホストにインストールするもの
- rbenv
- ruby_build::system
クライアントの設定
.ssh/config 設定
まずIPアドレスとかでなく名前でアクセスしたいので ~/.ssh/config を編集する。
~/.ssh の場所は C:\Users\hogeuser.ssh
Host centos
HostName 192.168.0.200
Port 22
User hogeuser
ホストの名前、IPアドレス、ユーザーなどは環境に合わせて適宜設定する。
knife.rb 準備
あらかじめknife.rb を以下の内容で準備する。
どこかで「cookbook_pathを複数設定できない」とか見た気がするが、今のバージョンでは大丈夫っぽい。
ocal_mode true
chef_repo_path File.expand_path('../' , __FILE__)
cookbook_path [
File.expand_path('../cookbooks' , __FILE__),
File.expand_path('../site-cookbooks' , __FILE__)
]
knife[:ssh_attribute] = "centos"
knife[:use_sudo] = true
knife[:automatic_attribute_whitelist] = %w[
fqdn
os
os_version
hostname
ipaddress
roles
recipes
ipaddress
platform
platform_version
cloud
cloud_v2
chef_packages
]
対象ホストの準備
knife zero bootstrap コマンドを使ってプロビジョニング対象ホストにchef-clientをインストールさせる。
PS C:...\> knife zero bootstrap centos --ssh-user hogeuser --sudo
レシピ作成
Berksfile に以下を記述
source "https://supermarket.chef.io"
cookbook 'ruby_rbenv', :git => 'https://github.com/chef-rbenv/chef-rbenv.git'
Berksレシピ取込
PS C:...\> berks vendor cookbooks
他、自前のレシピが必要ならsite-cookbooksに作成しておく。
runlist、attribute設定
node.jsonを修正してrunlistなどを設定する。
runlist
"run_list": [
"recipe[ruby_build]",
"recipe[ruby_rbenv::system]"
]
プロビジョニング 実行
いよいよ実行
PS C:...\> knife zero converge 'name:centos.example.com' --attribute ipaddress --ssh-user hogeuser --sudo
その他
本当は system globalに ruby 2.3.1をインストールした状態にしたかったのだけど、node.jsonの書き方を間違ったのかできなかった。