如何在 Chef 中自定义 tomcat 食谱

Posted

技术标签:

【中文标题】如何在 Chef 中自定义 tomcat 食谱【英文标题】:How to customise a tomcat recipe in Chef 【发布时间】:2015-09-13 10:46:56 【问题描述】:

我一直在尝试定制一个 tomcat 厨师食谱,但我所做的似乎没有改变 tomcat 的安装。我正在使用无业游民,即。

vagrant destroy && vagrant up

在 Vagrantfile 中

  config.vm.provision :chef_solo do |chef|
      chef.add_recipe "apt"
      chef.add_recipe "nginx-app"
      chef.add_recipe "tomcat-app"
   end

cookbooks/tomcat-app/recipes/default.rb

#
# Cookbook Name:: tomcat-app
# Recipe:: default

package "tomcat7" do
  action :install
end

cookbooks/tomcat-app/attributes.rb

node.default["tomcat"]["port"] = 8083 <-- can't seem to make this apply

谢谢,

【问题讨论】:

只安装一个包但不配置它... 你是在使用 opscode 的 tomcat 食谱还是在使用其他食谱?食谱代码是否可以在任何地方查看?正如 Roland 指出的那样,如果您的食谱代码只是您没有告诉厨师任何关于在何处以及如何使用该属性的信息。 【参考方案1】:

作者寄语

这个答案现在已经 5 岁了。它可能不适用于您今天的场景。


我怀疑您正在编写自己的 tomcat 食谱?节点属性覆盖仅适用于此处记录的开源说明书:

java tomcat

示例

这是一个利用 vagrant 的测试厨房示例。

├── .kitchen.yml
├── Berksfile
└── test
    └── integration
        ├── default
        │   └── serverspec
        │       └── tomcat_spec.rb
        └── roles
            └── tomcat.json

“tomcat”角色说明了如何设置运行列表和覆盖属性。

.kitchen.yml

---
driver:
  name: vagrant

provisioner:
  name: chef_zero

platforms:
  - name: ubuntu-14.04

suites:
  - name: default
    run_list:
      - role[tomcat]
    attributes:

测试/集成/角色/tomcat.json


  "name": "tomcat",
  "description": "Runs tomcat with oracle JDK",
  "override_attributes": 
    "java": 
      "jdk_version": 8,
      "install_flavor": "oracle",
      "oracle": 
        "accept_oracle_download_terms": true
      
    ,
    "tomcat": 
      "base_version": 7,
      "port": 8081
    
  ,
  "run_list": [
    "recipe[apt]",
    "recipe[java]",
    "recipe[tomcat]"
  ]

伯克斯文件

Berkshelf 会自动从厨师超市下载食谱。

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

cookbook "apt"
cookbook "java"
cookbook "tomcat"

测试/集成/serverspec/tomcat_spec.rb

require 'serverspec'

set :backend, :exec

describe service('tomcat7') do
  it  should be_running 
end

describe port('8081') do
  it  should be_listening 
end

describe process('java') do
  it  should be_running 
  its(:args)  should match /org.apache.catalina.startup.Bootstrap/ 
end

【讨论】:

谢谢,很好的解释 您好,我的tomcat版本是7.0.62。 KCI 在it should be_running 上失败。但是,在服务器上,tomcat 进程运行正常。你能说明为什么会这样吗?

以上是关于如何在 Chef 中自定义 tomcat 食谱的主要内容,如果未能解决你的问题,请参考以下文章

Chef - 如何在本地运行食谱

在 Chef 食谱中使用变量

如何从 Chef 食谱中的库访问当前节点?

无法在 AWS Opsworks 上使用 Chef 12 查找 Chef 社区食谱

Chef - 如何重新启动 VM 并继续执行操作

如何使用 Centos Vagrant guest(类似 Amazon Linux)在 Linux (Debian9) 上本地调试 Opsworks/Chef 11.10.4 食谱