Chef cheat sheet: Difference between revisions

From misc notes
Jump to navigation Jump to search
 
(41 intermediate revisions by the same user not shown)
Line 1: Line 1:
Opscode chef はまだまだ OSS の初期段階で、パワーユーザの時代であるらしい。hack, patch, push 的な感じっぽい。なのでお作法に則って、 Let's enjoy!!!
Opscode chef はまだまだ OSS の初期段階で、パワーユーザの時代であるらしい。hack, patch, push 的な感じっぽい。十分に使い物になるレベルにはあるし、使えばたくさん良いことがある。なのでお作法に則って、 Let's enjoy!!!


= メモ =
= メモ =
Line 17: Line 17:
  [http://acrmp.github.com/foodcritic/ Foodcritic - A lint tool for your Opscode Chef cookbooks]
  [http://acrmp.github.com/foodcritic/ Foodcritic - A lint tool for your Opscode Chef cookbooks]
  [https://github.com/etsy/foodcritic-rules Etsy's foodcritic rules]
  [https://github.com/etsy/foodcritic-rules Etsy's foodcritic rules]
ここで定義されているスタイルに合わせる。
ここで定義されているスタイルに合わせる。(最近 FC001 が違うという議論もあって面白い ;)
 
[http://wiki.opscode.com/display/chef/Opscode+Community+Summit+2 Opscode Community Summit 2 Session Documentation]
コミュニティサミットのドキュメント いろいろ参考になるかも。


== 導入 ==
== 導入 ==
Line 25: Line 28:


=== Workstation ===
=== Workstation ===
Workstation は事実上 gem で手管理のほうが関連するツールを考えるといいかも
Workstation は事実上 gem で手管理のほうが関連するツール(knife-ec2やFoodcritic)を考えるといいかも


  [http://wiki.opscode.com/display/chef/Workstation+Setup+for+Debian+and+Ubuntu Workstation Setup for Debian and Ubuntu]
  [http://wiki.opscode.com/display/chef/Workstation+Setup+for+Debian+and+Ubuntu Workstation Setup for Debian and Ubuntu]
Line 43: Line 46:
</syntaxhighlight>
</syntaxhighlight>


=== Client ===
=== Node ===
最近は omnibus install を推奨らしい
最近は omnibus install を推奨らしい


  [http://wiki.opscode.com/display/chef/Installing+Omnibus+Chef+Client+on+Linux+and+Mac Omnibus Installation]
  [http://wiki.opscode.com/display/chef/Installing+Omnibus+Chef+Client+on+Linux+and+Mac Omnibus Installation]


  sudo true && curl -L http://opscode.com/chef/install.sh | sudo bash
  <del>sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash</del>


/* 非推奨 : opscode の リポジトリ の配下なら
upgrade も ↑ で OK


  [http://wiki.opscode.com/display/chef/Installing+Chef+Client+on+Ubuntu+or+Debian Installing Chef Client on Ubuntu or Debian]
  <del>sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash -s -- -v 10.12.0</del>


<syntaxhighlight>
とか バージョン指定も可能。(今は 10.16.2)
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
</syntaxhighlight>


knife bootstrap で distro を ubuntu10.04-apt 的に指定するのが良い */
(2015/06/25 追記: 最近は curl | sudo bash はさすがにマズイという風潮が... なので公式サイトの表面からは消えてるようです。[https://downloads.chef.io/chef-client/])


== my recipes ==
== my recipes ==
Line 67: Line 65:
  [https://github.com/nxhack/chef nxhack / chef My recipes (opscode chef cookbooks) : Bootstrap - Configuration - Orchestration]
  [https://github.com/nxhack/chef nxhack / chef My recipes (opscode chef cookbooks) : Bootstrap - Configuration - Orchestration]


★ 料理のコツ ★
== ★ 料理のコツ ★ ==
 
*一度だけ処理するとか、纏めて処理するとかは、action :nothing と notifies をうまく組み合わせると出来る
 
*cookbook_file とか template とか file で create_if_missing の組み合わせと、さっきの action :nothing と notifies でいろいろ出来そう


一度だけ処理するとか、纏めて処理するとかは、action :nothing notifies をうまく組み合わせると出来る
*cookbook_file template は 出来た対象ファイルの内容をチェックして、同じなら処理しないという挙動になる。また file は content の組み合わせでは、 backup は取ってくれるが、内容のチェックはしてくれないようだ。


cookbook_file とか template とか file で create_if_missing の組み合わせと、さっきの action :nothing と notifies でいろいろ出来そう
*execute, script, ruby_block とかの Resource に付ける名前は、同じ名前(重なる名前)は付けてはいけない


cookbook_file と template は 出来た対象ファイルの内容をチェックして、同じなら処理しないという挙動になる。また file は content の組み合わせでは、 backup は取ってくれるが、内容のチェックはしてくれないようだ。
*secure_password を使う場合は、cookbook openssl を upload して recipe['openssl'] を run_list に追加する事


== knife-ec2 ==
== knife-ec2 ==
Line 79: Line 81:
knife.rb
knife.rb
<pre>
<pre>
# EC2:                                                                                                                    
# EC2:
knife[:aws_access_key_id]    = "---"
knife[:aws_access_key_id]    = "---"
knife[:aws_secret_access_key] = "---"
knife[:aws_secret_access_key] = "---"
knife[:flavor]                = "t1.micro"
knife[:flavor]                = "t1.micro"
knife[:image]                = "ami-d5e54dbc"
knife[:image]                = "ami-c7b202ae"
knife[:aws_ssh_key_id]        = "EC2_Key_Pairs_Name"
knife[:aws_ssh_key_id]        = "EC2_Key_Pairs_Name"
</pre>
</pre>
Line 106: Line 108:
knife ec2 server create -N node01.egrep.jp -x ubuntu -r "role[node01],role[ec2-common]" -Z us-east-1d
knife ec2 server create -N node01.egrep.jp -x ubuntu -r "role[node01],role[ec2-common]" -Z us-east-1d
</pre>
</pre>
<pre>
knife ec2 server create -N node01.egrep.jp -x ubuntu -r "role[node01],role[ec2-common]" -Z us-east-1d --bootstrap-version 10.12.0
</pre>


[http://wiki.opscode.com/display/chef/Custom+Knife+Bootstrap+Script Custom Knife Bootstrap Script]
[http://wiki.opscode.com/display/chef/Custom+Knife+Bootstrap+Script Custom Knife Bootstrap Script]
Line 132: Line 139:
Bootstrap => Configuration => Orchestration の区別をして考える事が大事
Bootstrap => Configuration => Orchestration の区別をして考える事が大事


== role ==
== knife role ==
<pre>
<pre>
knife role from file ec2-common.json
knife role from file ec2-common.json
Line 142: Line 149:
(-Fj 使わない)
(-Fj 使わない)


== node ==
== knife node ==
<pre>
<pre>
knife node run_list add node01.egrep.jp 'role[node01],role[ec2-common]'
knife node run_list add node01.egrep.jp 'role[node01],role[ec2-common]'
</pre>
</pre>


== search ==
== knife search ==
<pre>
<pre>
knife search node '*:*' -a lsb.codename
knife search node '*:*' -a lsb.codename
Line 162: Line 169:
  [http://wiki.opscode.com/display/chef/Recipes#Recipes-CommonAutomaticAttributes Common Automatic Attributes]
  [http://wiki.opscode.com/display/chef/Recipes#Recipes-CommonAutomaticAttributes Common Automatic Attributes]


== (WP CLI) ==
== knife-essentials ==
[https://github.com/jkeiser/knife-essentials Knife Essentials]
これは便利なので入れる方がよいそうです。
 
knife diff | fgrep diff
 
== berkshelf ==
[http://berkshelf.com/ Berkshelf - Manage a Cookbook or an Application's Cookbook dependencies]
便利っぽい
 
== spiceweasel ==
[http://wiki.opscode.com/display/chef/Spiceweasel Spiceweasel]
便利っぽい
 
== cookbook motd-tail ==
[https://github.com/opscode-cookbooks/motd-tail Updates motd.tail with Chef Roles]
node に login したときに、role を表示させる。
 
== WP CLI (WordPress Command Line Interface) ==
WordPress の configration にコレは便利そう。(テスト中)
 
  [https://github.com/wp-cli/wp-cli A command line interface for WordPress]
  [https://github.com/wp-cli/wp-cli A command line interface for WordPress]
wp-cli の chef recipe をナンチャッテで書いてみた。(推敲中)
[https://github.com/nxhack/chef/tree/master/cookbooks/conf-WordPress-cli https://github.com/nxhack/chef/tree/master/cookbooks/conf-WordPress-cli]


<pre>
<pre>
wp plugin install APC (!!! mv ./object-cache.php ../../ )
wp core install --url='http://www.example.com/blog' --title='MY SITE' --admin_email='admin@example.com' --admin_password='pass'
wp plugin install WPtouch
 
wp plugin install 001-Prime-Strategy-Translate-Accelerator
wp plugin install apc
wp plugin install BackWPup
wp plugin install 001-prime-strategy-translate-accelerator
wp plugin install Easy-FancyBox
wp plugin install backwpup
wp plugin install PuSHPress
## wp plugin install db-cache-reloaded-fix
wp plugin install SyntaxHighlighter (??? SyntaxHighlighter-Evolved )
wp plugin install easy-fancybox
wp plugin install TinyMCE-Advanced
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
 
wp plugin activate akismet
wp plugin activate wp-multibyte-patch
## wp plugin activate apc  (!!! mv ./object-cache.php ../../ )
wp plugin activate 001-prime-strategy-translate-accelerator
wp plugin activate backwpup
## wp plugin activate db-cache-reloaded-fix
wp plugin activate easy-fancybox
wp plugin activate pushpress
wp plugin activate syntaxhighlighter
wp plugin activate tinymce-advanced
wp plugin activate wp-crontrol
wp plugin activate wp-page-numbers
wp plugin activate wp-social-bookmarking-Light
wp plugin activate wptouch
</pre>
</pre>

Latest revision as of 17:15, 12 March 2019

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

ここで定義されているスタイルに合わせる。(最近 FC001 が違うという議論もあって面白い ;)

Opscode Community Summit 2 Session Documentation

コミュニティサミットのドキュメント いろいろ参考になるかも。

導入

Server

Hosted Chef Server の Free 版で 5 node まで使えるので、これで勉強する。

Hosted Chef

Workstation

Workstation は事実上 gem で手管理のほうが関連するツール(knife-ec2やFoodcritic)を考えるといいかも

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

Node

最近は omnibus install を推奨らしい

Omnibus Installation
sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash

upgrade も ↑ で OK

sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash -s -- -v 10.12.0

とか バージョン指定も可能。(今は 10.16.2)

(2015/06/25 追記: 最近は curl | sudo bash はさすがにマズイという風潮が... なので公式サイトの表面からは消えてるようです。[1])

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 は取ってくれるが、内容のチェックはしてくれないようだ。
  • execute, script, ruby_block とかの Resource に付ける名前は、同じ名前(重なる名前)は付けてはいけない
  • secure_password を使う場合は、cookbook openssl を upload して recipe['openssl'] を run_list に追加する事

knife-ec2

knife.rb

# EC2:
knife[:aws_access_key_id]     = "---"
knife[:aws_secret_access_key] = "---"
knife[:flavor]                = "t1.micro"
knife[:image]                 = "ami-c7b202ae"
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
knife ec2 server create -N node01.egrep.jp -x ubuntu -r "role[node01],role[ec2-common]" -Z us-east-1d --bootstrap-version 10.12.0


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 の区別をして考える事が大事

knife role

knife role from file ec2-common.json
knife role show ec2-common -F json

(-Fj 使わない)

knife node

knife node run_list add node01.egrep.jp 'role[node01],role[ec2-common]'

knife 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

knife-essentials

Knife Essentials

これは便利なので入れる方がよいそうです。

knife diff | fgrep diff

berkshelf

Berkshelf - Manage a Cookbook or an Application's Cookbook dependencies

便利っぽい

spiceweasel

Spiceweasel

便利っぽい

cookbook motd-tail

Updates motd.tail with Chef Roles

node に login したときに、role を表示させる。

WP CLI (WordPress Command Line Interface)

WordPress の configration にコレは便利そう。(テスト中)

A command line interface for WordPress

wp-cli の chef recipe をナンチャッテで書いてみた。(推敲中)

https://github.com/nxhack/chef/tree/master/cookbooks/conf-WordPress-cli
wp core install --url='http://www.example.com/blog' --title='MY SITE' --admin_email='admin@example.com' --admin_password='pass'

wp plugin install apc
wp plugin install 001-prime-strategy-translate-accelerator
wp plugin install backwpup
## wp plugin install db-cache-reloaded-fix
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

wp plugin activate akismet
wp plugin activate wp-multibyte-patch
## wp plugin activate apc  (!!! mv ./object-cache.php ../../ )
wp plugin activate 001-prime-strategy-translate-accelerator
wp plugin activate backwpup
## wp plugin activate db-cache-reloaded-fix
wp plugin activate easy-fancybox
wp plugin activate pushpress
wp plugin activate syntaxhighlighter
wp plugin activate tinymce-advanced
wp plugin activate wp-crontrol
wp plugin activate wp-page-numbers
wp plugin activate wp-social-bookmarking-Light
wp plugin activate wptouch