Chef Kitchen设置
Test Kitchen 是 Chef 的集成测试框架。它支持编写测试配方,一旦它们使用说明书进行实例化和聚合,这些测试配方就会在 VM 上运行。测试配方在该虚拟机上运行,可以验证一切是否按预期工作。
ChefSpec 是只模拟 Chef 运行的东西。测试Kitchen启动真实节点并在其上运行 Chef。
步骤 1-安装 test kitchen Ruby gem 和 test kitchen vagrant gem,使 test kitchen 能够使用 vagrant 进行测试。
$ gem install kitchen
$ gem install kitchen-vagrant
第 2 步-设置测试Kitchen。这可以通过在Cookbook目录中创建
.kitchen.yml 来完成。
driver_plugin: vagrant
driver_config:
require_chef_omnibus: true
platforms:
-name: ubuntu-12.04
driver_config:
box: opscode-ubuntu-12.04
box_url: https://opscode-vm.s3.amazonaws.com/vagrant/opscode_
ubuntu-12.04_provisionerless.box
suites:
-name: default
run_list:
-recipe[minitest-handler]
-recipe[my_cookbook_test]
attributes: { my_cookbook: { greeting: 'Ohai, Minitest!'} }
在上面的代码中,有一部分定义了 vagrant 需要启动虚拟机,它定义了您希望 Omnibus 在目标节点上安装 Chef。
第二部分定义了您要测试Cookbook的平台。 Vagrant 总是会创建和销毁新实例。您不必担心使用 Vagrant 文件启动的 Vagrant VM 的副作用。
测试Kitchen可以被视为一个临时环境,有助于在类似于生产的临时环境中运行和测试Cookbook。启用测试Kitchen后,可以确保给定的代码段在实际部署到测试、预生产和生产环境之前可以正常工作。测试Kitchen的这一功能在将Cookbook放入实际工作环境之前,已被许多组织作为一套遵循。
测试Kitchen工作流程
以下是测试Kitchen工作流程中涉及的步骤。
使用 Chef 创建Cookbook
使用以下代码创建Cookbook。
$ chef generate cookbook motd_rhel
Installing Cookbook Gems:
Compiling Cookbooks...
Recipe: code_generator::cookbook
* directory[C:/chef/cookbooks/motd_rhel] action create
-create new directory C:/chef/cookbooks/motd_rhel
* template[C:/chef/cookbooks/motd_rhel/metadata.rb] action create_if_missing
-create new file C:/chef/cookbooks/motd_rhel/metadata.rb
-update content in file C:/chef/cookbooks/motd_rhel/metadata.rb from none to
d6fcc2 (diff output suppressed by config)
* template[C:/chef/cookbooks/motd_rhel/README.md] action create_if_missing
-create new file C:/chef/cookbooks/motd_rhel/README.md
-update content in file C:/chef/cookbooks/motd_rhel/README.md from none to 50deab
(diff output suppressed by config)
* cookbook_file[C:/chef/cookbooks/motd_rhel/chefignore] action create
-create new file C:/chef/cookbooks/motd_rhel/chefignore
-update content in file C:/chef/cookbooks/motd_rhel/chefignore from none to 15fac5
(diff output suppressed by config)
* cookbook_file[C:/chef/cookbooks/motd_rhel/Berksfile] action create_if_missing
-create new file C:/chef/cookbooks/motd_rhel/Berksfile
-update content in file C:/chef/cookbooks/motd_rhel/Berksfile from none to 9f08dc
(diff output suppressed by config)
* template[C:/chef/cookbooks/motd_rhel/.kitchen.yml] action create_if_missing
-create new file C:/chef/cookbooks/motd_rhel/.kitchen.yml
-update content in file C:/chef/cookbooks/motd_rhel/.kitchen.yml
from none to 49b92b (diff output suppressed by config)
* directory[C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec]
action create
-create new directory
C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec
* directory[C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec]
action create
-create new directory
C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec
* cookbook_file
[C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec/spec_helper.rb]
action create_if_missing
-create new file
C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec/spec_helper.rb
-update content in file
C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec/spec_helper.rb
from none to d85df4 (diff output suppressed by config)
* template
[C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec/defaul t_spec.rb]
action create_if_missing
-create new file
C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec/default_spec.rb
-update content in file
C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec/default_spec.rb
from none to 3fbdbd (diff output suppressed by config)
* directory[C:/chef/cookbooks/motd_rhel/spec/unit/recipes] action create
-create new directory C:/chef/cookbooks/motd_rhel/spec/unit/recipes
* cookbook_file
[C:/chef/cookbooks/motd_rhel/spec/spec_helper.rb] action create_if_missing
-create new file C:/chef/cookbooks/motd_rhel/spec/spec_helper.rb
-update content in file
C:/chef/cookbooks/motd_rhel/spec/spec_helper.rb from none to 587075
(diff output suppressed by config)
* template
[C:/chef/cookbooks/motd_rhel/spec/unit/recipes/default_spec.rb]
action create_if_missing
-create new file C:/chef/cookbooks/motd_rhel/spec/unit/recipes/default_spec.rb
-update content in file
C:/chef/cookbooks/motd_rhel/spec/unit/recipes/default_spec.rb
from none to ff3b17 (diff output suppressed by config)
* directory[C:/chef/cookbooks/motd_rhel/recipes] action create
-create new directory C:/chef/cookbooks/motd_rhel/recipes
* template[C:/chef/cookbooks/motd_rhel/recipes/default.rb] action create_if_missing
-create new file C:/chef/cookbooks/motd_rhel/recipes/default.rb
-update content in file
C:/chef/cookbooks/motd_rhel/recipes/default.rb from none to c4b029
(diff output suppressed by config)
* execute[initialize-git] action run
-execute git init .
* cookbook_file[C:/chef/cookbooks/motd_rhel/.gitignore] action create
-create new file C:/chef/cookbooks/motd_rhel/.gitignore
-update content in file C:/chef/cookbooks/motd_rhel/.gitignore from none to 33d469
(diff output suppressed by config)
* execute[git-add-new-files] action run
-execute git add .
* execute[git-commit-new-files] action run
-execute git commit-m "Add generated cookbook content"
以下是创建的Cookbook结构作为上述代码的输出。
测试Kitchen配置文件
.kitchen.yaml 文件
driver:
name: vagrant
provisioner:
name: chef_zero
# verifier:
# name: inspec
# format: doc
platforms:
-name: ubuntu-14.04
suites:
-name: default
run_list:
-recipe[motd_rhel::default]
attributes:
驱动程序-它指定管理机器的软件。
Provisioner-它提供关于 Chef 如何运行的规范。我们使用chef_zero是因为它可以模拟本地机器上的Chef服务器环境。这允许使用节点属性和 Chef 服务器规范。
平台-指定目标操作系统。
Suites-它定义了想要在虚拟环境中应用的内容。在这里,您定义多重定义。它是您定义运行列表的位置,它指定要运行的配方以及我们需要运行的顺序。
按顺序运行命令
Kitchen清单
$ kitchen list
Instance Driver Provisioner Verifier Transport Last Action
ubuntu-1404 Vagrant ChefZero Busser Ssh <Not Created>
Kitchen创作
$ kitchen create
-----> Starting Kitchen (v1.4.2)
-----> Creating <default-centos-72>...
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'opscode-centos-7.2' could not be found.
Attempting to find and install...
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Box file was not detected as metadata. Adding it directly...
==> default: Adding box 'opscode-centos-7.2' (v0) for provider: virtualbox
default: Downloading:
https://opscode-vmbento.s3.amazonaws.com/vagrant/virtualbox/
opscode_centos-7.1_chefprovisionerless.box[...]
Vagrant instance <default-centos-72> created.
Finished creating <default-centos-72> (3m12.01s).
-----> Kitchen is finished. (3m12.60s)
Kitchen融合
$ kitchen converge
-----> Converging <default-centos-72>...
Preparing files for transfer
Preparing dna.json
Resolving cookbook dependencies with Berkshelf 4.0.1...
Removing non-cookbook files before transfer
Preparing validation.pem
Preparing client.rb
-----> Chef Omnibus installation detected (install only if missing)
Transferring files to <default-centos-72>
Starting Chef Client, version 12.6.0
resolving cookbooks for run list: ["motd_rhel::default"]
Synchronizing Cookbooks:-motd_rhel (0.1.0)
Compiling Cookbooks... Converging 1 resources
Recipe: motd_rhel::default (up to date)
Running handlers: Running handlers complete
Chef Client finished, 0/1 resources updated in 01 seconds
Finished converging <default-centos-72> (0m3.57s).
-----> Kitchen is finished. (0m4.55s)
测试设置
Kitchen登录用于测试是否正确配置了测试虚拟机。
$ kitchen login
Last login: Thu Jan 30 19:02:14 2017 from 10.0.2.2
hostname: default-centos-72
fqdn: default-centos-72
memory: 244180kBcpu count: 1
终于退出
$ exit
Logout
Connection to 127.0.0.1 closed.
破坏设置
$ Kitchen destroy
-----> Starting Kitchen (v1.4.2)
-----> Destroying <default-centos-72>...
==> default: Forcing shutdown of VM...
==> default: Destroying VM and associated drives...
Vagrant instance <default-centos-72> destroyed.
Finished destroying <default-centos-72> (0m4.94s).
-----> Kitchen is finished. (0m5.93s)