Livre de recettes Vagrant, Chef-solo et Java :Erreur lors de l'exécution de l'action `install` sur la ressource 'java_ark[jdk]'
Question
J'ai configuré une boîte Vagrant avec précision64 et j'essaie d'installer Oracle Java 7 à l'aide de The Java Cookbook (http://community.opscode.com/cookbooks/java) mais j'obtiens l'erreur :
Error executing action `install` on resource 'java_ark[jdk]'
je cours Vagabond et obtenez le résultat suivant dans Terminal :
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise64'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] -- 80 => 8080 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
[default] The guest additions on this VM do not match the installed version of
VirtualBox! In most cases this is fine, but in rare cases it can
prevent things such as shared folders from working properly. If you see
shared folder errors, please make sure the guest additions within the
virtual machine match the version of VirtualBox you have installed on
your host and reload your VM.
Guest Additions Version: 4.2.0
VirtualBox Version: 4.3
[default] Mounting shared folders...
[default] -- /vagrant
[default] -- /tmp/vagrant-chef-1/chef-solo-2/roles
[default] -- /tmp/vagrant-chef-1/chef-solo-1/cookbooks
[default] Running provisioner: chef_solo...
Generating chef JSON and uploading...
Running chef-solo...
stdin: is not a tty
[2014-01-09T09:25:53+00:00] INFO: *** Chef 10.14.2 ***
[2014-01-09T09:25:55+00:00] INFO: Setting the run_list to ["role[myrecipes]"] from JSON
[2014-01-09T09:25:55+00:00] INFO: Run List is [role[myrecipes]]
[2014-01-09T09:25:55+00:00] INFO: Run List expands to [java]
[2014-01-09T09:25:55+00:00] INFO: Starting Chef Run for precise64
[2014-01-09T09:25:55+00:00] INFO: Running start handlers
[2014-01-09T09:25:55+00:00] INFO: Start handlers complete.
[2014-01-09T09:25:56+00:00] INFO: ruby_block[set-env-java-home] called
[2014-01-09T09:25:56+00:00] INFO: file[/etc/profile.d/jdk.sh] mode changed to 755
[2014-01-09T09:25:56+00:00] INFO: file[/etc/profile.d/jdk.sh] created file /etc/profile.d/jdk.sh
[2014-01-09T09:25:56+00:00] INFO: Adding jdk to /usr/lib/jvm/jdk1.7.0_45
================================================================================
Error executing action `install` on resource 'java_ark[jdk]'
================================================================================
NoMethodError
-------------
undefined method `headers' for Chef::Resource::RemoteFile
Cookbook Trace:
---------------
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/java/providers/ark.rb:70:in `download_direct_from_oracle'
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/java/providers/ark.rb:67:in `download_direct_from_oracle'
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/java/providers/ark.rb:108:in `class_from_file'
Resource Declaration:
---------------------
# In /tmp/vagrant-chef-1/chef-solo-1/cookbooks/java/recipes/oracle.rb
46:
47: java_ark "jdk" do
48: url tarball_url
49: checksum tarball_checksum
50: app_home java_home
51: bin_cmds bin_cmds
52: alternatives_priority 1062
53: action :install
54: end
55:
Compiled Resource:
------------------
# Declared in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/java/recipes/oracle.rb:47:in `from_file'
java_ark("jdk") do
app_home "/usr/lib/jvm/java-7-oracle-amd64"
checksum "bea330fcbcff77d31878f21753e09b30"
retry_delay 2
owner "root"
default true
url "http://download.oracle.com/otn-pub/java/jdk/7u45-b18/jdk-7u45-linux-x64.tar.gz"
retries 0
alternatives_priority 1062
recipe_name "oracle"
action [:install]
bin_cmds ["appletviewer", "apt", "ControlPanel", "extcheck", "idlj", "jar", "jarsigner", "java", "javac", "javadoc", "javafxpackager", "javah", "javap", "javaws", "jcmd", "jconsole", "jcontrol", "jdb", "jhat", "jinfo", "jmap", "jps", "jrunscript", "jsadebugd", "jstack", "jstat", "jstatd", "jvisualvm", "keytool", "native2ascii", "orbd", "pack200", "policytool", "rmic", "rmid", "rmiregistry", "schemagen", "serialver", "servertool", "tnameserv", "unpack200", "wsgen", "wsimport", "xjc"]
cookbook_name :java
supports {:exception=>true, :report=>true}
end
[2014-01-09T09:25:56+00:00] ERROR: Running exception handlers
[2014-01-09T09:25:56+00:00] ERROR: Exception handlers complete
[2014-01-09T09:25:56+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2014-01-09T09:25:56+00:00] FATAL: NoMethodError: java_ark[jdk] (java::oracle line 47) had an error: NoMethodError: undefined method `headers' for Chef::Resource::RemoteFile
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.
Mon fichier Vagrant
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.network :forwarded_port, guest: 80, host: 8080
# Chef-solo
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["site-cookbooks", "cookbooks"]
chef.roles_path = "roles"
chef.add_role "myrecipes"
end
end
rôles/mesrecipes.rb
name "myrecipes"
default_attributes(
"java" => {
"install_flavor" => "oracle",
"jdk_version" => 7,
"oracle" => {
"accept_oracle_download_terms" => true
}
}
)
run_list(
"recipe[apt]",
"recipe[openssl]",
"recipe[java]"
)
La solution
Je pense que le problème vient d'une inadéquation entre la version de Chef que vous utilisez (10.14.2) et la java
livre de recettes.
La mise en œuvre du java_ark
Le fournisseur de ressources du livre de recettes tente d'utiliser le header
méthode du Chef remote_file
ressource lorsqu'il télécharge le programme d'installation d'Oracle.Le problème est que le header
la méthode n’a été mise en œuvre que sur le remote_file
ressource dans Chef 11.6.0 (d'après ma lecture du code source de chef sur Github).
La solution consiste soit à mettre à niveau vers la dernière version de Chef, soit à utiliser une ancienne version de java
livre de recettes qui fonctionne avec Chef 10.x.(Cette dernière est probablement une mauvaise idée...sauf si vous êtes prêt à définir manuellement la dernière URL de téléchargement Oracle et la somme de contrôle dans les attributs pertinents...)