【问题标题】:Why are chef attributes being applied or ignored?为什么厨师属性被应用或忽略?
【发布时间】:2013-11-14 07:27:24
【问题描述】:

我正在尝试设置 Chef 角色来安装 openjdk-7-jdk 和 tomcat7。我正在使用 javatomcat 的 OpsCode 社区食谱。通过阅读文档,我相信我需要覆盖node[:java][:jdk_version]node[:tomcat][:base_version]

我已经创建了following role JSON file

name "tomcat7"
run_list "recipe[tomcat]"
default_attributes(
    :java => {
        :jdk_version => "7"
    },
    :tomcat => {
        :base_version => "7",
        :java_options => "-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"
    }
)

当我尝试使用 Vagrant 启动 VM 时,它会出现以下错误(请注意,它同时提到了 tomcat6tomcat7):

[2013-10-21T14:05:44-04:00] INFO: Processing package[sun-java6-jdk] action purge (java::default line 25)
[2013-10-21T14:05:44-04:00] INFO: Processing package[sun-java6-bin] action purge (java::default line 25)
[2013-10-21T14:05:44-04:00] INFO: Processing package[sun-java6-jre] action purge (java::default line 25)
[2013-10-21T14:05:44-04:00] INFO: Processing package[tomcat7] action install (tomcat::default line 39)
[2013-10-21T14:05:52-04:00] INFO: Processing package[tomcat7-admin] action install (tomcat::default line 39)
[2013-10-21T14:05:53-04:00] INFO: Processing directory[/usr/share/tomcat6/lib/endorsed] action create (tomcat::default line 45)
[2013-10-21T14:05:53-04:00] INFO: directory[/usr/share/tomcat6/lib/endorsed] created directory /usr/share/tomcat6/lib/endorsed
[2013-10-21T14:05:53-04:00] INFO: directory[/usr/share/tomcat6/lib/endorsed] mode changed to 755
[2013-10-21T14:05:53-04:00] INFO: Processing service[tomcat] action enable (tomcat::default line 83)
[2013-10-21T14:05:53-04:00] INFO: Processing service[tomcat] action start (tomcat::default line 83)
[2013-10-21T14:05:53-04:00] INFO: Processing template[/etc/default/tomcat7] action create (tomcat::default line 122)
[2013-10-21T14:05:53-04:00] INFO: template[/etc/default/tomcat7] backed up to /var/chef/backup/etc/default/tomcat7.chef-20131021140553
[2013-10-21T14:05:53-04:00] INFO: template[/etc/default/tomcat7] updated content
[2013-10-21T14:05:53-04:00] INFO: template[/etc/default/tomcat7] owner changed to 0
[2013-10-21T14:05:53-04:00] INFO: template[/etc/default/tomcat7] group changed to 0    [2013-10-21T14:05:53-04:00] INFO: template[/etc/default/tomcat7] mode changed to 644
[2013-10-21T14:05:53-04:00] INFO: Processing template[/etc/tomcat6/server.xml] action create (tomcat::default line 131)

================================================================================
Error executing action `create` on resource 'template[/etc/tomcat6/server.xml]'
================================================================================

Chef::Exceptions::EnclosingDirectoryDoesNotExist
------------------------------------------------
Parent directory /etc/tomcat6 does not exist.

Resource Declaration:
---------------------
# In /tmp/vagrant-chef-1/chef-solo-1/cookbooks/tomcat/recipes/default.rb

130:
131: template "#{node["tomcat"]["config_dir"]}/server.xml" do
132:   source "server.xml.erb"
133:   owner "root"
134:   group "root"
135:   mode "0644"
136:   notifies :restart, "service[tomcat]"
137: end
138:

Compiled Resource:
------------------
# Declared in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/tomcat/recipes/default.rb:131:in `from_file'

template("/etc/tomcat6/server.xml") do
  mode "0644"
  retry_delay 2
  path "/etc/tomcat6/server.xml"
  retries 0
  recipe_name "default"
  owner "root"
  source "server.xml.erb"
  action "create"
  cookbook_name :tomcat
  group "root"
  backup 5
  provider Chef::Provider::Template
end

[2013-10-21T14:05:53-04:00] ERROR: Running exception handlers
[2013-10-21T14:05:53-04:00] ERROR: Exception handlers complete
[2013-10-21T14:05:53-04:00] FATAL: Stacktrace dumped to /tmp/vagrant-chef-1/chef-stacktrace.out
[2013-10-21T14:05:53-04:00] FATAL: Chef::Exceptions::EnclosingDirectoryDoesNotExist: template[/etc/tomcat6/server.xml] (tomcat::default line 131) had an error: Chef::Exceptions::EnclosingDirectoryDoesNotExist: Parent directory /etc/tomcat6 does not exist.
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.

似乎node[:tomcat][:base_version] 属性被覆盖,因为它正在安装tomcat7 和tomcat7-admin。但是,它正在创建 tomcat6 目录。

完整的例子可以在https://github.com/McPolemic/tomcat_chef_example/找到。

在选择默认属性或我的属性时是否有押韵或理由?

【问题讨论】:

  • 您使用的是什么版本的 chef-client/chef-solo?
  • 我在使用 java 食谱时遇到了同样的问题,我找到的唯一解决方案是回滚到版本 1.10.0。
  • @JaredRussell 我使用的是 10.14.2,这是 Vagrant 的默认设置。我现在已经更新到 11.6.2,但我仍然看到这个问题。

标签: java tomcat chef-infra


【解决方案1】:

我很确定这是配方中的错误 - 如果您覆盖 base_version,在某些情况下您还需要覆盖 config_dir。

【讨论】:

  • 这就是我所缺少的。我最终不得不设置一些变量,但我确实让它运行起来了。
  • @AdamLukens 你能说说你是怎么解决的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2018-10-30
相关资源
最近更新 更多