sous-chefs / java

Development repository for the java cookbook
https://supermarket.chef.io/cookbooks/java
Apache License 2.0
387 stars 638 forks source link

openjdk_pkg_install fails when installing older than newest version #711

Closed vytstank closed 6 months ago

vytstank commented 6 months ago

:speaking_head: Foreword

:ghost: Brief Description

openjdk_pkg_install passes single version string to package resource. Property pkg_names is Array by default default_openjdk_pkg_names(version).

First package from pkg_names array obeys pkg_version property, next one is set to "newest available" (nil?) and openjdk install fails.

:pancakes: Cookbook version

11.2.2

:woman_cook: Chef-Infra Version

16.18.0

:tophat: Platform details

Rocky Linux 8, RHEL platform.

As a point, let's use previous Rocky Linux 8.8 release with multiple java-11-openjdk packages.

Steps To Reproduce

Steps to reproduce the behavior:

  1. List available openjdk-11 versions:
dnf info java-11-openjdk --showduplicates | grep -E '(Version|Release)'
Version      : 11.0.19.0.7
Release      : 4.el8
Version      : 11.0.20.0.8
Release      : 2.el8
Version      : 11.0.20.0.8
Release      : 3.el8_8
Version      : 11.0.21.0.9
Release      : 2.el8_8
  1. Use recipe:
openjdk_pkg_install '11' do
  pkg_version '11.0.20.0.8'
  alternatives_priority 1100
end
  1. Compiled resources:
openjdk_pkg_install("11") do
  action [:install]
  default_guard_interpreter :default
  declared_type :openjdk_pkg_install
  cookbook_name "vinted-java"
  recipe_name "reproduce"
  pkg_version "11.0.20.0.8"
  alternatives_priority 1100
  version "11"
  pkg_names ["java-11-openjdk", "java-11-openjdk-devel"]
  java_home "/usr/lib/jvm/java-11"
  bin_cmds ["jaotc", "jar", "jarsigner", "java", "javac", "javadoc", "javap", "jcmd", "jconsole", "jdb", "jdeprscan", "jdeps", "jhsdb", "jimage", "jinfo", "jjs", "jlink", "jmap", "jmod", "jps", "jrunscript", "jshell", "jstack", "jstat", "jstatd", "keytool", "pack200", "rmic", "rmid", "rmiregistry", "serialver", "unpack200"]
end
dnf_package("java-11-openjdk, java-11-openjdk-devel") do
  package_name ["java-11-openjdk", "java-11-openjdk-devel"]
  action [:install]
  default_guard_interpreter :default
  declared_type :package
  cookbook_name "vinted-java"
  version "11.0.20.0.8"
end
  1. Install failure:
Begin output of ["dnf", "-y", "install", "java-11-openjdk-1:11.0.20.0.8-3.el8_8.x86_64", "java-11-openjdk-devel-1:11.0.21.0.9-2.el8_8.x86_64"]
STDERR: Error: 

Problem: package java-11-openjdk-devel-1:11.0.21.0.9-2.el8_8.x86_64 requires java-11-openjdk(x86-64) = 1:11.0.21.0.9-2.el8_8, but none of the providers can be installed

cannot install both java-11-openjdk-1:11.0.21.0.9-2.el8_8.x86_64 and java-11-openjdk-1:11.0.20.0.8-3.el8_8.x86_64

:police_car: Expected behavior

OpenJDK 11 install should succeed.

:heavy_plus_sign: Additional context

pkg_version only accepts string. Making changes locally and passing array makes it work as expected.

Actually, same issue as on old cookbook version, but you could pass array via attributes.

What would be accepted solution:

a) allow to pass Array b) duplicate String pkg_version to array number of time there are packages