0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ChefのCookbookをChef localmodeで実行する手順

Last updated at Posted at 2018-05-15

chef-clientのみで、ChefのCookbookを実行する Chef localmodeを使ってみます。

解決したい課題

Chefを使うにはChef Serverが必要だと思われがちですが、ChefのCookbookはサーバレスでも実行可能であり、その実行形態をChef localmodeといいます。

Chef localmodeは、Cookbookを実行したい環境に、Chef Clientを導入するだけで使えるので、Cookbookを開発したり、Chef Serverのない環境にCookbookを持ち込んで実行したいときに気軽に使えて便利です。

Chef Clientを導入してから、実際にChef localmodeでCookbookを実行するまでの流れをまとめておきます。

Chef localmodeの使い方

1. Chef Clientを導入する

それぞれのOSにあったChef Clientをダウンロードし、インストールしてください。
Chef Download

2. Chef Repositoryを作成する

まず、Cookbook開発のディレクトリであるところのChef Repositoryを作ります。
最低限、chef-repoディレクトリとその下にcookbooksディレクトリがあればOKです。

$ mkdir chef-repo
$ mkdir chef-repo/cookbooks

Chef DKがあれば、chef generate repo local-repo というコマンドでChef Repositoryを作ることができます。

3. Cookbookを作成する

Cookbook用のディレクトリとファイルを作成します。こちらも手で作ります。ここでは例として、sample_cbという名前のCookbookを作ります。

もし、既に作成済みのcookbookをlocalmodeで実行したいだけであれば、作成済みのcookbookをchef-repo/cookbooks 配下に配置してください。その場合は、手順3. Cookbookを作成する手順4. Cookbookを編集する をスキップしてください。
また、既にCookbookを配置済みのchef-repoそのものをzipあたりで圧縮して、Chef Nodeに持ち込んでも良いでしょう。

$ cd chef-repo/cookbooks
$ mkdir sample_cb
$ mkdir sample_cb/attributes
$ mkdir sample_cb/templates
$ mkdir sample_cb/files
$ mkdir sample_cb/recipes
$ touch sample_cb/attributes/default.rb
$ touch sample_cb/recipes/default.rb
$ touch sample_cb/metadata.rb
$ touch sample_cb/README.md

metadata.rbには最低限以下のような内容を記載します。nameには、Cookbookディレクトリと同じ名称のCookbook名を記載してください。

sample_cb/metadata.rb
name             'sample_cb'
maintainer       'xxx'
maintainer_email 'dummy@dummy.com'
license          'All rights reserved'
description      '...'
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version          '0.1.0'

metadata.rb の詳細は以下を参照してください。
metadata.rb

Chef DKがあれば、chef generate cookbookというコマンドでCookbookの雛形を作成することができます。もちろん、Chef DKがある環境で作ったCookbookの雛形を持ち込んでも構いません。

chef generate cookbookと同じくCookbookの雛形を作成することができたknife cookbook createコマンドは、Chef12で削除されました。

4. Cookbookを編集する

デフォルトレシピ(sample_cb/recipes/default.rb)にテスト実行用の処理を追加します。ここでは、logリソースのサンプルを使います。

sample_cb/recipes/default.rb
log 'message' do
  message 'A message add to the log.'
  level :warn
end

5. Cookbookをlocalmodeで実行する

chef-client を実行します。localmodeで実行するので-z--localmodeのオプションが必要です。また、-oもしくは--override-runlist で実行するCookbookを指定してください。

また、chef-repo直下でchef-client を実行することを推奨します。

$ chef-client -z -o "recipe[sample_cb::default]"
[2018-05-15T16:04:43+09:00] WARN: No config file found or specified on command line, using command line options.
Starting Chef Client, version 14.1.1
[2018-05-15T16:04:53+09:00] WARN: Run List override has been provided.
[2018-05-15T16:04:53+09:00] WARN: Original Run List: []
[2018-05-15T16:04:53+09:00] WARN: Overridden Run List: [recipe[sample_cb::default]]
resolving cookbooks for run list: ["sample_cb::default"]
Synchronizing Cookbooks:
  - sample_cb (0.1.0)
Installing Cookbook Gems:
Compiling Cookbooks...
Converging 1 resources
Recipe: sample_cb::default
  * log[message] action write[2018-05-15T16:04:53+09:00] WARN: A message add to the log.

[2018-05-15T16:04:53+09:00] WARN: Skipping final node save because override_runlist was given

Running handlers:
Running handlers complete
Chef Client finished, 1/1 resources updated in 08 seconds

Chef Client finishedと表示されればOKです。

補足

-o で 実行するCookbookを都度指定しましたが、以下のようにjsonファイルを作成して、Cookbookを実行することも可能です。この方法であれば、jsonファイルの中にAttributeで、CookbookのAttributeを上書きすることも可能になります。

local.json
{
  "sample_cb": {
    "echo": "HelloWorld!!"
  },
  "run_list": [
    "recipe[sample_cb::default]"
  ]
}
$ chef-client -z -j local.json
[2018-05-15T18:01:14+09:00] WARN: Please install an English UTF-8 locale for Chef to use, falling back to C locale and disabling UTF-8 support.
[2018-05-15T18:01:20+09:00] WARN: No config file found or specified on command line, using command line options.
Starting Chef Client, version 14.1.1
resolving cookbooks for run list: ["sample_cb::default"]
Synchronizing Cookbooks:
  - sample_cb (0.1.0)
Installing Cookbook Gems:
Compiling Cookbooks...
Converging 1 resources
Recipe: sample_cb::default
  * log[message] action write[2018-05-15T18:01:30+09:00] WARN: HelloWorld!!

Running handlers:
Running handlers complete
Chef Client finished, 1/1 resources updated in 08 seconds

※ 上の例はデフォルトレシピを以下のように書き換えています。

sample_cb/recipes/default.rb
log 'message' do
  message node['sample_cb']['echo']
  level :warn
end
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?