3
3

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.

Berkshelfを使って外部クックブックをノードに適用する。

Last updated at Posted at 2016-02-20

関連記事

クックブックの生成

  • クックブックを作成する方法には二つがある。
  • 直接クックブックを作成するか誰かが提供する外部のクックブックを取得して利用するかだ。
  • まずは外部のクックブックを取得して利用する方法について調べてみよう。

ChefのSupermarket

  • https://supermarket.chef.io/
  • rubygems.orgから色んなgemのダウンロードができるのと同じくsupermarket.chef.ioでも色んなクックブックを提供している。
  • 外部から提供されるクックブックはcookbooksというディレクトリに、直接作成するクックブックはsite-cookbooksというディレクトリに保持するのがルールだ。

Berkshelfを用いた外部クックブックの適用

クックブックを検索する。

  • ChefのSupermarketでも検索ができるが、ここではknifeを使って検索してみよう。
  • yumリポジトリであるepelを設置したい。
  • yumというキーワードで検索するとyumが含まれた色んなクックブックが表示される。
  % bin/knife cookbook site search yum

  ... snip ...

  yum-epel:
  cookbook:             https://supermarket.chef.io/api/v1/cookbooks/yum-epel
  cookbook_description: Installs and configures the EPEL Yum repository
  cookbook_maintainer:  chef
  cookbook_name:        yum-epel

  ... snip ...

クックブックの詳細を確認する。

  • knifeを使えばクックブックの詳細も確認できる。
  • epelというyumリポジトリの設置と設定を行うクックブックで、トータルで2700万を超えるダウンロード数を記録している。
  • アップデートも2015年11月に行っている。(記事の作成日時は2016年2月)
  % bin/knife cookbook site show yum-epel

  average_rating:
  category:           Other
  created_at:         2013-12-13T20:15:48.000Z
  deprecated:         false
  description:        Installs and configures the EPEL Yum repository
  external_url:       https://github.com/chef-cookbooks/yum-epel
  foodcritic_failure: false
  issues_url:         https://github.com/chef-cookbooks/yum-epel/issues
  latest_version:     https://supermarket.chef.io/api/v1/cookbooks/yum-epel/versions/0.6.5
  maintainer:         chef
  metrics:
    downloads:
      total:    27101079
      versions:
        0.1.4: 1252114

  ... snip ...

        0.6.5: 2453344
    followers: 61
  name:               yum-epel
  source_url:         https://github.com/chef-cookbooks/yum-epel
  up_for_adoption:
  updated_at:         2015-11-23T19:45:00.706Z

  ... snip ...

クックブックを取得する。

  • Berksfileを開きyum-epelというクックブックを追加する。
  % vi Berksfile
  source "https://api.berkshelf.com"

  cookbook 'yum-epel'
  • クックブックを取得する。
  • cookbooksというディレクトリが生成されてその中に取得したクックブックが保持される。
  % bin/berks vendor cookbooks
  • 取得されたクックブックを確認する。
  % cd cookbooks
  % tree . -L 2
  .
  ├── yum
  │   ├── CHANGELOG.md
  │   ├── CONTRIBUTING.md
  │   ├── MAINTAINERS.md
  │   ├── README.md
  │   ├── attributes
  │   ├── libraries
  │   ├── metadata.json
  │   ├── providers
  │   ├── recipes
  │   ├── resources
  │   └── templates
  └── yum-epel
      ├── CHANGELOG.md
      ├── CONTRIBUTING.md
      ├── MAINTAINERS.md
      ├── README.md
      ├── attributes
      ├── metadata.json
      └── recipes

  10 directories, 10 files

クックブックをノードに適用する。

  • ノードに適用するためにrun_listに取得したクックブックのレシピを追加する。
  % vi nodes/dev.json

  {
    "run_list": [
      "recipe[yum-epel]"
    ],
    "automatic": {
      "ipaddress": "dev"
    }
  }  
  • knifeを使ってrun_listにクックブックのレシピを追加するのもできる。直接編集することよりこっちの方法を推奨する。
  • chef-solo環境では -z オプション(又は--local-mode)を付ける。
  # レシピを追加する。
  % bin/knife node run_list add dev 'recipe[mariadb]' -z
  dev:
    run_list:
      recipe[yum-epel]
      recipe[mariadb]

  # 追加されたレシピを確認する。
  % cat nodes/dev.json
  {
    "name": "dev",
    "automatic": {
      "ipaddress": "dev"
    },
    "run_list": [
      "recipe[yum-epel]",
      "recipe[mariadb]"
    ]
  }

  # レシピを削除する。
  % bin/knife node run_list remove dev 'recipe[mariadb]' -z
  • ノードにクックブックのレシピを適用する。
  % bin/knife solo cook dev

knife-soloについて

  • knifeは元々chefのサーバ・クライアント環境で使うツールである。
  • knife-soloはchef-solo環境をリモートで操作できるようにknifeのコマンドを拡張したサブコマンドである。
  • 実際soloコマンドはただこれしかない。
  ** SOLO COMMANDS **
  knife solo bootstrap [USER@]HOSTNAME [JSON] (options)
  knife solo clean [USER@]HOSTNAME
  knife solo cook [USER@]HOSTNAME [JSONFILE] (options)
  knife solo init DIRECTORY
  knife solo prepare [USER@]HOSTNAME [JSON] (options)
  • 先ほどのknifeをコマンドを使ってrun_listにレシピを追加するとき-z オプションを付けたが付けないとエラーが発生する。
  % bin/knife node run_list add dev 'recipe[mariadb]'
  WARN: Failed to read the private key /etc/chef/client.pem: #<Errno::ENOENT: No such file or directory @ rb_sysopen - /etc/chef/client.pem>
  ERROR: Your private key could not be loaded from /etc/chef/client.pem
  Check your configuration file and ensure that your private key is readable
  • knifeをchef-solo環境で使う場合はローカルモードで使いなさいというオプションを付けばよい。
  • knife-soloコマンドはchef-solo環境のノードをリモートで操作するためのコマンドしか持ってない。

参考

  • Chef実践入門
3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?