在 Chef 食谱中组织食谱
Organize recipes inside a Chef cookbook
我需要使用 Chef Cookbook 安装 java jdk 1.8 和 tomcat 7。
我正在尝试创建一个简单的食谱,使用 Chef supermarket java 和 [=77 安装 oracle java jdk 1.8 和 Tomcat 1.7 con CentOS 7 =] 食谱。
我在 Windows 10 上使用 Chef DK,我已经从官方网站下载了它(参考 https://downloads.chef.io/chefdk),并且还使用 Vagrant 和 Oracle Virtualbox 创建我的 CentOS 7 目标节点并使用 kitchen create
和 kitchen converge
命令进行测试。
我试着给你一些关于我的食谱配置的细节.....
我的环境是
Chef Development Kit Version: 3.1.0
chef-client version: 14.2.0
delivery version: master (6862f27aba89109a9630f0b6c6798efec56b4efe)
berks version: 7.0.4
kitchen version: 1.22.0
inspec version: 2.1.72
在我的 Berksfile 中,我
source 'https://supermarket.chef.io'
metadata
我的Kitchen.yml是关注
---
driver:
name: vagrant
provisioner:
name: chef_zero
# You may wish to disable always updating cookbooks in CI or other testing environments.
# For example:
# always_update_cookbooks: <%= !ENV['CI'] %>
always_update_cookbooks: true
verifier:
name: inspec
platforms:
- name: centos-7
suites:
- name: default
run_list:
- recipe[test::default]
verifier:
inspec_tests:
- test/integration/default
attributes:
我的metadata.rb是关注
name 'test'
maintainer 'The Authors'
maintainer_email 'you@example.com'
license 'All Rights Reserved'
description 'Installs/Configures test'
long_description 'Installs/Configures test'
version '0.1.0'
chef_version '>= 12.14' if respond_to?(:chef_version)
depends 'java', '~> 2.2.0'
depends 'tomcat', '~> 3.0.0'
我的recipes/default.rb
node.default["java"]["install_flavor"] = "oracle"
node.default["java"]["jdk_version"] = "8"
node.default['java']['oracle']['accept_oracle_download_terms'] = true
include_recipe "java"
tomcat_install 'tomcat7' do
version '7.0.90'
verify_checksum false
exclude_examples false
exclude_docs false
end
tomcat_service 'tomcat7' do
action :start
end
及其attributes/recipe.rb
default['java']['install_flavor'] = 'oracle'
default['java']['jdk_version'] = '8'
default['java']['oracle']['accept_oracle_download_terms'] = true
这个食谱组织一切正常。
我想尝试 "refactory" 这种结构划分 java 和 tomact 安装:我尝试做的...
使用此内容创建一个 recipes/inst_jdk18.rb
食谱 ..
node.inst_jdk18["java"]["install_flavor"] = "oracle"
node.inst_jdk18["java"]["jdk_version"] = "8"
node.inst_jdk18['java']['oracle']['accept_oracle_download_terms'] = true
include_recipe "java"
及其具有此内容的 attributes/inst_jdk18.rb
属性文件
inst_jdk18['java']['install_flavor'] = 'oracle'
inst_jdk18['java']['jdk_version'] = '8'
inst_jdk18['java']['oracle']['accept_oracle_download_terms'] = true
使用此内容创建一个 recipes/inst_tomcat7.rb
食谱 ..
tomcat_install 'tomcat7' do
version '7.0.90'
verify_checksum false
exclude_examples false
exclude_docs false
end
tomcat_service 'tomcat7' do
action :start
end
然后我以这种方式修改了我的 recipes/default.rb
食谱
include_recipe "inst_jdk18"
include_recipe "inst_tomcat7"
现在,当我尝试 kitchen converge
命令时,出现错误
================================================================================
Recipe Compile Error in /tmp/kitchen/cache/cookbooks/geoserver/attributes/inst_jdk18.rb
================================================================================
NoMethodError
-------------
undefined method `inst_jdk18' for #<Chef::Node::Attribute:0x000000000383e318>
Cookbook Trace:
---------------
/tmp/kitchen/cache/cookbooks/geoserver/attributes/inst_jdk18.rb:1:in `from_file'
Relevant File Content:
----------------------
/tmp/kitchen/cache/cookbooks/geoserver/attributes/inst_jdk18.rb:
1>> inst_jdk18['java']['install_flavor'] = 'oracle'
2: inst_jdk18['java']['jdk_version'] = '8'
3: inst_jdk18['java']['oracle']['accept_oracle_download_terms'] = true
4:
关于如何以正确的方式构建我的食谱有什么建议吗?
inst_jdk18['java']['install_flavor'] = 'oracle'
inst_jdk18['java']['jdk_version'] = '8'
inst_jdk18['java']['oracle']['accept_oracle_download_terms'] = true
inst_jdk18不是节点对象的方法,也就是default/override/etc。在属性文件中,它们定义了属性的优先级,配方代码中的 node.default 也是如此。
换成default
就可以了
如果您在属性文件中定义这些属性,请不要在食谱中重新定义它们,做一个或另一个,包装食谱的推荐方法是在食谱中使用 node.default 在 include_recipe 有一个连贯的地方来定义事物。
简而言之,您混合了文件名 (default.rb) 和 attribute levels(也是默认值),文件的命名不会影响属性级别。
我需要使用 Chef Cookbook 安装 java jdk 1.8 和 tomcat 7。
我正在尝试创建一个简单的食谱,使用 Chef supermarket java 和 [=77 安装 oracle java jdk 1.8 和 Tomcat 1.7 con CentOS 7 =] 食谱。
我在 Windows 10 上使用 Chef DK,我已经从官方网站下载了它(参考 https://downloads.chef.io/chefdk),并且还使用 Vagrant 和 Oracle Virtualbox 创建我的 CentOS 7 目标节点并使用 kitchen create
和 kitchen converge
命令进行测试。
我试着给你一些关于我的食谱配置的细节.....
我的环境是
Chef Development Kit Version: 3.1.0
chef-client version: 14.2.0
delivery version: master (6862f27aba89109a9630f0b6c6798efec56b4efe)
berks version: 7.0.4
kitchen version: 1.22.0
inspec version: 2.1.72
在我的 Berksfile 中,我
source 'https://supermarket.chef.io'
metadata
我的Kitchen.yml是关注
---
driver:
name: vagrant
provisioner:
name: chef_zero
# You may wish to disable always updating cookbooks in CI or other testing environments.
# For example:
# always_update_cookbooks: <%= !ENV['CI'] %>
always_update_cookbooks: true
verifier:
name: inspec
platforms:
- name: centos-7
suites:
- name: default
run_list:
- recipe[test::default]
verifier:
inspec_tests:
- test/integration/default
attributes:
我的metadata.rb是关注
name 'test'
maintainer 'The Authors'
maintainer_email 'you@example.com'
license 'All Rights Reserved'
description 'Installs/Configures test'
long_description 'Installs/Configures test'
version '0.1.0'
chef_version '>= 12.14' if respond_to?(:chef_version)
depends 'java', '~> 2.2.0'
depends 'tomcat', '~> 3.0.0'
我的recipes/default.rb
node.default["java"]["install_flavor"] = "oracle"
node.default["java"]["jdk_version"] = "8"
node.default['java']['oracle']['accept_oracle_download_terms'] = true
include_recipe "java"
tomcat_install 'tomcat7' do
version '7.0.90'
verify_checksum false
exclude_examples false
exclude_docs false
end
tomcat_service 'tomcat7' do
action :start
end
及其attributes/recipe.rb
default['java']['install_flavor'] = 'oracle'
default['java']['jdk_version'] = '8'
default['java']['oracle']['accept_oracle_download_terms'] = true
这个食谱组织一切正常。
我想尝试 "refactory" 这种结构划分 java 和 tomact 安装:我尝试做的...
使用此内容创建一个 recipes/inst_jdk18.rb
食谱 ..
node.inst_jdk18["java"]["install_flavor"] = "oracle"
node.inst_jdk18["java"]["jdk_version"] = "8"
node.inst_jdk18['java']['oracle']['accept_oracle_download_terms'] = true
include_recipe "java"
及其具有此内容的 attributes/inst_jdk18.rb
属性文件
inst_jdk18['java']['install_flavor'] = 'oracle'
inst_jdk18['java']['jdk_version'] = '8'
inst_jdk18['java']['oracle']['accept_oracle_download_terms'] = true
使用此内容创建一个 recipes/inst_tomcat7.rb
食谱 ..
tomcat_install 'tomcat7' do
version '7.0.90'
verify_checksum false
exclude_examples false
exclude_docs false
end
tomcat_service 'tomcat7' do
action :start
end
然后我以这种方式修改了我的 recipes/default.rb
食谱
include_recipe "inst_jdk18"
include_recipe "inst_tomcat7"
现在,当我尝试 kitchen converge
命令时,出现错误
================================================================================
Recipe Compile Error in /tmp/kitchen/cache/cookbooks/geoserver/attributes/inst_jdk18.rb
================================================================================
NoMethodError
-------------
undefined method `inst_jdk18' for #<Chef::Node::Attribute:0x000000000383e318>
Cookbook Trace:
---------------
/tmp/kitchen/cache/cookbooks/geoserver/attributes/inst_jdk18.rb:1:in `from_file'
Relevant File Content:
----------------------
/tmp/kitchen/cache/cookbooks/geoserver/attributes/inst_jdk18.rb:
1>> inst_jdk18['java']['install_flavor'] = 'oracle'
2: inst_jdk18['java']['jdk_version'] = '8'
3: inst_jdk18['java']['oracle']['accept_oracle_download_terms'] = true
4:
关于如何以正确的方式构建我的食谱有什么建议吗?
inst_jdk18['java']['install_flavor'] = 'oracle'
inst_jdk18['java']['jdk_version'] = '8'
inst_jdk18['java']['oracle']['accept_oracle_download_terms'] = true
inst_jdk18不是节点对象的方法,也就是default/override/etc。在属性文件中,它们定义了属性的优先级,配方代码中的 node.default 也是如此。
换成default
就可以了
如果您在属性文件中定义这些属性,请不要在食谱中重新定义它们,做一个或另一个,包装食谱的推荐方法是在食谱中使用 node.default 在 include_recipe 有一个连贯的地方来定义事物。
简而言之,您混合了文件名 (default.rb) 和 attribute levels(也是默认值),文件的命名不会影响属性级别。