Comment faire de chef vérifier paquet RPM et ensuite installer?

Je suis actuellement en utilisant un chef cuisinier pour installer le RPM JDK paquet, mais le problème est qu'il n'chaque fois, même si le package est déjà téléchargé et installé. J'ai essayé de trouver une option pour vérifier avant l'installation, mais il n'y avait pas tout. Est-il un moyen de contourner ce problème ces que je ne peux ignorer les paquets qui sont déjà installés? De gestion de paquets Debian saute déjà les paquets installés par défaut, mais le gestionnaire de paquetages RPM ne semble pas le faire.

[Tue, 23 Oct 2012 10:34:32 -0500] INFO: Processing remote_file[/var/chef/cache/jdk-1.6-u30-linux-amd64.rpm] action create_if_missing (sun_java::default line 18)
[Tue, 23 Oct 2012 10:34:36 -0500] INFO: Processing package[jdk-1.6-u30-linux-amd64.rpm] action upgrade (sun_java::default line 25)
[Tue, 23 Oct 2012 10:37:15 -0500] INFO: Processing bash[update-alternatives java] action nothing (sun_java::default line 40)

La recette est ci-dessous:

    urlVersion = "1."+node["sun_java"]["version"].sub(/[u]/, "-u")
    node.default["sun_java"]["rpm_url"] = "http://***/#{urlVersion}/jdk-#{urlVersion}-linux-#{node["sun_java"]["arch"]}.rpm"

    #Check that we are using the .rpm file because of the recent change
    if File.extname(File.basename(node["sun_java"]["rpm_url"]))!=".rpm"
      raise "You must use the jdk*.rpm file to install the Sun JDK. You can get it from the jdk*-rpm.bin file by running the command './jdk*-rpm.bin -x'"
    end

    javaRPM = File.basename(node["sun_java"]["rpm_url"])

    remote_file "#{Chef::Config[:file_cache_path]}/#{javaRPM}" do
      action :create_if_missing
      source node["sun_java"]["rpm_url"]
      mode "0755"
      backup false
    end

    package javaRPM do
      action :install
      source "#{Chef::Config[:file_cache_path]}/#{javaRPM}"
      options "--nogpgcheck" # sun/oracle doesn't sign their RPMs o_O
      notifies :run, "bash[update-alternatives java]", :immediately
    end

    javaHomeFolder = "/usr/java/jdk1.#{node["sun_java"]["version"].sub(/[u]/, ".0_")}"
    jdkFolder = "#{javaHomeFolder}/bin"
    slaveString = ""

    node["sun_java"]["update_slaves"].each do |java_bin|
      slaveString = slaveString + "--slave \"/usr/bin/#{java_bin}\" \"#{java_bin}\" \"#{jdkFolder}/#{java_bin}\" "
    end

    bash "update-alternatives java" do
      action :nothing
      code <<-EOH
        update-alternatives --install "/usr/bin/java" "java" "#{jdkFolder}/java" 1 #{slaveString}
        update-alternatives --set java #{jdkFolder}/java
      EOH
    end

    #Remove old environment then notify new environment to be created
    ruby_block "delete_environement" do
            block do
                editBashrc = Chef::Util::FileEdit.new("/etc/profile")
                    editBashrc.search_file_delete_line(/^.*#JAVA_HOME environment settings.*$/)
                    editBashrc.search_file_delete_line(/^.*#Auto-generated by Chef Cookbook sun_java.*$/)
                    editBashrc.search_file_delete_line(/^.*export JAVA_HOME=.*$/)
                    editBashrc.write_file 
            end
            action :create
    end

    #create environment of root user
    execute "create_environment" do
      user "root"
      command "echo -e '#JAVA_HOME environment settings\n#Auto-generated by Chef Cookbook sun_java\nexport JAVA_HOME=#{javaHomeFolder}' >> /etc/profile"
    end
Pouvez-vous montrer la partie de votre recette où vous appelez ces éléments?
J'ai ajouté à la recette.

OriginalL'auteur noMAD | 2012-10-23