我看了一下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。
- On
(((1)))
: 我需要"导入"我的custom-java
食谱吗?它位于何处? - 关于
(((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 的所有教程,以获得更好的概述。