とりあえず依存関係の解決にだけBerkshelf使ってみた。
自分で作ったcookbook(この例だと site-cookbooks/base)をどう管理するかがまだ整理できていない。完全にプロジェクト間で共用しているなら別gitレポジトリでもいいんだけど、プロジェクト個別のcookbookなんかは中に収めておきたい。
素直に、共有するcookbookはgitで取ってきてレポジトリには入れず、個別のは今まで通り knife cookbook create してレポジトリ内に直接突っ込むで良いのかな。
ゴール
- apt-get updateする
- 管理者ユーザを作成してsudoできるようにする
レポジトリ作成
knife solo init repo
cd repocat <
.gitignore
/vendor/bundle/
/vendor/cookbooks/
/.bundle/
/bin/
EOFgit init
git add .
git commit -m 'initialized chef repository'bundle init
cat <
Gemfile
source 'https://rubygems.org'gem 'knife-solo'
gem 'berkshelf'
EOFbundle install --path vendor/bundle --binstubs
git add Gemfile Gemfile.lock
git commit -m 'installed knife-solo, berkshelf'
BerkshelfでCookbook取得
cat <Berksfile
site :opscodecookbook 'apt'
cookbook 'users'
cookbook 'sudo'
EOF
bin/berks install --path vendor/cookbooksgit add Berksfile Berksfile.lock
git commit -m 'Import apt/users/sudo cookbooks'cat <
solo.rb
file_cache_path "/tmp/chef-solo"
data_bag_path "/tmp/chef-solo/data_bags"
encrypted_data_bag_secret "/tmp/chef-solo/data_bag_key"
cookbook_path [ "/tmp/chef-solo/site-cookbooks",
"/tmp/chef-solo/vendor/cookbooks" ]
role_path "/tmp/chef-solo/roles"
EOF
ノード追加
knife solo prepare vag
クックブック base 作成
bin/knife cookbook create base -o site-cookbookscat <
> site-cookbooks/base/recipes/default.rb include_recipe 'apt'
include_recipe 'users::sysadmins'
node.override['authorization']['sudo']['passwordless'] = true
include_recipe 'sudo'EOF
cat <
> site-cookbooks/base/metadata.rb
depends 'apt'
depends 'users'
depends 'sudo'
EOF
ロール web 作成
cat <roles/web.rb
name "web"
description "Web Server"
run_list(
"recipe[base]"
)
EOF
ノードにロール web を紐付け
cat <nodes/vag.json
{"run_list": ["role[web]"]}
EOF
管理者ユーザ miku をdata_bagsに追加
mkdir data_bags/users
cat <data_bags/users/miku.json
{
"id": "miku",
"uid": "10000",
"comment": "HATSUNE Miku",
"ssh_keys": [
"ssh-rsa AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= miku@client.example.local",
"ssh-rsa AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= miku@notepad.example.local"
],
"groups": [ "sysadmin" ],
"shell": "/usr/bin/zsh"
}
EOF
適用!
git add .
git commit -m 'Implemented base recipe'
knife solo cook vag