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.
J'ai ajouté à la recette.
OriginalL'auteur noMAD | 2012-10-23
Vous devez vous connecter pour publier un commentaire.
Je sais que c'est vieux, mais je crois que vous voulez:
OriginalL'auteur Mark
Je ne suis pas familier avec les RPM, mais vous pouvez voir comment le chef apprend si le paquet est déjà installé (le load_current_resource méthode). Vous pouvez mettre en place quelque chose de similaire dans votre recette et ajouter cette condition à remote_file:
OriginalL'auteur Draco Ater
Vous pouvez d'abord supprimer le package à l'aide de
ignore_failure
et puis l'installerPuis extraire le fichier
Puis installez le paquet
Cela fonctionne avec n'importe quel type de paquet. Pour les tours, idéalement, vous ne devez pas supprimer le paquet.
allow_downgrade
devrait fonctionner. Mais il ne fonctionne pas pour moi.Pour la somme de contrôle de l'utilisation
curl packageUrl | shasum -a 256
OriginalL'auteur zainengineer
Chef fournir une ressource pour les rpm_packages.
et vous pouvez trouver un grand nombre d'exemples qui montrent comment chef vérifier si un paquet est installé
OriginalL'auteur Robert
Il est une autre façon avec not_if, voir un exemple ci-dessous
OriginalL'auteur Thuan Ng