diff --git a/apps/backend/subscription/steps/adapter.py b/apps/backend/subscription/steps/adapter.py index e78335bee..31e3829a9 100644 --- a/apps/backend/subscription/steps/adapter.py +++ b/apps/backend/subscription/steps/adapter.py @@ -9,6 +9,7 @@ specific language governing permissions and limitations under the License. """ import copy +import itertools import logging import typing from collections import ChainMap, OrderedDict, defaultdict @@ -23,6 +24,7 @@ from apps.core.tag.models import Tag from apps.core.tag.targets.plugin import PluginTargetHelper from apps.node_man import constants, models +from apps.node_man.constants import CPU_TUPLE, PLUGIN_OS_TUPLE logger = logging.getLogger("app") @@ -297,20 +299,26 @@ def format2policy_packages_new( # 如果 latest 是 tag,走取指定版本的逻辑 # 如果 latest 指定版本没有某个版本的插件包,取 id 最大版本 packages = models.Packages.objects.filter(project=plugin_name, version=plugin_version) - os_cpu_exists = models.Packages.objects.filter( - project=plugin_name, version=plugin_version, os="linux", cpu_arch="x86_64" - ).exists() - package = models.Packages.objects.none() - if not os_cpu_exists: - max_pkg_id: int = self.max_ids_by_key( - list( - models.Packages.objects.filter(project=plugin_name, os="linux", cpu_arch="x86_64").values( - "id", "os", "cpu_arch" - ) - ) - )[0] - package = models.Packages.objects.filter(id=max_pkg_id) - packages = packages.union(package) + package_list = models.Packages.objects.none() + for os, cpu_arch in itertools.product(PLUGIN_OS_TUPLE, CPU_TUPLE): + version_exists = models.Packages.objects.filter( + project=plugin_name, version=plugin_version, os=os, cpu_arch=cpu_arch + ).exists() + if not version_exists: + os_cpu_exists = models.Packages.objects.filter( + project=plugin_name, os=os, cpu_arch=cpu_arch + ).exists() + if os_cpu_exists: + max_pkg_id: int = self.max_ids_by_key( + list( + models.Packages.objects.filter(project=plugin_name, os=os, cpu_arch=cpu_arch).values( + "id", "os", "cpu_arch" + ) + ) + )[0] + package = models.Packages.objects.filter(id=max_pkg_id) + package_list = package_list.union(package) + packages = packages.union(package_list) else: max_pkg_ids: List[int] = self.max_ids_by_key( list(models.Packages.objects.filter(project=plugin_name).values("id", "os", "cpu_arch"))