fbpx

[和訳] 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!

新規CTA