Chef cheat sheet
Opscode chef はまだまだ OSS の初期段階で、パワーユーザの時代であるらしい。hack, patch, push 的な感じっぽい。なのでお作法に則って、 Let's enjoy!!!
メモ
information
自分で漁ること
Chef Wiki @tily さんの日本語訳 Opscode Mailing Lists Opscode github Opscode Open Source Ticket Tracking
あとは、公開されている cookbook で何とかなるわけでは無く、それを参考にして自分でバンバン書くのが吉
cookbook に汎用性を持たせようとする動きはあるらしいが、現状では無理っぽい。というか、使うことによってベストプラクティスを模索している段階かも。
Foodcritic - A lint tool for your Opscode Chef cookbooks Etsy's foodcritic rules
ここで定義されているスタイルに合わせる。
導入
Server
Hosted Chef Server の Free 版で 5 node まで使えるので、これで勉強する。
Hosted Chef
Workstation
Workstation は事実上 gem で手管理のほうが関連するツールを考えるといいかも
Workstation Setup for Debian and Ubuntu
しかも ruby 1.9.2 以上のほうがよさげ
Next Generation Ubuntu Ruby Packages
sudo apt-add-repository ppa:brightbox/ruby-ng
sudo aptitude update
sudo aptitude install ruby ruby-dev libopenssl-ruby rdoc ri irb build-essential wget ssl-cert curl
sudo gem install chef --no-ri --no-rdoc
sudo gem install knife-ec2 --no-ri --no-rdoc
sudo gem install foodcritic --no-ri --no-rdoc
sudo aptitude -y install git-core
Client
最近は omnibus install を推奨らしい
Omnibus Installation
sudo true && curl -L http://opscode.com/chef/install.sh | sudo bash
/* 非推奨 : opscode の リポジトリ の配下なら
Installing Chef Client on Ubuntu or Debian
echo 'deb http://apt.opscode.com/ lucid-0.10 main' | sudo tee /etc/apt/sources.list.d/opscode.list
wget -qO - http://apt.opscode.com/packages@opscode.com.gpg.key | sudo apt-key add -
sudo aptitude update
sudo aptitude -y install chef
knife bootstrap で distro を ubuntu10.04-apt 的に指定するのが良い */
my recipes
普段やっている設定を cookbook にまとめ中
nxhack / chef My recipes (opscode chef cookbooks) : Bootstrap - Configuration - Orchestration
★ 料理のコツ ★
一度だけ処理するとか、纏めて処理するとかは、action :nothing と notifies をうまく組み合わせると出来る
cookbook_file とか template とか file で create_if_missing の組み合わせと、さっきの action :nothing と notifies でいろいろ出来そう
cookbook_file と template は 出来た対象ファイルの内容をチェックして、同じなら処理しないという挙動になる。また file は content の組み合わせでは、 backup は取ってくれるが、内容のチェックはしてくれないようだ。
knife-ec2
knife.rb
# EC2: knife[:aws_access_key_id] = "---" knife[:aws_secret_access_key] = "---" knife[:flavor] = "t1.micro" knife[:image] = "ami-d5e54dbc" knife[:aws_ssh_key_id] = "EC2_Key_Pairs_Name"
ssh-agent
eval `ssh-agent` ssh-add ~/.ssh/ssh_key.pem
(残っている ssh-agent への attach)
export SSH_AGENT_PID=`pgrep ssh-agent` export SSH_AUTH_SOCK=`ls /tmp/ssh-*/agent.*`
knife ec2 server create -N node01.egrep.jp -x ubuntu
knife ec2 server create -N node01.egrep.jp -x ubuntu -r "role[node01],role[ec2-common]" -Z us-east-1d
Custom Knife Bootstrap Script distro で指定するのもあり。(今は、OmniBus Installer を使った標準のままの chef-full.erb でやるようがよさげ)
knife ec2 server create -N node01.egrep.jp -x ubuntu -d ubuntu10.04-omnibus-ec2
knife ec2 server create -N node01.egrep.jp -x ubuntu -r "role[node01],role[ec2-common]" -d ubuntu10.04-omnibus-ec2 -Z us-east-1d
node name を指定して起動したインスタンスを停止する際に、chef-server に自動登録した node と client も同時に消したい場合
knife ec2 server delete i-xxxxxxxx -N node01.egrep.jp -P
knife bootstrap
すでに稼働しているインスタンスに opscode の リポジトリから chef client を node 名を指定してインストールする。
knife bootstrap IPADDRESS -N node01.egrep.jp -i ~/.ssh/ssh_key.pem -x ubuntu --sudo -d chef-full
Custom Knife Bootstrap Script
Bootstrap => Configuration => Orchestration の区別をして考える事が大事
role
knife role from file ec2-common.json
knife role show ec2-common -F json
(-Fj 使わない)
node
knife node run_list add node01.egrep.jp 'role[node01],role[ec2-common]'
search
knife search node '*:*' -a lsb.codename
chef-client
run_list を指定して起動する場合
chef-client -o 'role[node01],role[ec2-common]'
Recipe
node object
Common Automatic Attributes
(WP CLI)
WordPress の configration にコレは便利そう。(テスト中)
A command line interface for WordPress wp-cli
wp plugin install APC (!!! mv ./object-cache.php ../../ ) wp plugin install 001-Prime-Strategy-Translate-Accelerator wp plugin install BackWPup wp plugin install Easy-FancyBox wp plugin install PuSHPress wp plugin install SyntaxHighlighter wp plugin install TinyMCE-Advanced wp plugin install WP-Crontrol wp plugin install WP-Page-Numbers wp plugin install WP-Social-Bookmarking-Light wp plugin install WPtouch