使用chef server和vagrant配置开发人员环境而无需注册节点

时间:2014-03-09 09:45:49

标签: chef vagrant chef-solo berkshelf

我希望创建一个基于Web的应用程序的开发人员环境,该环境将使用vagrant在VM上安装应用程序服务器和数据库服务器。我正在使用开源厨师服务器和流氓chef_client配置器。但是,每次配置开发人员节点时,chef_client配置程序都会在chef服务器上创建客户端节点。这是不可取的,因为许多开发人员都会使用此设置。这样的节点可能会被多次创建和销毁。因此,不需要在chef服务器上维护此类节点的列表。

chef_solo是另一种选择,但它要求食谱存在于系统中。我们正在使用厨师服务器作为烹饪书的存储库。因此,开发人员无需在他/她的系统中拥有特定的食谱。我也查看了berkshelf,我可以在其中配置chef_api路径到厨师服务器。但这也需要一个节点。以下是我的流浪档案:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "precise64-chef"
  config.vm.network :private_network, ip: "33.33.33.10"
  config.omnibus.chef_version = '11.8.2'
  config.vm.provision "chef_client" do |chef|
    chef.log_level = :debug
    chef.environment = "development"
    chef.delete_node = true
    chef.delete_client = true
    chef.node_name = "sample_app"
    chef.chef_server_url = "https://chef-server-url"
    chef.validation_key_path = "chef-validator.pem"
    chef.add_role "base"
    chef.add_role "pg_client"
    chef.add_role "application_server"
    chef.add_role "db_server"
    chef.add_recipe "deploy_application"
  end
end

我希望不在Chef服务器上创建sample_app节点。否则这符合我的目的。欢迎使用厨师服务器提供开发者环境的任何其他策略。

1 个答案:

答案 0 :(得分:10)

立即解决方案

Butcher插件

我想到的直接答案是使用vagrant butcher插件。这将自动删除Chef服务器上的开发人员客户端和节点条目。

长期解决方案

由于您了解Berkshelf "chef_api" directive,我将假设您拥有典型的企业方案,其中有几位开发人员共享本地开发的烹饪书。

这就是我正在做的厨师......

厨师食谱库模式

保留chef服务器的实例作为cookbook的存储库。每个已发布的食谱版本都会推送到此处,供所有内部厨师用户使用。

要维护存储库烹饪书,请使用Jenkins为cookbook实施CI过程。 Jenkins的工作来自当地的GIT存储库,或来自社区食谱网站。这种方法的优点是可以使用chef spec自动化测试,并且可以使用foodcritic等工具实现QA规则。通过这种方式,构建失败有助于提高组织内使用的烹饪书的整体质量。

我认为这个存储库模式是我们在Berkshelf人最终推出Berkshelf 3.0时会更多的事情(参见berkshelf-api)。

使用Berkshelf加载cookbook

Berkshelf用于控制将烹饪书加载到所有厨师服务器(dev或prod)。以下是演示“Berksfile”:

chef_api "https://cookbook.repo.myorg.com/", node_name: "dev1", client_key: "/path/to/dev1/private/key/key.pem"

cookbook "apache2"
cookbook "mysql"
...

“chef_api”指令告诉berkshelf从本地厨师食谱库加载所有食谱,而不是默认从社区存储库加载。

这使得创建主厨服务器的“类似生产”副本变得微不足道。它还使berkshelf的一个更神奇的方面。系统中的每个食谱都可以拥有自己的简单Berksfile:

chef_api "https://cookbook.repo.myorg.com/".....

metadata

“metadata”语句告诉Berkshelf在cookbook的元数据文件中加载列为依赖项的cookbook。这很棒,简单的“berks upload”,我需要的所有食谱都会自动加载到我的开发厨师服务器中。

使用Spiceweasel加载厨师服务器

非常有用的工具。集成Berkshelf并生成所有其他刀具命令,用于从chef repository加载厨师服务器。

https://github.com/mattray/spiceweasel

发展:零厨师和Vagrant

一旦烹饪书受到控制(使用Berkshelf),我的建议是采用Chef zero。然后,每个开发人员都可以拥有自己的本地管理的Chef服务器实例。

以下是我经常安装的用于支持厨师食谱开发的流浪插件:

一旦烹饪书准备就绪,它就会被提交并推送。然后Jenkins将获取新版本并自动将其加载到cookbook存储库中。