代码之家  ›  专栏  ›  技术社区  ›  Cesare

在厨师食谱中组织食谱

  •  1
  • Cesare  · 技术社区  · 6 年前

    我需要使用厨师食谱来安装JavaJDK1.8和Tomcat7。

    我试图创建一个简单的菜谱,使用Chef supermarket java和Tomcat菜谱安装OracleJavaJDK1.8和Tomcat1.7con CentOS 7。

    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
    

    在我的伯克斯文件里

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

    下面是我的厨房.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'
    

    我的食谱/默认.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
    

    这家食谱公司一切正常。

    创建 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"
    

    现在当我试着 厨房集合 命令I获取错误

     ================================================================================
     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: 
    

    1 回复  |  直到 6 年前
        1
  •  2
  •   Tensibai    6 年前
    inst_jdk18['java']['install_flavor'] = 'oracle'
    inst_jdk18['java']['jdk_version'] = '8'
    inst_jdk18['java']['oracle']['accept_oracle_download_terms'] = true
    

    inst_jdk18不是node对象的一个方法,这就是default/override/etc。在属性文件中,它们定义了属性的优先级,在recipes代码中node.default也是如此。

    换成 default 你会没事的。

    简而言之,您将文件名(default.rb)和 attribute levels (默认情况下也是如此),文件的名称不会影响属性级别。