Ohai Chefs:
I’m setting up a node that will have Nginx, Tomcat, and a Tomcat application running JDK7.
I’ve written a wrapper cookbook around the community tomcat cookbook, mostly to add an `application` LWRP to grab the artifact from our Artifactory repository and deploy it. Testing this cookbook, called `ome_tomcat` via Vagrant works perfectly. Here’s the run-list from the ome_tomcat Vagrantfile:
config.vm.provision :chef_solo do |chef|
chef.json = {
:tomcat => {
:base_version => '7',
:java_options => "-server -Xms768M -Xmx768M -XX:MaxPermSize=256M -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dreusestatement.debug.sql=true -Ddevel -DdebugOn=true -DextendedLoggingOn -Dlog4j.configuratorClass=ksutelc.common.log.TelcConfigurator -DdisableProcessingUnhandledExceptions"
}
}
chef.run_list = [
"recipe[est-apt]",
"recipe[ome_java::jdk7]",
"recipe[ome_tomcat::default]"
]
end
end
Another wrapper cookbook I have is `ome_nginx`, which like the Tomcat wrapper, adds a LWRP we use.
I also have a cookbook for the application getting installed. It’s called `ome_telecom_creditcard`. Here is the run list from the Vagrantfile for the application deployment cookbook:
config.vm.provision :chef_solo do |chef|
chef.log_level = :debug
chef.json = {
:tomcat => {
:base_version => '7',
:java_options => "-server -Xms768M -Xmx768M -XX:MaxPermSize=256M -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dreusestatement.debug.sql=true -Ddevel -DdebugOn=true -DextendedLoggingOn -Dlog4j.configuratorClass=ksutelc.common.log.TelcConfigurator -DdisableProcessingUnhandledExceptions"
},
:ome_tomcat => {
:version => "2.1.1",
:artifact_checksum => '522726822fcc79e52f4fe0c5240eca9b'
}
}
chef.run_list = [
"recipe[est-apt]",
"recipe[ome_java::jdk7]",
"recipe[ome_tomcat::default]",
"recipe[ome_nginx::default]",
"recipe[ome_telecom_creditcard::default]"
]
end
end
When I run `vagrant up` against the ome_telecom_creditcard Vagrantfile, the ome_tomcat cookbook appears to be ignored. Where it includes `tomcat` never happens.
If I comment out the last recipe in the run_list, like so:
…
chef.run_list = [
"recipe[est-apt]",
"recipe[ome_java::jdk7]",
"recipe[ome_tomcat::default]",
"recipe[ome_nginx::default]",
# "recipe[ome_telecom_creditcard::default]”
…
Everything works. Obviously the issue is with the default recipe for ome_telecom_creditcard. However for the life of me I can’t see what I’m doing in this recipe that would cause the tomcat process to not even happen.
I’ve turned the log level to :debug and traced through all the loading of attributes and recipes and can see where it load both the `tomcat::default` and `ome_tomcat::default` recipes, but neither executes.
I am stumped as to what I’ve screwed up.
The default recipe for `ome_telecom_creditcard` uses the LWRP created by ome_tomcat and ome_nginx to deploy the artifact if and when it’s version number changes.
Here is that recipe:
# Remove the previous credit-card app
ome_tomcat_application "credit-card.war" do
action :remove
# version "2.1.1"
notifies :restart, "service[tomcat7]"
end
# Deploy the Telecom credit-card app
ome_tomcat_application "credit-card.war" do
# version "2.1.1"
# artifact_checksum = '522726822fcc79e52f4fe0c5240eca9b'
action :deploy
end
# Include the OME Nginx wrapper cookbook and override the default_root
# attribute
node.default['nginx']['default_root'] = '/usr/share/nginx/www'
include_recipe 'ome_nginx::default'
# Populate Nginx SSL directory with key and certificate
cookbook_file "www-secure.telecom.cer" do
path "#{node['ome_nginx']['ssl_directory_path']}/www-secure.telecom.cer"
owner "www-data"
group "root"
mode "0644"
end
cookbook_file "www-secure.telecom.key" do
path "#{node['ome_nginx']['ssl_directory_path']}/www-secure.telecom.key"
owner "www-data"
group "root"
mode "0600"
end
# Setup the site configurations with Nginx
ome_nginx_configuration "credit-card.conf" do
action :create
end
ome_nginx_configuration "credit-card-ssl.conf" do
action :create
notifies :restart, 'service[nginx]'
end
# Open up the ports required by the application
include_recipe "firewall"
firewall_rule "https" do
port 443
protocol :tcp
action :allow
end
firewall_rule "http" do
port 8080
protocol :tcp
action :allow
end
firewall_rule "http" do
port 80
protocol :tcp
action :allow
end
Any help or ideas will be greatly appreciated.
Thanks
Mark