我正在尝试建立一个工作流程来在本地开发Chef cookbook。我们目前正在使用Chef Server和使用chef-client的配置节点。
作为新工作流程的一部分,我们希望能够开始使用Vagrant在本地测试烹饪书,以避免在云中远程计算机上进行测试。
我能够启动和配置本地Vagrant机器,但我不确定如何做的一件事是让Chef加载本地版本的cookbook,但仍然可以与Chef服务器讨论一切否则(环境,角色,数据包等),所以每次我做一个我要测试的更改时,我都不必通过刀上传这本菜谱。这可能吗?
换句话说,我可以让厨师 - 客户与当地的厨师 - 零服务器仅为烹饪书,而对远程厨师服务器进行其他一切的讨论吗?或者可能采用不同的方法产生相同的效果?我愿意接受建议。
我认为一个例子将有助于表达我正在寻找的东西。我意识到这可能不是我真正需要的,但我很好奇如何实现它。在此方案中,配方从存储在远程Chef服务器
中的数据条读取name 'proxy-cookbook'
version '0.0.0'
---
driver:
name: vagrant
provisioner:
name: chef_zero
platforms:
- name: ubuntu-12.04
suites:
- name: default
run_list:
- recipe[proxy-cookbook::default]
attributes:
...
key = data_bag_item("key", "main")
....
现在,我知道我可以创建以下内容:
{
"id": "main",
"key": "s3cr3tk3y"
}
从我的数据包中读取厨房测试;但这正是我想要避免的。是否有可能:
我希望这是有道理的。如有必要,我可以添加一些上下文。
答案 0 :(得分:1)
测试厨房是驱赶流浪汉的最佳方式。它提供了您正在寻找的厨师零点的集成。使您能够在本地完全模拟您的生产厨师设置,并在多个平台上测试您的食谱。
测试厨房取代了我以前用于厨师开发的旧工作流程。非常值得学习。
生成使用社区食谱安装java的演示食谱。像Berkshelf(管理食谱依赖)和厨师零的工具会自动设置。
chef generate cookbook demo
创建以下文件:
└── demo
├── .kitchen.yml
├── Berksfile
├── metadata.rb
├── recipes
│ └── default.rb
└── test
└── integration
├── default
│ └── serverspec
│ └── default_spec.rb
更新平台版本。厨房被告知使用流浪汉和厨师零。
---
driver:
name: vagrant
provisioner:
name: chef_zero
platforms:
- name: ubuntu-14.04
- name: centos-6.6
suites:
- name: default
run_list:
- recipe[demo::default]
attributes:
此文件控制如何管理cookbook依赖项。特殊的“元数据”设置告诉Berkshelf引用cookbook元数据文件。
source 'https://supermarket.chef.io'
metadata
将“apt”和“java”cookbook添加为依赖项:
name 'demo'
..
..
depends "apt"
depends "java"
include_recipe "apt"
include_recipe "java"
测试JDK包的安装
require 'spec_helper'
describe package("openjdk-6-jdk") do
it { should be_installed }
end
$ kitchen verify default-ubuntu-1404
-----> Starting Kitchen (v1.4.0)
..
..
Package "openjdk-6-jdk"
should be installed
Finished in 0.1007 seconds (files took 0.268 seconds to load)
1 example, 0 failures
Finished verifying <default-ubuntu-1404> (0m13.73s).
-----> Kitchen is finished. (0m14.20s)
以下示例演示如何使用带有角色的测试厨房(适用于数据包和其他要加载到chef-zero中的项目):
答案 1 :(得分:0)
我想我找到了我想要的东西。
您可以使用knife下载所需的Chef服务器对象。您可以在.kitchen.yml中引导它,这样您就不必每次都手动执行此操作。
...
driver:
name: vagrant
pre_create_command: 'mkdir -p chef-server; knife download /data_bags /roles /environments --chef-repo-path chef-server/'
...
provisioner:
name: chef_zero
data_bags_path: chef-server/data_bags
roles_path: chef-server/roles
environments_path: chef-server/environments
client_rb:
environment: development
...
然后我将chef-server目录添加到.gitignore
chef-server/
这可能有一种不那么冗余的方式,但这对我来说现在很有用,因为我只是想记录下来,我就这样离开了。