我已经看了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)))
:我需要&#34;导入&#34;我的custom-java
食谱,怎么样?它在哪里?(((2)))
:我应该如何配置java
? 修改
我设置了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
并不是在寻找......
答案 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上的所有教程以获得更好的概述。