From d1870f8bf97431cecc829fca49ece76b82b89178 Mon Sep 17 00:00:00 2001 From: YoussefKhaildAli Date: Thu, 3 Jul 2025 16:05:32 +0300 Subject: [PATCH] Add dependencies installation to specific versions --- plugins/modules/jenkins_plugin.py | 48 ++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/plugins/modules/jenkins_plugin.py b/plugins/modules/jenkins_plugin.py index fd3972cbed..ee03c534ab 100644 --- a/plugins/modules/jenkins_plugin.py +++ b/plugins/modules/jenkins_plugin.py @@ -112,7 +112,6 @@ options: with_dependencies: description: - Defines whether to install plugin dependencies. - - This option takes effect only if the O(version) is not defined. type: bool default: true @@ -482,6 +481,37 @@ class JenkinsPlugin(object): break + def _install_dependencies(self): + dependencies = self._get_versioned_dependencies() + self.dependencies_states = [] + + for dep_name, dep_version in dependencies.items(): + if not any(p['shortName'] == dep_name and p['version'] == dep_version for p in self.installed_plugins): + dep_params = self.params.copy() + dep_params['name'] = dep_name + dep_params['version'] = dep_version + dep_module = self.module + dep_module.params = dep_params + dep_plugin = JenkinsPlugin(dep_module) + if not dep_plugin.install(): + self.dependencies_states.append( + { + 'name': dep_name, + 'version': dep_version, + 'state': 'absent'}) + else: + self.dependencies_states.append( + { + 'name': dep_name, + 'version': dep_version, + 'state': 'present'}) + else: + self.dependencies_states.append( + { + 'name': dep_name, + 'version': dep_version, + 'state': 'present'}) + def _install_with_plugin_manager(self): if not self.module.check_mode: # Install the plugin (with dependencies) @@ -542,6 +572,10 @@ class JenkinsPlugin(object): plugin_content = plugin_fh.read() checksum_old = hashlib.sha1(plugin_content).hexdigest() + # Install dependencies + if self.params['with_dependencies']: + self._install_dependencies() + if self.params['version'] in [None, 'latest']: # Take latest version plugin_urls = self._get_latest_plugin_urls() @@ -675,6 +709,18 @@ class JenkinsPlugin(object): urls.append("{0}/{1}".format(base_url, update_json)) return urls + def _get_versioned_dependencies(self): + # Get dependencies for the specified plugin version + plugin_data = self._download_updates()['dependencies'] + + dependencies_info = { + dep["name"]: self._get_latest_compatible_plugin_version(dep["name"]) + for dep in plugin_data + if not dep.get("optional", False) + } + + return dependencies_info + def _download_updates(self): try: updates_file, download_updates = download_updates_file(self.params['updates_expiration'])