与伯克谢尔夫、厨师和流浪汉混淆



我看了一下BerkShelf 的文档。我已经能够弄清楚它代表管理食谱依赖项。所以,猜猜我想用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,因此所有依赖项都已解析并位于~.berkshelfcookbooks下。

尽管如此,我不太清楚如何将我的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]"
)

我正在使用厨师 12.18.31。

  1. On(((1))): 我需要"导入"我的custom-java食谱吗?它位于何处?
  2. 关于(((2))):我应该如何配置java

编辑我设置chef.cookbooks_path

config.vm.provision "chef_solo" do |chef|
chef.roles_path = "chef/roles"
chef.cookbooks_path = 'D:projectslivingvagrantproductionberkcustom-java'
chef.add_role "java-dev-workstation"
end

编辑2

尽管如此,现在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不是在里面寻找...

对于包装器说明书模式,您确实将其向后进行了,您的custom_java应该取决于java并更改其默认行为(覆盖节点属性)。

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

depends 'java', '~> 1.47'

和默认的.rb一行

include_recipe 'java'

然后,您的Berksfile可以省略说明书行(除非您在顶部的源代码之外的其他位置提取版本)

接下来,您的角色应该使用custom-java作为食谱而不是java,然后厨师-客户端运行(编辑前的流浪者部分听起来不错,应该拉取两本食谱)将从java库书中计算属性,覆盖custom-java中定义的属性,您应该最终获得所需的行为。

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

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

最新更新