0

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

环境:Mac OS X 10.8 主机,在 VirtualBox 4.18 中虚拟化的 Ubuntu 12.04 来宾。对食谱依赖项使用 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 的端口。

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

我错过了什么?

4

1 回答 1

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,最好编写自己的说明书来下载二进制文件并解压缩设置权限并执行其他操作;-)

于 2013-10-07T10:19:48.367 回答