Search code examples
tomcat7chef-infrachef-recipecookbook

Unable to set jdoconfig.xml and appname.properties templates for the war file deployed in tomcat7/webapps


Recipe:

include_recipe "lgjava"
include_recipe "lgtomcat"


remote_file "/usr/local/tomcat7/webapps/web.war" do  #this file places web.war in the specified path
  source "http://path/to/web.war"
  action :create_if_missing
end


template "jdoconfig.xml" do
  source "jdoconfig.xml.erb"
  path "/usr/local/tomcat7/webapps/web/WEB-INF/classes/META-INF/jdoconfig.xml"
  action :create_if_missing
  mode "0755"
end

template "appname.properties" do
  source "appname.properties.erb"
  path "/usr/local/tomcat7/webapps/web/WEB-INF/classes/appname.properties"
  action :create_if_missing
  mode "0755"
end

Execution:

 Recipe: lgwebapp::default

  * remote_file[/usr/local/tomcat7/webapps/web.war] action create_if_missing
    - create new file /usr/local/tomcat7/webapps/web.war
    - update content in file /usr/local/tomcat7/webapps/web.war from none to ac4b77
    (file sizes exceed 10000000 bytes, diff output suppressed)
    - restore selinux security context

  * template[jdoconfig.xml] action create_if_missing
    * Parent directory /usr/local/tomcat7/webapps/web/WEB-INF/classes/META-INF does not exist.

    ================================================================================
    Error executing action `create_if_missing` on resource 'template[jdoconfig.xml]'
    ================================================================================

    Chef::Exceptions::EnclosingDirectoryDoesNotExist
    ------------------------------------------------
    Parent directory /usr/local/tomcat7/webapps/web/WEB-INF/classes/META-INF does not exist.

    Resource Declaration:
    ---------------------
    # In /var/chef/cache/cookbooks/lgwebapp/recipes/default.rb

         20: template "jdoconfig.xml" do
         21:   source "jdoconfig.xml.erb"
         22:   path "/usr/local/tomcat7/webapps/web/WEB-INF/classes/META-INF/jdoconfig.xml"
         23:   action :create_if_missing
         24:   mode "0755"
         25: end
         26: 

    Compiled Resource:
    ------------------
        # Declared in /var/chef/cache/cookbooks/lgwebapp/recipes/default.rb:20:in `from_file'

        template("jdoconfig.xml") do
          provider Chef::Provider::Template
          action [:create_if_missing]
          retries 0
          retry_delay 2
          guard_interpreter :default
          path "/usr/local/tomcat7/webapps/web/WEB-INF/classes/META-INF/jdoconfig.xml"
          backup 5
          atomic_update true
          source "jdoconfig.xml.erb"
          cookbook_name "lgwebapp"
          recipe_name "default"
          mode "0755"
        end

Recipe: lgtomcat::default
  * service[tomcat7] action restart
    - restart service service[tomcat7]

Running handlers:
[2015-01-14T10:38:44+00:00] ERROR: Running exception handlers
Running handlers complete

[2015-01-14T10:38:44+00:00] ERROR: Exception handlers complete

[2015-01-14T10:38:44+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
Chef Client failed. 6 resources updated in 6.532117395 seconds

[2015-01-14T10:38:44+00:00] ERROR: template[jdoconfig.xml] (lgwebapp::default line 20) had an error: Chef::Exceptions::EnclosingDirectoryDoesNotExist: Parent directory /usr/local/tomcat7/webapps/web/WEB-INF/classes/META-INF does not exist.

[2015-01-14T10:38:44+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

P.S: the web.war file is deployed under tomcat7/webapps and its extracted too. I manually checked it, the file exists in the specific location. Why is that it's not able to locate using 'templates'?


Solution

  • The below code solved my problem:

    ruby_block 'wait for tomcat' do
      block do
       true until ::File.exists?("#{node['webapp']['webinf_dir']}")
      end
    end