[和訳] Chef Supermarketを使おう: ガイドツアー #getchef
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は Using Chef Supermarket: A Guided Tour (2015/03/16) の和訳です。
SupermarketはChefコミュニティの中央に位置する、Cookbook、ツール、プラグインの共有を行う情報センターです。Chefコミュニティメンバーが、コミュニティCookbookをダウンロードしたり、Cookbookの共同作業を行ったり、他のコミュニティメンバーに使ってもらうためにCookbookをアップロードしたりする場所です。また、Chefのエコシステムを改善するためのツールについての情報共有を行う場所でもあります。Supermarketは、個人または企業でContributor License Agreements (CLA's)に署名することで、Chefのオープンソースプロジェクトに参加しやすくするようにしてあります。詳しい情報はSupermarketのアナウンス記事を参照してください。
現在、Supermarketには2つのバージョンがあります。
パブリックSupermarket
Chef Supermarketのサイトです。これはオープンソースプロジェクトなので、GitHubレポジトリからダウンロードしたり、開発に参加することもできます。
プライベートSupermarket
独自のインフラ上でプライベートに動作させられるSupermarketです。このガイドではSupermarketのプライベートバージョンは説明しませんが、同じ原理の多くが適用できます。プライベートSupermarketのガイドにご期待ください!
Supermarketを始めよう
Supermarketを使うためにいくつか必要なものがあります。
Knife
SupermarketとやりとりするにはKnifeが必要になります。
Knife (やその他SupermarketとChefの両方に必要な多くのツール)を最も簡単にインストールするにはChef Development Kitをインストールするとよいでしょう。
knife.rbファイルを設定してください。
このガイドでは、KnifeとSupermarketを使う基礎を説明していきます。各種コマンドやオプションの詳しい情報は、knife cookbook siteを参照してください。
Supermarketを閲覧する
これで、Supermarketサイトに存在するコミュニティCookbookを閲覧するいくつかの方法が取れるようになりました。
リスト
Supermarketから利用できるすべてのコミュニティCookbookのリストを取得するには、次のように実行します。
$ knife cookbook site list
次のような大量の出力が得られるはずです。
1password minecraft
301 mineos
7-zip minidlna
AWS_see_spots_run minitest
AmazonEC2Tag minitest-handler
Appfirst-Cookbook mirage
CVE-2014-3566-poodle mlocate
CVE-2015-0235 mod_security
Obfsproxy mod_security2
R modcloth-hubot
Rstats modcloth-nad
SysinternalsBginfo modman
VRTSralus modules
abiquo mogilefs
acadock mongodb
accel-ppp mongodb-10gen
accounts mongodb-agents
accumulator monit
[などなど]
検索
特定のCookbookを見つけるには? 2015年2月に最も多くダウンロードされたCookbookはmysql Cookbookでした。もしこのCookbookを検索したいなら、次のようなコマンドを使えばよいでしょう。
$ knife cookbook site search mysql
次のような結果が得られます。
mysql:
cookbook: http://cookbooks.opscode.com/api/v1/cookbooks/mysql
cookbook_description: Provides mysql_service, mysql_config, and mysql_client resources
cookbook_maintainer: chef
cookbook_name: mysql
mysql-apt-config:
cookbook: http://cookbooks.opscode.com/api/v1/cookbooks/mysql-apt-config
cookbook_description: Installs/Configures mysql-apt-config
cookbook_maintainer: tata
cookbook_name: mysql-apt-config
mysql-multi:
cookbook: http://cookbooks.opscode.com/api/v1/cookbooks/mysql-multi
cookbook_description: MySQL replication wrapper cookbook
cookbook_maintainer: rackops
cookbook_name: mysql-multi
最初のmysql Cookbookに注目してみましょう。
表示
特定のCookbookに関する詳しい情報を表示したいなら、次のように実行します。
$ knife cookbook site show mysql
次のような結果が得られます。
average_rating:
category: Other
created_at: 2009-10-28T19:16:54.000Z
deprecated: false
description: Provides mysql_service, mysql_config, and mysql_client resources
external_url: http://github.com/opscode-cookbooks/mysql
foodcritic_failure: true
issues_url:
latest_version: http://cookbooks.opscode.com/api/v1/cookbooks/mysql/versions/6.0.15
maintainer: chef
metrics:
downloads:
total: 79275449
versions:
0.10.0: 927561
0.15.0: 927536
0.20.0: 927321
0.21.0: 927298
0.21.1: 927311
0.21.2: 927424
0.21.3: 927441
0.21.5: 927326
0.22.0: 927297
0.23.0: 927353
0.23.1: 927862
0.24.0: 927316
Cookbookの特定のバージョンを詳しく見たいなら、次のようにコマンドにバージョンを含めます。
$ knife cookbook site show mysql 0.10.0
次のような結果が得られます。
average_rating:
cookbook: http://cookbooks.opscode.com/api/v1/cookbooks/mysql
file: http://cookbooks.opscode.com/api/v1/cookbooks/mysql/versions/0.10.0/download
license: Apache 2.0
tarball_file_size: 7010
version: 0.10.0
Supermarketからダウンロード、インストールする
コミュニティサイトからCookbookをダウンロード、インストールする準備はできましたか?
ダウンロード
Cookbookをtar.gzアーカイブとしてダウンロードし、カレントワーキングディレクトリに置くには、downloadコマンドを使います。
$ knife cookbook site download mysql
インストール
CookbookのインストールはCookbookダウンロードと似ていますが、Cookbookをtar.gzとして保存するのではなく、Cookbookを展開し、オリジナルのCookbookに追従できるようにgitブランチを設定します。Stack Overflowのすばらしい説明を見てください。
また、依存関係を解決し、依存するCookbookについて新しいブランチを作成します。
$ knife cookbook site install mysql
注意: 「ERROR: IOError: Cannot open or read /Users/nshamrell/chef-repo/cookbooks/mysql/metadata.rb」というエラーが出たら、使っているKnifeのバージョンを確認してください。
$ knife -v
Chef: 12.0.2より低いなら、Knifeのバージョンを更新する必要があります。しかし、もしChef DKとrvmを使っているなら、次のようにしてみてください。
$ rvm use system
そして再実行してください。
$ knife cookbook site install mysql
Supermarketにアップロードする
では、CookbookをSupermarketにアップロードしましょう。もし独自のCookbookを持っているなら、是非そうしてください! もしSupermarketにアップロードの練習のためにとても基本的な独自のCookbookを作るというガイダンスが必要なら、Supermarketドキュメントの「Create Cookbook」を見てください。
共有
SupermarketにCookbookをアップロードする前に、少し準備する必要があります。まず、knife.rb設定ファイルを見てください。例えば.chef/knife.rbです。
次のような行になっている必要があります。もしまだ存在していなければ、追加してください。
# Supermarketにログインするためのログイン名に置き換えてください。
node_name "nellshamrell"
# client.pemファイルへのパスを定義してください。
# Chefアカウントにサインアップしたときに生成されたキーです。
client_key "#{ENV['HOME']}/.chef/client.pem"
# アップロードするCookbookを置いてあるディレクトリです。
cookbook_path [ '/Users/nshamrell/Projects/my_chef_repo/cookbooks' ]
また「source_url」と「issues_url」の両方をCookbookのmetadataに追加することを推奨します。SupermarketにCookbookが表示された際、GitHubレポジトリのようなCookbookのソースへのリンクとGitHubイシューのようなイシュートラッカーも表示されます。
では、次のコマンドでSupermarketにCookbookをアップロードしましょう!
$ knife cookbook site share "my_apache2_cookbook" "Web Servers"
ここではCookbookが属するSupermarketカテゴリとして「Web Servers」を定義しています。使用可能な他のカテゴリは「Databases」、「Process Management」、「Monitoring & Trending」、「Programming Languages」、「Package Management」、「Applications」、「Networking」、「Operating Systems & Virtualization」、「Utilities」、「Other」です。
stove
stoveはCookbookを共有するためのもう一つのツールです。詳しい情報はGitHubのプロジェクトページを見てください。
非共有
SupermarketからCookbookを非共有する必要になってしまったら、「unshare」コマンドを使います。
$ knife cookbook site unshare my_apache2_cookbook
これはSupermarketサイトからCookbookを削除します。
もし、
ERROR: Invalid Redirect: DELETE request was redirected from https://supermarket.getchef.com/api/v1/cookbooks/my_apache2_cookbook to https://supermarket.chef.io/api/v1/cookbooks/my_apache2_cookbook. Only GET and HEAD support redirects.
Change your server location in knife.rb to the server's FQDN to avoid unwanted redirections.
このようなエラーが出てしまったら、Chefバージョンを12.1.1以上にアップグレードする必要があります。Chef ClientダウンロードサイドからOSに合ったものをダウンロード、インストールしてください。
詳しくはSupermarketドキュメントを参照してください。
これでChef Supermarketの基本を身につけることができました! Happy cooking!