Vagrant 仅本地模式厨师烹饪书

Vagrant 仅本地模式厨师烹饪书,vagrant,chef-infra,Vagrant,Chef Infra,我正试图建立一个工作流程,在本地开发厨师烹饪书。我们目前正在使用Chef服务器和使用Chef客户端配置的节点 作为新工作流程的一部分,我们希望能够开始使用Vagrant在本地测试烹饪书,以避免在云中的远程机器上进行测试的成本 我能够启动并提供本地流浪者机器,但有一件事我真的不确定如何做,那就是让Chef加载本地版本的烹饪书,但仍然与Chef服务器进行其他一切(环境、角色、数据包等)的对话,因此,我不必在每次我想测试的改变时都通过刀子上传食谱。这可能吗 换句话说,我是否可以让chef客户端仅针对烹

我正试图建立一个工作流程,在本地开发厨师烹饪书。我们目前正在使用Chef服务器和使用Chef客户端配置的节点

作为新工作流程的一部分,我们希望能够开始使用Vagrant在本地测试烹饪书,以避免在云中的远程机器上进行测试的成本

我能够启动并提供本地流浪者机器,但有一件事我真的不确定如何做,那就是让Chef加载本地版本的烹饪书,但仍然与Chef服务器进行其他一切(环境、角色、数据包等)的对话,因此,我不必在每次我想测试的改变时都通过刀子上传食谱。这可能吗

换句话说,我是否可以让chef客户端仅针对烹饪书与本地chef zero服务器进行对话,而针对其他所有内容与远程chef服务器进行对话?或者是一种不同的方法可以产生相同的效果?我愿意接受建议

更新 我想举个例子来说明我在寻找什么。我意识到这可能不是我真正需要的,但我很好奇如何实现它。在此场景中,配方从存储在远程Chef服务器中的数据包中读取

元数据.rb .厨房 recipes/default.rb 现在,我知道我可以创造一些东西,大致如下:

数据包/main.json 让我的厨房测试从数据袋中读取;但这正是我想要避免的。是否可以:

  • 指示测试厨房从chef服务器获取实际数据包
  • 让chef zero为本地测试检索数据包的临时副本,或
  • 在本地快速“转储”远程Chef服务器的内容

我希望这是有道理的。如果需要,我可以添加一些上下文。

测试厨房是驾驶流浪汉的最佳方式。它提供了您希望与chef zero的集成。使您能够在本地完全模拟生产厨师设置,并在多个平台上测试烹饪书

TestKitchen已经取代了我以前在chef开发中使用的旧工作流。非常值得学习

例子 生成使用社区食谱安装java的演示食谱。Berkself(用于管理cookbook依赖项)和chef zero等工具是自动设置的

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依赖项。特殊的“元数据”设置告诉Berkself引用cookbook元数据文件

source 'https://supermarket.chef.io'

metadata
元数据.rb 添加“apt”和“java”食谱作为依赖项:

name 'demo'
..
..

depends "apt"
depends "java"
recipes/default.rb 测试/集成/默认/服务器规范/默认\u规范.rb 测试JDK包的安装

require 'spec_helper'

describe package("openjdk-6-jdk") do
  it { should be_installed }
end
运行示例
$kitchen-verify-default-ubuntu-1404
----->启动厨房(v1.4.0)
..
..
包“openjdk-6-jdk”
应该安装
完成时间为0.1007秒(文件加载时间为0.268秒)
1例,0次失败
已完成验证(0m13.73s)。
----->厨房完工了。(0m14.20s)
更新 下面的示例演示如何将测试厨房与角色一起使用(适用于数据包和其他要加载到chef zero中的项目):


    • 我想我找到了我要找的东西

      您可以使用刀子下载所需的Chef服务器对象。您可以在.kitchen.yml中引导它,这样就不必每次都手动执行

      .厨房 然后我将chef服务器目录添加到.gitignore

      .gitignore
      也许有一种不那么多余的方法可以做到这一点,但这对我来说现在很有用,因为我只是想记录这一点,所以我就这样离开了。

      我建议使用。@StephenKing我也在尝试实现test kitchen的使用,它确实很有用,但看起来这只会转移问题,因为我现在不能和我的厨师服务器谈论非烹饪书的东西,比如数据包和环境。我希望能够让test kitchen与Chef server进行除烹饪书以外的所有内容的对话,或者可能是一种不同的方法,比如让Chef zero代理除烹饪书以外的所有内容,这有意义吗?谢谢你的穿行标记,这是我在过去几个小时里一直在玩的东西,当然很有帮助,但这不是我想要的。也许一个具体的例子会有所帮助:我有我的食谱“cookbookA”,运行列表在.kitchen.yml中定义为“recipe[cookbookA::default]”。我做了本地更改,并做了测试,这很有效。现在,食谱依赖于环境属性。我知道我可以创建一个环境文件并让kitchen从中读取,但我可以避免这样做并读取实际的环境属性吗?我上面评论中的空间有限,让我编辑我的问题。通过示例编辑的问题,我希望现在更清楚。@PatoArvizu chef_zero使用“test/integration”目录作为chef存储库。在那里创建您的环境和数据包。例如,使用角色查看上面的更新或此链接:@marc oconnor这正是我试图避免的,需要为环境、数据包等创建文件。我在下面发布了一个答案,其中包含一个适合我的解决方案。这可能不是使用测试厨房的最佳方式,但这正是我想要的。
      ---
      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:
      
      source 'https://supermarket.chef.io'
      
      metadata
      
      name 'demo'
      ..
      ..
      
      depends "apt"
      depends "java"
      
      include_recipe "apt"
      include_recipe "java"
      
      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)
      
      ...
      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/