厨师Solo Jetty Cookbook属性

时间:2013-10-06 17:04:38

标签: jetty vagrant chef-solo

我遇到的问题是我的Vagrantfile中的chef.json属性似乎被忽略/覆盖。

环境:Mac OS X 10.8主机,Ubuntu 12.04 guest虚拟机在VirtualBox 4.18中虚拟化。使用Berkshelf用于食谱依赖,使用Opscode烹饪书获取所有食谱。

盒子旋转正常,但是我正在尝试配置更多,就像我下载Jetty并取消标记存档一样,而不是从/usr/share/jetty到整个文件系统的一堆符号链接它似乎是默认的方式。

这是我的Vagrantfile的厨师部分:

config.vm.provision :chef_solo do |chef|

  chef.json = { :java => {
                :install_flavor => "oracle",
                :jdk_version => '7',
                :oracle => {
                  :accept_oracle_license_terms => true 
                }
              },
              :jetty => {
                :port => '8080',
                :home => '/opt/jetty',
                :config_dir => '/opt/jetty/conf',
                :log_dir => '/opt/jetty/log',
                :context_dir => '/opt/jetty/context',
                :webapp_dir => '/opt/jetty/webapp'
              }
            }

 chef.add_recipe "apt"
 chef.add_recipe "mongodb::default"
 chef.add_recipe "java"
 chef.add_recipe "jetty"
end

Chef似乎在阅读chef.json,因为我可以在Vagrantfile中更改Jetty的端口。

我试图在Jetty食谱的attributes/default.rb中更改这些属性,但这也无济于事。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

如果您查看jetty/recipes/default.rb

中的以下块
jetty_pkgs = value_for_platform(
  ["debian","ubuntu"] => {
    "default" => ["jetty","libjetty-extra"]
  },
  ["centos","redhat","fedora"] => {
    "default" => ["jetty6","jetty6-jsp-2.1","jetty6-management"]
  },
  "default" => ["jetty"]
)
jetty_pkgs.each do |pkg|
  package pkg do
    action :install
  end
end

对于Debian / Ubuntu,默认配方使用官方存储库中的DEB包而不是您想要的(从官方网站下载二进制文件,将其解压缩到您的首选位置)。

因为DEB包有自己的规范(运行dpkg -L jetty来查看它们的文件/目录结构),我认为这就是为什么你的chef.json中的属性覆盖不起作用。

您可以启用调试输出,以便在再次运行配置时查看更多信息

VAGRANT_LOG=debug vagrant up

  

注意:如果您希望以您喜欢的方式安装Jetty,最好还是编写自己的食谱来下载二进制和解压设置权限并执行其他操作; - )