8

私は Chef を初めて使用し、Test Kitchenを使用してクックブックの有効性をテストしています。現在、Chef を最初に実行する前に、環境固有の属性が本番ノードで正しいことを確認しようとしています。これらは役割で定義されます。

たとえば、クックブックを検証する開発設定を備えた Vagrant ボックスを使用して収束するレシピがあるとします。本番ノードの役割をテストできるようにしたいと考えています。これらのテストは、自分の環境を説明する信頼できる情報源として必要だと思います。Test Kitchen のドキュメントを見ると、これはその範囲を超えているようです。

私の仮定は正しいですか?本番ノードで初めて Chef を実行する前にクックブックをテストして、正しい設定であることを確認するためのより良い方法はありますか?

4

3 に答える 3

10

嬉しいことに、chef_zero は「test/integration」ディレクトリをchef リポジトリとして使用していることがわかりました。

下にロールを作成するだけです

  • テスト/統合/役割

標準の Chef クックブック レイアウト。

├── attributes
│   └── default.rb
├── Berksfile
├── Berksfile.lock
├── chefignore
├── .kitchen.yml
├── metadata.rb
├── README.md
├── recipes
│   └── default.rb
└── test
    └── integration
        ├── default
        │   └── serverspec
        │       ├── default_spec.rb
        │       └── spec_helper.rb
        └── roles
            └── demo.json

.kitchen.yml

---
driver:
  name: vagrant

provisioner:
  name: chef_zero

platforms:
  - name: ubuntu-14.04

suites:
  - name: default
    run_list:
      - role[demo]
    attributes:

ノート:

  • プロビジョナーはchef_zero
  • ロールを使用するようにランリストが構成されている

レシピ/default.rb

file "/opt/helloworld.txt" do
  content "#{node['demo']['greeting']}"
end

属性/デフォルト.rb

default['demo']['greeting'] = "hello world"

ノート:

  • クックブックはデフォルトなしではコンパイルされません

テスト/統合/デフォルト/serverspec/default_spec.rb

require 'spec_helper'

describe file('/opt/helloworld.txt') do

  it { should be_file }
  its(:content) { should match /this came from my role/ }

end

ノート:

  • 統合テストは、ロール属性によって設定されたコンテンツを探しています

テスト/統合/役割/demo.json

{
  "name": "demo",
  "default_attributes": {
    "demo": {
      "greeting": "this came from my role"
    }
  },
  "run_list": [
    "recipe[demo]"
  ]
}
于 2015-04-25T04:05:46.527 に答える
3

ロールと環境の両方を .kitchen.yml で設定できるので、テスト キッチンでこれを確実にテストできます。

....
provisioner:
  roles_path: path/to/your/role/files
  client_rb:
    environment: your_environment
.....

とは言っても、私は個人的にロール クックブックを使用することを好みます。私たちが行っているように、環境のセットが固定されている場合は、ロール クックブックの属性ファイルで単純な条件を使用して、環境に基づいて属性を調整することもできます。そうすれば、他のクックブックをラップして変数を設定することで、ノードの構成全体を定義する 1 つのクックブックを作成できます。この設定により、正確な生産システムを検証するキッチン テストを非常に簡単に設定できます。

于 2015-04-23T14:06:06.330 に答える
1

属性を検証する際に使用する Test Kitchen の部分は ChefSpec です。

スペック ファイルで完全なランリストを定義し、レンダリングされたファイルが正しいことを確認できます。

それに関するChefspecドキュメントの一部がここにあります。


これを行う別の方法は、「ロール クックブック」を用意することです。シェフ サーバーでロールを使用する代わりに、属性ファイルで定義する属性を定義し、このクックブックをロールのランリストに依存させるようにします。

このロール クックブック レシピはinclude_recipe、ロール ランリストで設定したレシピを参照するだけです。

ここでの主な利点は、参照されているクックブックとは関係なく、このクックブックに仕様を含めることができることです。

于 2015-04-23T09:18:30.827 に答える