2
votes

I've been trying to customise a tomcat chef recipe but nothing I'm doing seems to change the tomcat installation. I'm using vagrant ie.

vagrant destroy && vagrant up

In 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

Thanks,

1
that just installs a package but does not configure it…Roland
Are you using opscode's tomcat cookbook or are you using other cookbook? Is the cookbook code available anywhere to check? As Roland pointed if your cookbook code is only that you are not telling chef anything about where and how to use the attribute.Javier Cortejoso

1 Answers

1
votes

Author's Message

This answer is now 5 years old. It may not apply to your scenario today.


I suspect you're writing your own tomcat cookbook? The node attribute overrides only work with the open source cookbooks documented here:

Example

This is a test kitchen example that leverages vagrant.

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

The "tomcat" role illustrates how to set the run-list and override the attributes.

.kitchen.yml

---
driver:
  name: vagrant

provisioner:
  name: chef_zero

platforms:
  - name: ubuntu-14.04

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

test/integration/roles/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]"
  ]
}

Berksfile

Berkshelf automatically downloads cookbooks from the chef supermarket.

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

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

test/integration/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