与berkshelf,厨师和流浪汉混淆

时间:2017-02-21 08:38:42

标签: vagrant chef berkshelf

我已经看了BerkShelf documentation。我已经能够发现它代表管理食谱依赖性。所以,我想我想用java构建一台机器。我首先制作了自定义食谱:

chef generate cookbook custom-java

我的Berksfile是:

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

cookbook 'java'

我的metadata.rb是:

name 'custom-java'
...
version '0.1.0'

之后,我只是运行berks install,因此所有依赖项都已解析并位于~\.berkshelf\cookbooks下。

尽管如此,我还没有弄清楚如何将我的custom-java用于我的流浪汉配置中。为了让流浪汉将这本食谱提供给我的机器,我需要做些什么?

我的流浪结构是:

VagrantFile
├───chef
│   ├───cookbooks
│   │   ├───(((1)))  <<<<<<<<<<<<<<<<<<<<<<
│   ├───roles
│   │   ├───java-dev-workstation.rb

Vagrantfile内容为:

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.provision "chef_solo" do |chef|
    chef.roles_path = "chef/roles"
    chef.cookbooks_path = "chef/cookbooks"
    chef.add_role "java-dev-workstation"
  end
end

java-dev-workstation.rb

name "java-dev-workstation"

default_attributes( 
  # Because it's Oracle, we need to agree to the terms and conditions.
  :custom-java => {  >>>>>>>>>   (((2)))
    :install_flavor => 'oracle',
    :jdk_version => '8',
    :accept_license_agreement => true,
    :oracle => { "accept_oracle_download_terms" => true } 
  }

)

run_list(
  "recipe[java]"
)

我正在使用Chef 12.18.31。

  1. (((1))):我需要&#34;导入&#34;我的custom-java食谱,怎么样?它在哪里?
  2. 开启(((2))):我应该如何配置java
  3. 修改 我设置了chef.cookbooks_path

    config.vm.provision "chef_solo" do |chef|
        chef.roles_path = "chef/roles"
        chef.cookbooks_path = 'D:\projects\living\vagrant\production\berk\custom-java'
        chef.add_role "java-dev-workstation"
    end
    

    EDIT2

    尽管如此,custom-java依赖关系现在尚未解决:

    ================================================================================
    Error Resolving Cookbooks for Run List:
    ================================================================================
    
    Missing Cookbooks:
    ------------------
    No such cookbook: yum
    
    Expanded Run List:
    ------------------
    * custom-java
    
    Platform:
    ---------
    x86_64-linux
    

    我的metadata.rb内容是:

    name 'berk'
    ...
    version '0.1.0'
    
    supports 'centos'
    
    depends 'yum'
    

    目前,所有依赖项都位于~/.berkshelf/cookbooks。似乎shef-solo并不是在寻找......

1 个答案:

答案 0 :(得分:0)

您确实将其取向为包装程序菜谱模式,您的custom_java应取决于java并更改其默认行为(覆盖节点属性)。

你的custom-java metadata.rb应该包含这样一行,berksfile中的内容永远不会被chef-client运行解释,它是一个外部依赖解析器来创建连贯的bundle。

depends 'java', '~> 1.47'

而default.rb是一行

include_recipe 'java'

然后你的Berksfile可以省略食谱行(除非你在顶部以外的地方拉一个版本)

接下来你的角色应该使用custom-java作为食谱,而不是java,然后厨师 - 客户端运行(编辑前的流浪者部分听起来没问题,应该拉两个烹饪书)将从{{计算属性1}} coobooks,覆盖java中定义的那些,你应该最终得到所需的行为。

或者,您可以将运行列表设置为custom-java并完全避免该角色,这将有效。

我强烈建议您浏览https://learn.chef.io上的所有教程以获得更好的概述。