Still life

web系エンジニャー @yui_tang の備忘録等々

chef-dkの便利さ

久しぶりに仕事の案件用で新しい環境を構築する為にchef環境を構築中、
各種gemをbundle installしているところで
"dep-selector-libgecode"のインストールにハマる。

Windows(RubyInstaller) + berkshelf 3.0 をインストール(dep-selector-libgecode問題) - Qiita

恐らく原因はこれと同じ。
こんなことに時間を使うのも勿体無いし、最新版は使いたいしということで回避策を検討していたところで
以下を見つけた。今更感ある。

Download Chef Development Kit | Chef

実行用のRubyをはじめ、必要なgem等々を全てパッケージ化している為
環境を汚さず簡単に始められる。
Redhat系ならインストールは以下のようにrpmでインストール。

sudo rpm -ivh https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chefdk-0.2.0-2.el6.x86_64.rpm

Macならパッケージを落として来てGUIインストーラでOK。

ChefDK contains:

An early version of a brand new command-line tool, chef, that aims to streamline Chef workflow, starting with new generators.
The well-known cookbook dependency manager Berkshelf 3.0.
The Test Kitchen integration testing framework.
ChefSpec, which makes unit testing cookbooks a breeze.
Foodcritic, a linting tool for doing static code analysis on cookbooks.
All of the Chef tools you're already familiar with: Chef Client, Knife, Ohai and Chef Zero.

一通りパッケージは入っているようだけど、よく見たらknife-soloがない!!

はい、ということでインストールするのですが、
インストール方法は以下。

chef gem install knife-solo

簡単。
chef-dkはインストールするとchefコマンドが追加される。
(/opt/chefdk/bin/chefが実体でインストール時に勝手にPATHに追加される)
で、chefコマンドにはbundleとかgitの様な便利なサブコマンドが用意されている。

$ chef -h
Usage:
chef -h/--help
chef -v/--version
chef command [arguments...] [options...]


Available Commands:
exec Runs the command in context of the embedded ruby
gem Runs the `gem` command in context of the embedded ruby
generate Generate a new app, cookbook, or component
shell-init Initialize your shell to use ChefDK as your primary ruby
verify Test the embedded ChefDK applications

この中のchef gemコマンドを使用したのが上記のknife-soloのインストールということ。

追加で入れたgemもchefコマンドで入れればパッケージ内で管理されるので、要らなくなったらrpm -eでパッケージ毎アンインストールすれば環境も綺麗なままです。

注意点としては、既にグローバルにchef等をインストールしてある環境にchef-dkを入れると上手くいかないとのこと。

今後chefを使うならこれがスタンダードで良いのでは?と思います。(小並感)