From 71af9ec6f7660164fc2108977580cc6fd2dcb70e Mon Sep 17 00:00:00 2001 From: Jonathan Christison Date: Wed, 28 Jan 2026 16:04:28 +0000 Subject: [PATCH] chore(migrate): migrate ET from SBOMer classic This commit ports the initial Errata Tool client implementation and supporting infrastructure from the SBOMer "classic" codebase. In this commit: * **Core Migration:** * Ported Kerberos support and custom HTTP exception handling. * Added Quarkus dependencies for `restclient` and `kerberos`. * Enabled SmallRye Fault Tolerance for external service resilience. * Adjusted package structures and imports to match the current project. * Implemented the initial `fetchBuilds` endpoint in `ErrataToolService`. * **Test Infrastructure:** * Added a script (`hack/anonymize-test-data.sh`) to help sanitize future test payloads. * Replaced some generated mock data with real-world Erratum examples (Advisories: 155577, 157587, 157826, 152887, 157751). * Shifted away from `QuarkusTest` in several instances to reduce test execution overhead. * Note: Testing currently covers basic advisory types and is intended as a starting point. Source Reference: * Ported from SBOMer classic at commit: [f1c3bca](https://github.com/sbomer-project/sbomer/tree/f1c3bca62becee57dedbdcd4105f56d395cfff7c) --- hack/anonymize-test-data.sh | 147 + pom.xml | 22 +- .../et/adapter/out/ErrataToolService.java | 60 +- .../et/adapter/out/errata/ErrataClient.java | 219 + .../out/errata/ErrataQueryParameters.java | 51 + .../et/adapter/out/errata/dto/Errata.java | 179 + .../out/errata/dto/ErrataBuildList.java | 87 + .../adapter/out/errata/dto/ErrataCDNRepo.java | 67 + .../errata/dto/ErrataCDNRepoNormalized.java | 61 + .../et/adapter/out/errata/dto/ErrataPage.java | 54 + .../adapter/out/errata/dto/ErrataProduct.java | 65 + .../adapter/out/errata/dto/ErrataRelease.java | 72 + .../adapter/out/errata/dto/ErrataVariant.java | 89 + .../dto/enums/ErrataCDNContentType.java | 40 + .../dto/enums/ErrataCDNReleaseType.java | 40 + .../out/errata/dto/enums/ErrataStatus.java | 22 + .../out/errata/dto/enums/ErrataType.java | 22 + .../errata/errors/ApplicationException.java | 37 + .../out/errata/errors/ClientException.java | 50 + .../out/errata/errors/ErrorResponse.java | 47 + .../out/errata/errors/ForbiddenException.java | 29 + .../out/errata/errors/NotFoundException.java | 29 + .../errors/ServiceUnavailableException.java | 29 + .../errata/errors/UnauthorizedException.java | 29 + .../errata/errors/ValidationException.java | 32 + .../ErrataCachingKerberosClientSupport.java | 307 + .../ErrataKrb5ClientRequestFilter.java | 50 + .../errata/kerberos/ErrataTicketCache.java | 65 + .../kerberos/KerberosServiceConfig.java | 41 + .../out/errata/kerberos/SubjectTgtPair.java | 89 + src/main/resources/application.properties | 20 +- .../adapter/RestAdvisoryHandlerTest.java | 8 + .../et/adapter/out/ErrataToolServiceTest.java | 150 + .../errata-responses/ANONYMIZATION.md | 106 + src/test/resources/errata-responses/README.md | 111 + .../example-advisory-1/157826_builds.json | 268 + .../example-advisory-1/157826_errata.json | 371 ++ .../example-advisory-2/152887_builds.json | 5784 +++++++++++++++++ .../example-advisory-2/152887_errata.json | 1317 ++++ .../example-advisory-3/157751_builds.json | 80 + .../example-advisory-3/157751_errata.json | 437 ++ .../rpm/example-advisory-1/157548_builds.json | 90 + .../rpm/example-advisory-1/157548_errata.json | 597 ++ .../example-advisory-1/155577_builds.json | 1 + .../example-advisory-1/155577_errata.json | 393 ++ .../example-advisory-2/157587_builds.json | 1 + .../example-advisory-2/157587_errata.json | 402 ++ 47 files changed, 12255 insertions(+), 12 deletions(-) create mode 100755 hack/anonymize-test-data.sh create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/ErrataClient.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/ErrataQueryParameters.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/Errata.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataBuildList.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataCDNRepo.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataCDNRepoNormalized.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataPage.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataProduct.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataRelease.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataVariant.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataCDNContentType.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataCDNReleaseType.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataStatus.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataType.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ApplicationException.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ClientException.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ErrorResponse.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ForbiddenException.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/NotFoundException.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ServiceUnavailableException.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/UnauthorizedException.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ValidationException.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/ErrataCachingKerberosClientSupport.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/ErrataKrb5ClientRequestFilter.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/ErrataTicketCache.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/KerberosServiceConfig.java create mode 100644 src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/SubjectTgtPair.java create mode 100644 src/test/java/org/jboss/sbomer/test/integ/adapter/RestAdvisoryHandlerTest.java create mode 100644 src/test/java/org/jboss/sbomer/test/unit/et/adapter/out/ErrataToolServiceTest.java create mode 100644 src/test/resources/errata-responses/ANONYMIZATION.md create mode 100644 src/test/resources/errata-responses/README.md create mode 100644 src/test/resources/errata-responses/container/example-advisory-1/157826_builds.json create mode 100644 src/test/resources/errata-responses/container/example-advisory-1/157826_errata.json create mode 100644 src/test/resources/errata-responses/container/example-advisory-2/152887_builds.json create mode 100644 src/test/resources/errata-responses/container/example-advisory-2/152887_errata.json create mode 100644 src/test/resources/errata-responses/container/example-advisory-3/157751_builds.json create mode 100644 src/test/resources/errata-responses/container/example-advisory-3/157751_errata.json create mode 100644 src/test/resources/errata-responses/rpm/example-advisory-1/157548_builds.json create mode 100644 src/test/resources/errata-responses/rpm/example-advisory-1/157548_errata.json create mode 100644 src/test/resources/errata-responses/textonly/example-advisory-1/155577_builds.json create mode 100644 src/test/resources/errata-responses/textonly/example-advisory-1/155577_errata.json create mode 100644 src/test/resources/errata-responses/textonly/example-advisory-2/157587_builds.json create mode 100644 src/test/resources/errata-responses/textonly/example-advisory-2/157587_errata.json diff --git a/hack/anonymize-test-data.sh b/hack/anonymize-test-data.sh new file mode 100755 index 0000000..1f69745 --- /dev/null +++ b/hack/anonymize-test-data.sh @@ -0,0 +1,147 @@ +#!/bin/bash + +# Script to anonymize sensitive data in errata-tool test JSON files +# Usage: ./hack/anonymize-test-data.sh + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +TEST_DATA_DIR="$PROJECT_ROOT/src/test/resources/errata-responses" + +echo "Anonymizing test data in: $TEST_DATA_DIR" + +# Function to anonymize builds.json files +anonymize_builds_json() { + local file="$1" + echo " Processing builds file: $file" + + # Create a temporary file + local temp_file="${file}.tmp" + + # Use jq to anonymize sig_key and container_sig_key + jq ' + walk( + if type == "object" then + if has("sig_key") then + .sig_key = { + "name": "anonymized-key", + "keyid": "00000000" + } + else . end | + if has("container_sig_key") then + .container_sig_key = { + "name": "anonymized-key", + "keyid": "00000000" + } + else . end | + if has("added_by") then + .added_by = "anonymized-user@example.com" + else . end + else . end + ) + ' "$file" > "$temp_file" + + # Replace original file + mv "$temp_file" "$file" +} + +# Function to anonymize errata.json files +anonymize_errata_json() { + local file="$1" + echo " Processing errata file: $file" + + # Create a temporary file + local temp_file="${file}.tmp" + + # Use jq to anonymize user data, IDs, and CVEs + jq ' + # Function to anonymize CVE references + def anonymize_cve: + gsub("CVE-[0-9]{4}-[0-9]+"; "CVE-XXXX-XXXXX"); + + # Walk through the entire structure + walk( + if type == "object" then + # Anonymize user object + if has("user") then + .user = { + "id": 9999999, + "login_name": "anonymized-user@example.com", + "realname": "Anonymized User", + "user_organization_id": 999, + "enabled": .user.enabled, + "receives_mail": .user.receives_mail, + "preferences": {}, + "email_address": "anonymized-user@example.com", + "account_name": "anonymized-user", + "type": .user.type + } + else . end | + + # Anonymize kerberos_principal_owner + if has("kerberos_principal_owner") then + .kerberos_principal_owner = { + "name": "anonymized-service@example.com", + "description": "Anonymized service account" + } + else . end | + + # Anonymize reporter_id, assigned_to_id, package_owner_id, manager_id + if has("reporter_id") then + .reporter_id = 9999991 + else . end | + if has("assigned_to_id") then + .assigned_to_id = 9999992 + else . end | + if has("package_owner_id") then + .package_owner_id = 9999993 + else . end | + if has("manager_id") then + .manager_id = 9999994 + else . end | + if has("doc_reviewer_id") then + .doc_reviewer_id = 9999995 + else . end | + if has("product_security_reviewer_id") and .product_security_reviewer_id != null then + .product_security_reviewer_id = 9999996 + else . end + else . end | + + # Anonymize CVE references in strings + if type == "string" then + anonymize_cve + else . end + ) + ' "$file" > "$temp_file" + + # Replace original file + mv "$temp_file" "$file" +} + +# Process all builds.json files +echo "" +echo "=== Anonymizing builds.json files ===" +find "$TEST_DATA_DIR" -type f -name "*_builds.json" | while read -r file; do + anonymize_builds_json "$file" +done + +# Process all errata.json files +echo "" +echo "=== Anonymizing errata.json files ===" +find "$TEST_DATA_DIR" -type f -name "*_errata.json" | while read -r file; do + anonymize_errata_json "$file" +done + +echo "" +echo "=== Anonymization complete ===" +echo "" +echo "Summary of changes:" +echo " - Replaced sig_key and container_sig_key with placeholder values" +echo " - Replaced added_by with anonymized-user@example.com" +echo " - Anonymized all user objects (IDs, names, emails, org IDs)" +echo " - Anonymized reporter_id, assigned_to_id, package_owner_id, manager_id" +echo " - Replaced CVE references with CVE-XXXX-XXXXX" +echo "" + +# Made with Bob diff --git a/pom.xml b/pom.xml index d16af63..b13d27f 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,5 @@ - + 4.0.0 org.jboss.sbomer errata-tool-handler @@ -90,6 +88,19 @@ io.quarkus quarkus-rest-jackson + + io.quarkus + quarkus-smallrye-fault-tolerance + + + io.quarkus + quarkus-rest-client-jackson + + + io.quarkiverse.kerberos + quarkus-kerberos-client + 2.2.0 + io.quarkus quarkus-junit5 @@ -100,6 +111,7 @@ rest-assured test + io.quarkus quarkus-junit5-mockito @@ -127,7 +139,6 @@ ${logback.version} test - org.jboss.sbomer.events sbomer-contracts @@ -194,8 +205,7 @@ - - ${project.build.directory}/${project.build.finalName}-runner + ${project.build.directory}/${project.build.finalName}-runner org.jboss.logmanager.LogManager ${maven.home} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/ErrataToolService.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/ErrataToolService.java index 8f82515..81d9538 100644 --- a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/ErrataToolService.java +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/ErrataToolService.java @@ -1,8 +1,12 @@ package org.jboss.sbomer.handler.et.adapter.out; -import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; +import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.jboss.sbomer.handler.et.adapter.out.errata.ErrataClient; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.Errata; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.ErrataBuildList; import org.jboss.sbomer.handler.et.core.domain.advisory.Advisory; import org.jboss.sbomer.handler.et.core.domain.advisory.Build; import org.jboss.sbomer.handler.et.core.port.spi.ErrataTool; @@ -14,19 +18,65 @@ @ApplicationScoped @Slf4j public class ErrataToolService implements ErrataTool { + + @RestClient + ErrataClient ec; + @Override public List fetchBuilds(String advisoryId) { log.info("Fetching attached builds for advisory with ID: '{}'...", advisoryId); - // Simulate getting a list of varied builds from an advisory from ET - List builds = new ArrayList<>(); - builds.add(new Build(456L, "sbom-service-latest", "CONTAINER_IMAGE", "quay.io/sbomer/sbom-service:latest")); + // Fetch erratum to get content types + Errata erratum = ec.getErratum(advisoryId); + String buildType = erratum.getDetails() + .map(details -> determineBuildType(details.getContentTypes())) + .orElse("UNKNOWN"); - log.debug("Fetched {} builds for advisory with ID: '{}'", builds.size(), advisoryId); + ErrataBuildList erratumBuildList = ec.getBuildsList(advisoryId); + // Flatten the build list and convert BuildItems to Builds + List builds = erratumBuildList.getProductVersions() + .values() + .stream() + .flatMap(productVersionEntry -> productVersionEntry.getBuilds() + .stream() + .flatMap(build -> build.getBuildItems().values().stream())) + .map(buildItem -> new Build( + buildItem.getId(), + buildItem.getNvr(), + buildType, + // NVR or NEVR? + buildItem.getNvr())) + .collect(Collectors.toList()); return builds; } + /** + * Determines the build type based on erratum content types. + * + * @param contentTypes List of content types from the erratum + * @return The build type string (e.g., "CONTAINER_IMAGE", "RPM") + */ + private String determineBuildType(List contentTypes) { + if (contentTypes == null || contentTypes.isEmpty()) { + return "UNKNOWN"; + } + + // Check for container/docker content + if (contentTypes.stream().anyMatch(type -> type.equalsIgnoreCase("docker") || + type.equalsIgnoreCase("container"))) { + return "CONTAINER_IMAGE"; + } + + // Check for RPM content + if (contentTypes.stream().anyMatch(type -> type.equalsIgnoreCase("rpm"))) { + return "RPM"; + } + + // Default to the first content type in uppercase + return contentTypes.get(0).toUpperCase(); + } + @Override public Advisory getInfo(String advisoryId) { // TODO temporary dummy check to test error diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/ErrataClient.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/ErrataClient.java new file mode 100644 index 0000000..e609a7a --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/ErrataClient.java @@ -0,0 +1,219 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; + +import org.eclipse.microprofile.faulttolerance.Retry; +import org.eclipse.microprofile.rest.client.annotation.ClientHeaderParam; +import org.eclipse.microprofile.rest.client.annotation.RegisterProvider; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +//import org.jboss.sbomer.core.rest.faulttolerance.RetryLogger; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.Errata; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.ErrataBuildList; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.ErrataCDNRepo; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.ErrataCDNRepoNormalized; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.ErrataPage; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.ErrataProduct; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.ErrataRelease; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.ErrataVariant; +import org.jboss.sbomer.handler.et.adapter.out.errata.errors.ClientException; +import org.jboss.sbomer.handler.et.adapter.out.errata.errors.ForbiddenException; +import org.jboss.sbomer.handler.et.adapter.out.errata.errors.NotFoundException; +import org.jboss.sbomer.handler.et.adapter.out.errata.errors.UnauthorizedException; +import org.jboss.sbomer.handler.et.adapter.out.errata.kerberos.ErrataKrb5ClientRequestFilter; + +import io.quarkus.rest.client.reactive.ClientExceptionMapper; +import io.smallrye.faulttolerance.api.ExponentialBackoff; +import io.smallrye.reactive.messaging.annotations.Blocking; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.validation.Valid; +import jakarta.ws.rs.BeanParam; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +/** + * A client for Errata + */ +@ApplicationScoped +@ClientHeaderParam(name = "User-Agent", value = "SBOMer") +@RegisterRestClient(configKey = "errata") +@Path("/api/v1") +@RegisterProvider(ErrataKrb5ClientRequestFilter.class) +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public interface ErrataClient { + + // Retrieve the advisory data, the id could be advisory id or advisory name. + @GET + @Path("/erratum/{id}") + @Retry + @ExponentialBackoff + //@BeforeRetry(RetryLogger.class) + Errata getErratum(@PathParam("id") String erratumId); + + // Get the details of a product by its id or short name + @GET + @Path("/products/{id}") + @Retry + @ExponentialBackoff + //@BeforeRetry(RetryLogger.class) + ErrataProduct getProduct(@PathParam("id") String productId); + + // Get the details of a release by its id or name + @GET + @Path("/releases/{id}") + @Retry + @ExponentialBackoff + //@BeforeRetry(RetryLogger.class) + ErrataRelease getRelease(@PathParam("id") String releaseId); + + // Get the details of a variant by its name or id + @GET + @Path("/variants/{id}") + @Retry + @ExponentialBackoff + //@BeforeRetry(RetryLogger.class) + ErrataVariant getVariant(@PathParam("id") String variantId); + + // Get the details of a variant by its name or id + @GET + @Path("/variants") + @Retry + @ExponentialBackoff + //@BeforeRetry(RetryLogger.class) + ErrataPage getAllVariants(@Valid @BeanParam ErrataQueryParameters pageParameters); + + // Add a comment to an advisory. Example request body: {"comment": "This is my comment"} + @POST + @Path("/erratum/{id}/add_comment") + @Retry + @ExponentialBackoff + //@BeforeRetry(RetryLogger.class) + Errata addCommentToErratum(@PathParam("id") String erratumId, String comment); + + // Fetch the Brew builds associated with an advisory. + @GET + @Path("/erratum/{id}/builds_list") + @Retry + @ExponentialBackoff + //@BeforeRetry(RetryLogger.class) + ErrataBuildList getBuildsList(@PathParam("id") String erratumId); + + // Get the CDN repositories + @GET + @Path("/cdn_repos") + @Retry + @ExponentialBackoff + //@BeforeRetry(RetryLogger.class) + ErrataPage getAllCDNRepos(@Valid @BeanParam ErrataQueryParameters pageParameters); + + @ClientExceptionMapper + @Blocking + static RuntimeException toException(Response response) { + String message = response.readEntity(String.class); + + return switch (response.getStatus()) { + case 400 -> new ClientException("Bad request", List.of(message)); + case 401 -> + new UnauthorizedException("Caller is unauthorized to access resource; {}", message, List.of(message)); + case 403 -> new ForbiddenException("Caller is forbidden to access resource; {}", message, List.of(message)); + case 404 -> new NotFoundException("Requested resource was not found; {}", message, List.of(message)); + default -> null; + }; + + } + + default Collection getVariantOfProductAndProductVersion( + String productShortName, + Long productVersionId) { + + Collection allVariants = getAllEntities( + Map.of("filter[product_short_name]", productShortName), + this::getAllVariants); + + return allVariants.stream() + .filter(variant -> variant.getAttributes() != null) + .filter(variant -> variant.getAttributes().getRelationships() != null) + .filter(variant -> variant.getAttributes().getRelationships().getProductVersion() != null) + .filter( + variant -> productVersionId + .equals(variant.getAttributes().getRelationships().getProductVersion().getId())) + .toList(); + } + + default Map> getCDNReposOfVariant( + Set variantNames, + String shortProductName) { + Map> variantToCDNs = new HashMap<>(); + variantNames.forEach(variant -> variantToCDNs.put(variant, getCDNReposOfVariant(variant, shortProductName))); + return variantToCDNs; + } + + default Collection getCDNReposOfVariant(String variantName, String shortProductName) { + Collection allCDNRepos = getAllEntities( + Map.of("filter[variant_name]", variantName), + this::getAllCDNRepos); + + return allCDNRepos.stream() + .filter( + cdn -> cdn.getType().equals("cdn_repos") + && !cdn.getAttributes().getContentType().equalsIgnoreCase("docker")) + .map(cdn -> new ErrataCDNRepoNormalized(cdn, variantName, !"rhel".equalsIgnoreCase(shortProductName))) + .distinct() + .toList(); + } + + // Default method for handling pagination logic with a generic type `T` and a function `getPageFunction` + default Collection getAllEntities( + Map filters, + Function> getPageFunction) { + ErrataQueryParameters parameters = ErrataQueryParameters.builder().withFilters(filters).build(); + + Collection entities = new ArrayList<>(); + int currentPage; + int totalPages; + + do { + ErrataPage response = getPageFunction.apply(parameters); + + if (response.getData() != null && !response.getData().isEmpty()) { + entities.addAll(response.getData()); + } + + currentPage = response.getPage().getPageNumber() + 1; + totalPages = response.getPage().getTotalPages(); + parameters.setPageNumber(currentPage); + } while (currentPage <= totalPages); + + return entities; + } + +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/ErrataQueryParameters.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/ErrataQueryParameters.java new file mode 100644 index 0000000..874cfc2 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/ErrataQueryParameters.java @@ -0,0 +1,51 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata; + +import java.util.HashMap; +import java.util.Map; + +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Positive; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.QueryParam; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder(setterPrefix = "with") +public class ErrataQueryParameters { + + @Builder.Default + @QueryParam("filter") + Map filters = new HashMap<>(); + + @QueryParam("page[number]") + @DefaultValue(value = "1") + @Positive + @Builder.Default + int pageNumber = 1; + + @QueryParam("page[size]") + @DefaultValue(value = "100") + @Positive + @Max(value = 200) + @Builder.Default + int pageSize = 200; + +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/Errata.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/Errata.java new file mode 100644 index 0000000..4e61818 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/Errata.java @@ -0,0 +1,179 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.dto; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.enums.ErrataStatus; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.enums.ErrataType; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Data +@Slf4j +@JsonIgnoreProperties(ignoreUnknown = true) +public class Errata { + + + private static final ObjectMapper jsonObjectMapper = new ObjectMapper().registerModule(new JavaTimeModule()) + .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false) + .setPropertyNamingStrategy(PropertyNamingStrategies.LOWER_CAMEL_CASE) + .setSerializationInclusion(Include.NON_NULL) + .disable(SerializationFeature.FAIL_ON_EMPTY_BEANS) + .enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .disable(SerializationFeature.FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS); + + + @Data + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonIgnoreProperties(ignoreUnknown = true) + public static class WrappedErrata { + private RHBA rhba; + private RHEA rhea; + private RHSA rhsa; + } + + @Data + @EqualsAndHashCode(callSuper = true) + @NoArgsConstructor + @JsonIgnoreProperties(ignoreUnknown = true) + public static class RHBA extends Details { + } + + @Data + @EqualsAndHashCode(callSuper = true) + @NoArgsConstructor + @JsonIgnoreProperties(ignoreUnknown = true) + public static class RHEA extends Details { + } + + @Data + @EqualsAndHashCode(callSuper = true) + @NoArgsConstructor + @JsonIgnoreProperties(ignoreUnknown = true) + public static class RHSA extends Details { + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Details { + private Long id; + private String fulladvisory; + private String synopsis; + private ErrataStatus status; + private ErrataProduct product; + @JsonProperty("is_brew") + private Boolean brew; + @JsonProperty("group_id") + private Long groupId; + @JsonProperty("old_advisory") + private String oldAdvisory; + @JsonProperty("text_only") + private Boolean textonly; + @JsonProperty("content_types") + private List contentTypes = new ArrayList<>(); + @JsonProperty("created_at") + private Instant createdAt; + @JsonProperty("actual_ship_date") + private Instant actualShipDate; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ErrataProduct { + private Long id; + private String name; + @JsonProperty("short_name") + private String shortName; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class WrappedContent { + private Content content; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Content { + @JsonProperty("id") + private Long id; + @JsonProperty("errata_id") + private Long errataId; + private String topic; + private String description; + private String solution; + private String cve; + @JsonProperty("how_to_test") + private String notes; + @JsonProperty("updated_at") + private Instant updatedAt; + @JsonProperty("text_only_cpe") + private String textOnlyCpe; + @JsonProperty("product_version_text") + private String productVersionText; + } + + private WrappedErrata errata; + + @JsonProperty("original_type") + private ErrataType originalType; + + private WrappedContent content; + + public Optional
getDetails() { + return switch (originalType) { + case RHSA -> Optional.of(errata.rhsa); + case RHBA -> Optional.of(errata.rhba); + case RHEA -> Optional.of(errata.rhea); + }; + } + + public Optional getNotesMapping() { + + // Check if the string is null or empty + if (content.content.notes == null || content.content.notes.trim().isEmpty()) { + return Optional.empty(); + } + + try { + // Try to parse the string into a JsonNode + return Optional.of(jsonObjectMapper.readTree(content.content.notes)); + } catch (Exception e) { + log.info("The erratum does not contain a notes content with JSON text: {}", e.getMessage()); + return Optional.empty(); + } + } +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataBuildList.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataBuildList.java new file mode 100644 index 0000000..c3c7077 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataBuildList.java @@ -0,0 +1,87 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.dto; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class ErrataBuildList { + + private Map productVersions = new HashMap<>(); + + @JsonAnySetter + public void addProductVersion(String name, ProductVersionEntry productVersionEntry) { + this.productVersions.put(name, productVersionEntry); + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ProductVersionEntry { + private String name; + private String description; + private List builds = new ArrayList<>(); + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Build { + private Map buildItems = new HashMap<>(); + + @JsonAnySetter + public void addBuildItem(String name, BuildItem buildItem) { + this.buildItems.put(name, buildItem); + } + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class BuildItem { + private String nvr; + private String nevr; + private Long id; + @JsonProperty("is_module") + private boolean isModule; + @JsonProperty("added_by") + private String addedBy; + @JsonProperty("is_signed") + private boolean isSigned; + @JsonProperty("variant_arch") + private Map variantArch = new HashMap<>(); + + @JsonAnySetter + public void addVariantArch(String variantName, VariantArch variantArchItem) { + this.variantArch.put(variantName, variantArchItem); + } + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class VariantArch { + // Empty class for now since we are not interested in any item inside + } +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataCDNRepo.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataCDNRepo.java new file mode 100644 index 0000000..42d2c0b --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataCDNRepo.java @@ -0,0 +1,67 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.dto; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class ErrataCDNRepo { + private long id; + private String type; + private Attributes attributes; + private Relationships relationships; + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Attributes { + private String name; + @JsonProperty("release_type") + private String releaseType; + @JsonProperty("use_for_tps") + private boolean useForTps; + @JsonProperty("tps_stream") + private String tpsStream; + @JsonProperty("content_type") + private String contentType; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Relationships { + private Arch arch; + private List variants; + + @Data + public static class Arch { + private long id; + private String name; + } + + @Data + public static class Variant { + private long id; + private String name; + } + } +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataCDNRepoNormalized.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataCDNRepoNormalized.java new file mode 100644 index 0000000..5e7bd27 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataCDNRepoNormalized.java @@ -0,0 +1,61 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.dto; + +import java.util.Optional; + +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.enums.ErrataCDNContentType; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.enums.ErrataCDNReleaseType; + +import lombok.Data; + +@Data +public class ErrataCDNRepoNormalized { + + final String cdnName; + final ErrataCDNReleaseType releaseType; + final ErrataCDNContentType contentType; + final long archId; + final String archName; + final String variantName; + final int score; + + public ErrataCDNRepoNormalized(ErrataCDNRepo errataCDNRepo, String variantName, boolean stripName) { + if (stripName) { + this.cdnName = stripEndingSuffix(errataCDNRepo.getAttributes().getName()); + } else { + // Keep the whole name (with '__{n}_DOT_{n}' suffix) for RHEL because some scanners use those versions to + // figure out the different streams for RHEL + this.cdnName = errataCDNRepo.getAttributes().getName(); + } + this.releaseType = ErrataCDNReleaseType.fromName(errataCDNRepo.getAttributes().getReleaseType()); + this.contentType = ErrataCDNContentType.fromName(errataCDNRepo.getAttributes().getContentType()); + this.archId = errataCDNRepo.getRelationships().getArch().getId(); + this.archName = errataCDNRepo.getRelationships().getArch().getName(); + this.variantName = variantName; + this.score = this.cdnName != null ? this.cdnName.length() : 0; + } + + private static String stripEndingSuffix(String cdnName) { + return Optional.ofNullable(cdnName).map(name -> { + int lastSlashIndex = name.lastIndexOf("__"); + return lastSlashIndex != -1 ? name.substring(0, lastSlashIndex) : name; + }).orElse(null); + } + +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataPage.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataPage.java new file mode 100644 index 0000000..b1db870 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataPage.java @@ -0,0 +1,54 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.dto; + +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; + +@Data +public class ErrataPage { + + @Data + public static class Page { + /** + * Page number. + */ + @JsonProperty("current_page") + private int pageNumber; + + /** + * Total pages provided. + */ + @JsonProperty("total_pages") + private int totalPages; + + /** + * Number of all hits (not only this page). + */ + @JsonProperty("result_count") + private int totalHits; + } + + private Page page; + private List data = new ArrayList<>(); + +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataProduct.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataProduct.java new file mode 100644 index 0000000..d9051ce --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataProduct.java @@ -0,0 +1,65 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.dto; + +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class ErrataProduct { + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ErrataProductVersion { + private Long id; + private String name; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Attributes { + private String name; + private String description; + @JsonProperty("short_name") + private String shortName; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Relationships { + @JsonProperty("product_versions") + private List productVersions = new ArrayList<>(); + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ProductData { + private Long id; + private String type; + private Attributes attributes; + private Relationships relationships; + } + + private ProductData data; +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataRelease.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataRelease.java new file mode 100644 index 0000000..472e4f6 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataRelease.java @@ -0,0 +1,72 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.dto; + +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class ErrataRelease { + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ErrataProduct { + private Long id; + @JsonProperty("short_name") + private String shortName; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ErrataProductVersion { + private Long id; + private String name; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Relationships { + private ErrataProduct product; + @JsonProperty("product_versions") + private List productVersions = new ArrayList<>(); + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ErrataAttributes { + private String name; + private String description; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ReleaseData { + private Long id; + private String type; + private ErrataAttributes attributes; + private Relationships relationships; + } + + private ReleaseData data; +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataVariant.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataVariant.java new file mode 100644 index 0000000..9a08dd1 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/ErrataVariant.java @@ -0,0 +1,89 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class ErrataVariant { + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ErrataProduct { + private Long id; + private String name; + @JsonProperty("short_name") + private String shortName; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ErrataProductVersion { + private Long id; + private String name; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Attributes { + private String name; + private String description; + private String cpe; + private Relationships relationships; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class RhelRelease { + private Long id; + private String name; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class RhelVariant { + private Long id; + private String name; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Relationships { + private ErrataProduct product; + @JsonProperty("product_version") + private ErrataProductVersion productVersion; + @JsonProperty("rhel_release") + private RhelRelease rhelRelease; + @JsonProperty("rhel_variant") + private RhelVariant rhelVariant; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class VariantData { + private Long id; + private String type; + private Attributes attributes; + } + + private VariantData data; +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataCDNContentType.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataCDNContentType.java new file mode 100644 index 0000000..e925c38 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataCDNContentType.java @@ -0,0 +1,40 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.dto.enums; + +import lombok.Getter; + +@Getter +public enum ErrataCDNContentType { + + BINARY("Binary"), DEBUGINFO("Debuginfo"), SOURCE("Source"); + + final String type; + + ErrataCDNContentType(String type) { + this.type = type; + } + + public static ErrataCDNContentType fromName(String type) { + return ErrataCDNContentType.valueOf(type.toUpperCase()); + } + + public String toName() { + return this.name().toLowerCase(); + } +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataCDNReleaseType.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataCDNReleaseType.java new file mode 100644 index 0000000..e02f0a8 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataCDNReleaseType.java @@ -0,0 +1,40 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.dto.enums; + +import lombok.Getter; + +@Getter +public enum ErrataCDNReleaseType { + + PRIMARY("Primary"), EUS("EUS"), FASTTRACK("FastTrack"), LONGLIFE("LongLife"); + + final String type; + + ErrataCDNReleaseType(String type) { + this.type = type; + } + + public static ErrataCDNReleaseType fromName(String type) { + return ErrataCDNReleaseType.valueOf(type.toUpperCase()); + } + + public String toName() { + return this.name().toLowerCase(); + } +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataStatus.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataStatus.java new file mode 100644 index 0000000..e012b52 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataStatus.java @@ -0,0 +1,22 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.dto.enums; + +public enum ErrataStatus { + NEW_FILES, QE, REL_PREP, PUSH_READY, IN_PUSH, SHIPPED_LIVE, DROPPED_NO_SHIP, REDACTED +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataType.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataType.java new file mode 100644 index 0000000..ec5452a --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/dto/enums/ErrataType.java @@ -0,0 +1,22 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.dto.enums; + +public enum ErrataType { + RHSA, RHBA, RHEA +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ApplicationException.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ApplicationException.java new file mode 100644 index 0000000..02661bb --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ApplicationException.java @@ -0,0 +1,37 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jboss.sbomer.handler.et.adapter.out.errata.errors; + +import org.slf4j.helpers.MessageFormatter; + +public class ApplicationException extends RuntimeException { + private final String message; + + public ApplicationException(String msg, Object... params) { + super(msg, MessageFormatter.getThrowableCandidate(params)); + this.message = (params != null && params.length != 0) + ? MessageFormatter.arrayFormat(super.getMessage(), params).getMessage() + : super.getMessage(); + } + + @Override + public String getMessage() { + return message; + } +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ClientException.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ClientException.java new file mode 100644 index 0000000..7562db7 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ClientException.java @@ -0,0 +1,50 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.errors; + +import java.util.List; +import java.util.UUID; + +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +public class ClientException extends ApplicationException { + private static final int DEFAULT_CODE = 400; + + private final List errors; + + final String errorId; + + public int getCode() { + return DEFAULT_CODE; + } + + public ClientException(String message, Object... params) { + super(message, params); + this.errors = null; + this.errorId = UUID.randomUUID().toString(); + } + + public ClientException(String message, List errors, Object... params) { + super(message, params); + this.errors = errors; + this.errorId = UUID.randomUUID().toString(); + } +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ErrorResponse.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ErrorResponse.java new file mode 100644 index 0000000..43df0ec --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ErrorResponse.java @@ -0,0 +1,47 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.errors; + +import java.util.ArrayList; +import java.util.List; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Setter(value = AccessLevel.PACKAGE) +@Getter +@EqualsAndHashCode +@AllArgsConstructor(access = AccessLevel.PACKAGE) +@NoArgsConstructor(access = AccessLevel.PACKAGE) +@Builder +@ToString +public class ErrorResponse { + String errorId; + String error; + String resource; + String message; + @Builder.Default + List errors = new ArrayList<>(); + +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ForbiddenException.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ForbiddenException.java new file mode 100644 index 0000000..9c46ca1 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ForbiddenException.java @@ -0,0 +1,29 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.errors; + +public class ForbiddenException extends ClientException { + @Override + public int getCode() { + return 403; + } + + public ForbiddenException(String message, Object... params) { + super(message, params); + } +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/NotFoundException.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/NotFoundException.java new file mode 100644 index 0000000..c03f236 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/NotFoundException.java @@ -0,0 +1,29 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.errors; + +public class NotFoundException extends ClientException { + @Override + public int getCode() { + return 404; + } + + public NotFoundException(String message, Object... params) { + super(message, params); + } +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ServiceUnavailableException.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ServiceUnavailableException.java new file mode 100644 index 0000000..91bf9d2 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ServiceUnavailableException.java @@ -0,0 +1,29 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.errors; + +public class ServiceUnavailableException extends ClientException { + @Override + public int getCode() { + return 503; + } + + public ServiceUnavailableException(String message, Object... params) { + super(message, params); + } +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/UnauthorizedException.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/UnauthorizedException.java new file mode 100644 index 0000000..ae44a1c --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/UnauthorizedException.java @@ -0,0 +1,29 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.errors; + +public class UnauthorizedException extends ClientException { + @Override + public int getCode() { + return 401; + } + + public UnauthorizedException(String message, Object... params) { + super(message, params); + } +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ValidationException.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ValidationException.java new file mode 100644 index 0000000..23a29f2 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/errors/ValidationException.java @@ -0,0 +1,32 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.errors; + +import java.util.List; + +public class ValidationException extends ClientException { + @Override + public int getCode() { + return 422; + } + + public ValidationException(String message, List errors, Object... params) { + super(message, errors, params); + } + +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/ErrataCachingKerberosClientSupport.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/ErrataCachingKerberosClientSupport.java new file mode 100644 index 0000000..faef20f --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/ErrataCachingKerberosClientSupport.java @@ -0,0 +1,307 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.kerberos; + +import static javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag.REQUIRED; + +import javax.security.auth.Subject; +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.NameCallback; +import javax.security.auth.callback.PasswordCallback; +import javax.security.auth.callback.UnsupportedCallbackException; +import javax.security.auth.login.AppConfigurationEntry; +import javax.security.auth.login.Configuration; +import javax.security.auth.login.LoginContext; +import javax.security.auth.login.LoginException; + +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +import org.ietf.jgss.GSSContext; +import org.ietf.jgss.GSSException; +import org.ietf.jgss.GSSManager; +import org.ietf.jgss.GSSName; +import org.ietf.jgss.Oid; + +import io.quarkiverse.kerberos.client.KerberosCallbackHandler; +import io.quarkiverse.kerberos.client.KerberosClientConfig; +import io.quarkiverse.kerberos.client.UserPrincipalSubjectFactory; +import io.quarkus.runtime.configuration.ConfigurationException; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Instance; +import jakarta.inject.Inject; +import lombok.extern.slf4j.Slf4j; + +@ApplicationScoped +@Slf4j +public class ErrataCachingKerberosClientSupport { + + private static final String KRB5_LOGIN_MODULE = "com.sun.security.auth.module.Krb5LoginModule"; + + // See http://oid-info.com/get/1.2.840.113554.1.2.2 + private static final String KERBEROS_OID = "1.2.840.113554.1.2.2"; + // See http://oid-info.com/get/1.3.6.1.5.5.2 + private static final String SPNEGO_OID = "1.3.6.1.5.5.2"; + + private static final String DEFAULT_LOGIN_CONTEXT_NAME = "KDC"; + + private final Instance callbackHandler; + + private final Instance userPrincipalSubjectFactory; + + private final KerberosClientConfig kerberosConfig; + + private final KerberosServiceConfig kerberosServiceConfig; + + private final String realKeytabPath; + + @Inject + ErrataTicketCache ticketCache; + + // FIXME: 'Optional.get()' without 'isPresent()' check + @Inject + public ErrataCachingKerberosClientSupport( + Instance callbackHandler, + Instance userPrincipalSubjectFactory, + KerberosClientConfig kerberosConfig, + KerberosServiceConfig kerberosServiceConfig) { + this.callbackHandler = callbackHandler; + this.userPrincipalSubjectFactory = userPrincipalSubjectFactory; + this.kerberosConfig = kerberosConfig; + this.kerberosServiceConfig = kerberosServiceConfig; + if (callbackHandler.isResolvable() && callbackHandler.isAmbiguous()) { + throw new IllegalStateException("Multiple " + KerberosCallbackHandler.class + " beans registered"); + } + if (userPrincipalSubjectFactory.isResolvable() && userPrincipalSubjectFactory.isAmbiguous()) { + throw new IllegalStateException("Multiple " + UserPrincipalSubjectFactory.class + " beans registered"); + } + String keytabPath = null; + if (kerberosConfig.keytabPath().isPresent()) { + URL keytabUrl = Thread.currentThread() + .getContextClassLoader() + .getResource(kerberosConfig.keytabPath().get()); + if (keytabUrl != null) { + keytabPath = keytabUrl.toString(); + } else { + Path filePath = Paths.get(kerberosConfig.keytabPath().get()); + if (Files.exists(filePath)) { + keytabPath = filePath.toAbsolutePath().toString(); + } + } + if (keytabPath == null) { + throw new ConfigurationException( + "Keytab file is not available at " + kerberosConfig.keytabPath().get()); + } + } + this.realKeytabPath = keytabPath; + } + + public String getServiceTicket() { + log.debug("Getting a new service ticket..."); + return getServiceTicket(getCompleteUserPrincipalName()); + } + + // TODO: Exception + public String getServiceTicket(String completeUserPrincipalName) { + log.debug("Getting a new service ticket for user principal name '{}'...", completeUserPrincipalName); + try { + Subject userPrincipalSubject = getUserPrincipalSubject(completeUserPrincipalName); + if (userPrincipalSubject == null) { + log.debug("User Principal Subject is null"); + throw new RuntimeException(); + } + + return getServiceTicket(userPrincipalSubject); + } catch (LoginException ex) { + log.debug("Login exception: {}", ex.getMessage()); + throw new RuntimeException(ex); + } + } + + // TODO: Exception + public String getServiceTicket(Subject userPrincipalSubject) { + log.debug("Getting a new service ticket for user principal subject ..."); + + try { + return Subject.doAs(userPrincipalSubject, (PrivilegedExceptionAction) () -> { + /* + * The getNegotiateToken method calls context.initSecContext, which uses the stored KerberosTicket to + * create a token suitable for the Kerberos or SPNEGO negotiation protocol. The initSecContext does not + * necessarily contact the Kerberos server; it simply builds the token based on the cached ticket. + * context.initSecContext will reach out to the Kerberos server only if the ticket is missing or if a + * renewal is required. This means we don't need any further caching here. + */ + GSSContext context = createServiceContext(); + return getNegotiateToken(context, new byte[0]); + }); + } catch (PrivilegedActionException ex) { + Throwable ex2 = ex.getCause() != null ? ex.getCause() : ex; + log.debug("PrivilegedAction failure: {}", ex2.getMessage()); + throw new RuntimeException(ex); + } catch (Exception ex) { + Throwable ex2 = ex.getCause() != null ? ex.getCause() : ex; + log.debug("Authentication failure: {}", ex2.getMessage()); + throw new RuntimeException(ex2); + } + } + + public Subject getUserPrincipalSubject() throws LoginException { + return getUserPrincipalSubject(getCompleteUserPrincipalName()); + } + + public Subject getUserPrincipalSubject(String completeUserPrincipalName) throws LoginException { + log.debug("Getting user principal subject for name '{}'...", completeUserPrincipalName); + if (userPrincipalSubjectFactory.isResolvable()) { + Subject subject = userPrincipalSubjectFactory.get().getSubjectForUserPrincipal(completeUserPrincipalName); + if (subject != null) { + return subject; + } + } + SubjectTgtPair cachedSubjectTgtPair = ticketCache.getTgt(completeUserPrincipalName); + if (cachedSubjectTgtPair != null) { + if (!cachedSubjectTgtPair.isExpired()) { + log.info( + "Subject for user principal name '{}' was found in the cache, reusing it!", + completeUserPrincipalName); + return cachedSubjectTgtPair.getSubject(); + } else { + log.info( + "Subject for user principal name '{}' was found in the cache but is expired, need to create a new one.", + completeUserPrincipalName); + ticketCache.invalidateTgt(completeUserPrincipalName); + } + } else { + log.info( + "Subject for user principal name '{}' was NOT found in the cache, creating a new one.", + completeUserPrincipalName); + } + + String loginContextName = kerberosConfig.loginContextName().orElse(DEFAULT_LOGIN_CONTEXT_NAME); + Configuration config = DEFAULT_LOGIN_CONTEXT_NAME.equals(loginContextName) + ? new DefaultJAASConfiguration(completeUserPrincipalName) + : null; + final LoginContext lc = new LoginContext( + loginContextName, + new Subject(), + // callback is not required if a keytab is used + getCallback(completeUserPrincipalName), + config); + lc.login(); + + Subject subject = lc.getSubject(); + ticketCache.cacheTgt(completeUserPrincipalName, subject); + return subject; + } + + public GSSContext createServiceContext() throws GSSException { + Oid oid = new Oid(kerberosConfig.useSpnegoOid() ? SPNEGO_OID : KERBEROS_OID); + GSSManager gssManager = GSSManager.getInstance(); + GSSName serverName = gssManager.createName(kerberosServiceConfig.errata().servicePrincipalName(), null); + return gssManager.createContext(serverName, oid, null, GSSContext.DEFAULT_LIFETIME); + } + + public String getNegotiateToken(GSSContext context, byte[] token) throws GSSException { + token = context.initSecContext(token, 0, token.length); + return Base64.getEncoder().encodeToString(token); + } + + // FIXME: 'Optional.get()' without 'isPresent()' check + protected CallbackHandler getCallback(String completeUserPrincipalName) { + if (callbackHandler.isResolvable()) { + return callbackHandler.get(); + } + if (kerberosConfig.userPrincipalPassword().isPresent()) { + return new UsernamePasswordCBH( + completeUserPrincipalName, + kerberosConfig.userPrincipalPassword().get().toCharArray()); + } + return null; + } + + private class DefaultJAASConfiguration extends Configuration { + final String completeUserPrincipalName; + + public DefaultJAASConfiguration(String completeUserPrincipalName) { + this.completeUserPrincipalName = completeUserPrincipalName; + } + + @Override + public AppConfigurationEntry[] getAppConfigurationEntry(String name) { + if (!DEFAULT_LOGIN_CONTEXT_NAME.equals(name)) { + throw new IllegalArgumentException("Unexpected name '" + name + "'"); + } + // See + // https://docs.oracle.com/javase/8/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/Krb5LoginModule.html + AppConfigurationEntry[] entries = new AppConfigurationEntry[1]; + Map options = new HashMap<>(); + if (kerberosConfig.debug()) { + options.put("debug", "true"); + } + // No need to refresh the krb5config file, won't be changed frequently + options.put("refreshKrb5Config", "false"); + options.put("storeKey", "true"); + options.put("isInitiator", "true"); + if (realKeytabPath != null) { + options.put("useKeyTab", "true"); + options.put("keyTab", realKeytabPath); + options.put("principal", completeUserPrincipalName); + } + entries[0] = new AppConfigurationEntry(KRB5_LOGIN_MODULE, REQUIRED, options); + + return entries; + } + + } + + private static class UsernamePasswordCBH implements CallbackHandler { + private final String username; + private final char[] password; + + private UsernamePasswordCBH(final String username, final char[] password) { + this.username = username; + this.password = password; + } + + @Override + public void handle(Callback[] callbacks) throws UnsupportedCallbackException { + for (Callback current : callbacks) { + if (current instanceof NameCallback ncb) { + ncb.setName(username); + } else if (current instanceof PasswordCallback pcb) { + pcb.setPassword(password); + } else { + throw new UnsupportedCallbackException(current); + } + } + } + } + + protected String getCompleteUserPrincipalName() { + return kerberosConfig.userPrincipalName() + + (kerberosConfig.userPrincipalRealm().isPresent() ? "@" + kerberosConfig.userPrincipalRealm().get() + : ""); + } +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/ErrataKrb5ClientRequestFilter.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/ErrataKrb5ClientRequestFilter.java new file mode 100644 index 0000000..2ab5033 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/ErrataKrb5ClientRequestFilter.java @@ -0,0 +1,50 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.kerberos; + +import java.io.IOException; + +import org.eclipse.microprofile.config.inject.ConfigProperty; + +import jakarta.inject.Inject; +import jakarta.ws.rs.client.ClientRequestContext; +import jakarta.ws.rs.client.ClientRequestFilter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class ErrataKrb5ClientRequestFilter implements ClientRequestFilter { + + private static final String AUTHORIZATION = "Authorization"; + private static final String NEGOTIATE = "Negotiate"; + + @Inject + ErrataCachingKerberosClientSupport kerberosClientSupport; + + @ConfigProperty(name = "sbomer.features.kerberos.enabled", defaultValue = "false") + private boolean enabled; + + @Override + public void filter(ClientRequestContext requestContext) throws IOException { + if (!enabled) + return; + + String serviceTicket = kerberosClientSupport.getServiceTicket(); + requestContext.getHeaders().add(AUTHORIZATION, NEGOTIATE + " " + serviceTicket); + } + +} \ No newline at end of file diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/ErrataTicketCache.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/ErrataTicketCache.java new file mode 100644 index 0000000..68ecf28 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/ErrataTicketCache.java @@ -0,0 +1,65 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.kerberos; + +import javax.security.auth.Subject; +import javax.security.auth.kerberos.KerberosTicket; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +import jakarta.enterprise.context.ApplicationScoped; +import lombok.extern.slf4j.Slf4j; + +@ApplicationScoped +@Slf4j +public class ErrataTicketCache { + + // Ticket-Granting Ticket (TGT) Cache + private final ConcurrentMap tgtCache = new ConcurrentHashMap<>(); + + public SubjectTgtPair getTgt(String userPrincipal) { + SubjectTgtPair cached = tgtCache.get(userPrincipal); + if (cached != null) { + log.debug("Got Subject-TGT from the cache"); + } + return cached; + } + + public void invalidateTgt(String userPrincipal) { + tgtCache.remove(userPrincipal); + } + + public void cacheTgt(String userPrincipal, Subject subject) { + KerberosTicket ticket = extractTgtKerberosTicket(subject); + if (ticket != null) { + SubjectTgtPair pair = new SubjectTgtPair(ticket, subject); + tgtCache.put(userPrincipal, pair); + } + } + + public static KerberosTicket extractTgtKerberosTicket(Subject subject) { + for (KerberosTicket ticket : subject.getPrivateCredentials(KerberosTicket.class)) { + if (ticket.getServer().getName().startsWith("krbtgt")) { + return ticket; + } + } + return null; + } + +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/KerberosServiceConfig.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/KerberosServiceConfig.java new file mode 100644 index 0000000..722d1ba --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/KerberosServiceConfig.java @@ -0,0 +1,41 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.kerberos; + +import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithDefault; +import io.smallrye.config.WithName; +import jakarta.enterprise.context.ApplicationScoped; + +/** + * @author Andrea Vibelli + */ +@ApplicationScoped +@ConfigMapping(prefix = "sbomer.features.kerberos") +public interface KerberosServiceConfig { + + @WithDefault("false") + @WithName("enabled") + boolean isEnabled(); + + ErrataServiceConfig errata(); + + interface ErrataServiceConfig { + String servicePrincipalName(); + } +} diff --git a/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/SubjectTgtPair.java b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/SubjectTgtPair.java new file mode 100644 index 0000000..1b516f4 --- /dev/null +++ b/src/main/java/org/jboss/sbomer/handler/et/adapter/out/errata/kerberos/SubjectTgtPair.java @@ -0,0 +1,89 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2023 Red Hat, Inc., and individual contributors + * as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.sbomer.handler.et.adapter.out.errata.kerberos; + +import javax.security.auth.Subject; +import javax.security.auth.kerberos.KerberosKey; +import javax.security.auth.kerberos.KerberosTicket; +import javax.security.auth.kerberos.KeyTab; + +import java.util.Date; +import java.util.Set; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Data +public class SubjectTgtPair { + + private final KerberosTicket tgt; + private final Subject subject; + + /* + * Checks if the endTime of the TGT is before the current Date + */ + public boolean isExpired() { + try { + synchronized (tgt) { + return tgt.getEndTime().before(new Date()); + } + } catch (Exception e) { + log.error("Failed to get Kerberos ticket end time", e); + return true; + } + } + + public String printDetails() { + StringBuilder sb = new StringBuilder(); + sb.append("\n==> KerberosTicket <=="); + sb.append("\nAuthTime: ").append(tgt.getAuthTime()); + sb.append("\nStartTime: ").append(tgt.getStartTime()); + sb.append("\nEndTime: ").append(tgt.getEndTime()); + sb.append("\nRenewTill: ").append(tgt.getRenewTill()); + sb.append("\nServer Name: ").append(tgt.getServer().getName()); + sb.append("\nServer Realm: ").append(tgt.getServer().getRealm()); + sb.append("\nSession Key Algorithm: ").append(tgt.getSessionKey().getAlgorithm()); + + sb.append("\n==> Subject.KerberosTickets <=="); + for (KerberosTicket ticket : subject.getPrivateCredentials(KerberosTicket.class)) { + sb.append("\nAuthTime: ").append(ticket.getAuthTime()); + sb.append("\nStartTime: ").append(ticket.getStartTime()); + sb.append("\nEndTime: ").append(ticket.getEndTime()); + sb.append("\nRenewTill: ").append(ticket.getRenewTill()); + sb.append("\nServer Name: ").append(ticket.getServer().getName()); + sb.append("\nServer Realm: ").append(ticket.getServer().getRealm()); + sb.append("\nSession Key Algorithm: ").append(ticket.getSessionKey().getAlgorithm()); + } + + sb.append("\n==> Subject.KerberosKeys <=="); + Set kerberosKeys = subject.getPrivateCredentials(KerberosKey.class); + for (KerberosKey kerberosKey : kerberosKeys) { + sb.append("\nAlgorithm: ").append(kerberosKey.getAlgorithm()); + sb.append("\nPrincipal Name: ").append(kerberosKey.getPrincipal().getName()); + } + sb.append("\n==> Subject.KeyTabs <=="); + Set keyTabs = subject.getPrivateCredentials(KeyTab.class); + for (KeyTab keyTab : keyTabs) { + sb.append("\nPrincipal Name: ").append(keyTab.getPrincipal().getName()); + sb.append("\nPrincipal Realm: ").append(keyTab.getPrincipal().getRealm()); + } + return sb.toString(); + } + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 52c0ec7..7ce70df 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -37,6 +37,24 @@ sbomer.umb.ssl=true sbomer.features.umb.enabled.openfeature.default=${sbomer.features.umb.enabled} sbomer.features.rest.enabled.openfeature.default=${sbomer.features.rest.enabled} +#======================================= +# ErrataClient +#======================================= +# @Retry( +# maxRetries = ERRATA_CLIENT_MAX_RETRIES, +# delay = ERRATA_CLIENT_DELAY, +# delayUnit = ChronoUnit.SECONDS, +# abortOn = UnauthorizedException.class) +# @ExponentialBackoff +# @BeforeRetry(RetryLogger.class) +#quarkus.rest-client.errata.url= +quarkus.fault-tolerance.enabled=true +#See https://github.com/sbomer-project/sbomer/blob/f1c3bca62becee57dedbdcd4105f56d395cfff7c/core/src/main/java/org/jboss/sbomer/core/rest/faulttolerance/Constants.java#L20 +quarkus.fault-tolerance."ErrataClient".max-retries=15 +quarkus.fault-tolerance."ErrataClient".retry.delay=1 +quarkus.fault-tolerance."ErrataClient".retry.delay-unit=seconds +quarkus.fault-tolerance."ErrataClient".retry.abort-on=UnauthorizedException.class + #======================================= # KAFKA - GLOBAL PRODUCER CONFIG @@ -71,4 +89,4 @@ mp.messaging.incoming.errata.host=${UMB_BROKER_HOST} mp.messaging.incoming.errata.connector=smallrye-amqp mp.messaging.incoming.errata.enabled=${sbomer.features.umb.enabled} mp.messaging.incoming.errata.client-options-name=umb -mp.messaging.incoming.errata.failure-strategy=reject \ No newline at end of file +mp.messaging.incoming.errata.failure-strategy=reject diff --git a/src/test/java/org/jboss/sbomer/test/integ/adapter/RestAdvisoryHandlerTest.java b/src/test/java/org/jboss/sbomer/test/integ/adapter/RestAdvisoryHandlerTest.java new file mode 100644 index 0000000..4c69d73 --- /dev/null +++ b/src/test/java/org/jboss/sbomer/test/integ/adapter/RestAdvisoryHandlerTest.java @@ -0,0 +1,8 @@ +package org.jboss.sbomer.test.integ.adapter; + +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +public class RestAdvisoryHandlerTest { + +} diff --git a/src/test/java/org/jboss/sbomer/test/unit/et/adapter/out/ErrataToolServiceTest.java b/src/test/java/org/jboss/sbomer/test/unit/et/adapter/out/ErrataToolServiceTest.java new file mode 100644 index 0000000..c4c04ef --- /dev/null +++ b/src/test/java/org/jboss/sbomer/test/unit/et/adapter/out/ErrataToolServiceTest.java @@ -0,0 +1,150 @@ +package org.jboss.sbomer.test.unit.et.adapter.out; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.stream.Stream; + +import org.jboss.sbomer.handler.et.adapter.out.ErrataToolService; +import org.jboss.sbomer.handler.et.adapter.out.errata.ErrataClient; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.Errata; +import org.jboss.sbomer.handler.et.adapter.out.errata.dto.ErrataBuildList; +import org.jboss.sbomer.handler.et.core.domain.advisory.Build; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +@ExtendWith(MockitoExtension.class) +class ErrataToolServiceTest { + + @Mock + ErrataClient errataClient; + + @InjectMocks + ErrataToolService errataToolService; + + private ObjectMapper objectMapper; + + @BeforeEach + void setUp() { + objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + } + + /** + * Helper method to load JSON response from test resources + * @param type The advisory type (container, rpm, textonly) + * @param descriptiveName The descriptive directory name + * @param advisoryId The advisory ID + * @param endpoint The endpoint type (errata or builds) + */ + private T loadJsonResponse(String type, String descriptiveName, String advisoryId, String endpoint, Class clazz) throws IOException { + String filename = String.format("%s_%s.json", advisoryId, endpoint); + String path = String.format("src/test/resources/errata-responses/%s/%s/%s", type, descriptiveName, filename); + String content = Files.readString(Path.of(path)); + return objectMapper.readValue(content, clazz); + } + + /** + * Test data provider for parameterized tests. + * Leverages the fixed directory structure: errata-responses/{type}/{example-advisory-N}/{advisoryId}_{endpoint}.json + * + * Returns: type, descriptiveName, advisoryId, expectedBuildCount, expectedBuildType, expectedFirstBuildId, expectedFirstNvr + */ + static Stream advisoryTestData() { + return Stream.of( + // Container advisories - example-advisory-1 (157826) + Arguments.of("container", "example-advisory-1", "157826", 11, "CONTAINER_IMAGE", 3925725L, + "fuse-java-openshift-jdk17-rhel-8-container-1.13-15.1767882203"), + + // Container advisories - example-advisory-2 (152887) - Large advisory with many builds + Arguments.of("container", "example-advisory-2", "152887", 191, "CONTAINER_IMAGE", null, null), + + // Container advisories - example-advisory-3 (157751) + Arguments.of("container", "example-advisory-3", "157751", 2, "CONTAINER_IMAGE", 3924690L, + "jboss-eap8-openjdk21-builder-openshift-container-1.0.1.GA-10.1767793526"), + + // RPM advisories - example-advisory-1 (157548) + Arguments.of("rpm", "example-advisory-1", "157548", 2, "RPM", 3918400L, "spice-client-win-8.10-3.el8_8.1"), + + // Text-only advisories - example-advisory-1 (155577) - No builds expected + Arguments.of("textonly", "example-advisory-1", "155577", 0, null, null, null), + + // Text-only advisories - example-advisory-2 (157587) - No builds expected + Arguments.of("textonly", "example-advisory-2", "157587", 0, null, null, null) + ); + } + + @ParameterizedTest(name = "[{index}] {0}/{1} - Advisory {2} - Expected {3} builds") + @MethodSource("advisoryTestData") + void testFetchBuilds_Parameterized( + String type, + String descriptiveName, + String advisoryId, + int expectedBuildCount, + String expectedBuildType, + Long expectedFirstBuildId, + String expectedFirstNvr) throws IOException { + + // Given - Load mock responses from JSON files using the fixed directory structure + Errata mockErrata = loadJsonResponse(type, descriptiveName, advisoryId, "errata", Errata.class); + ErrataBuildList mockBuildList = loadJsonResponse(type, descriptiveName, advisoryId, "builds", ErrataBuildList.class); + + // Mock the client calls + when(errataClient.getErratum(advisoryId)).thenReturn(mockErrata); + when(errataClient.getBuildsList(advisoryId)).thenReturn(mockBuildList); + + // When + List builds = errataToolService.fetchBuilds(advisoryId); + + // Then + assertNotNull(builds, "Builds list should not be null"); + assertEquals(expectedBuildCount, builds.size(), + String.format("Expected %d builds for %s advisory %s (%s)", expectedBuildCount, type, advisoryId, descriptiveName)); + + // Additional assertions for advisories with builds + if (expectedBuildCount > 0 && expectedFirstBuildId != null) { + assertNotNull(builds.get(0), "First build should not be null"); + assertEquals(expectedBuildType, builds.get(0).type(), + String.format("Expected build type %s for %s advisory", expectedBuildType, type)); + assertEquals(expectedFirstBuildId, builds.get(0).id(), + String.format("Expected first build ID %d for advisory %s", expectedFirstBuildId, advisoryId)); + assertEquals(expectedFirstNvr, builds.get(0).nvr(), + String.format("Expected first build NVR %s for advisory %s", expectedFirstNvr, advisoryId)); + } + } + + @Test + void testDetermineBuildType_Docker() { + // This would test the private method indirectly through fetchBuilds + // or you could make it package-private for testing + } + + @Test + void testDetermineBuildType_Rpm() { + // This would test the private method indirectly through fetchBuilds + // or you could make it package-private for testing + } + + @Test + void testDetermineBuildType_Unknown() { + // This would test the private method indirectly through fetchBuilds + // or you could make it package-private for testing + } +} + +// Made with Bob diff --git a/src/test/resources/errata-responses/ANONYMIZATION.md b/src/test/resources/errata-responses/ANONYMIZATION.md new file mode 100644 index 0000000..bf29b2f --- /dev/null +++ b/src/test/resources/errata-responses/ANONYMIZATION.md @@ -0,0 +1,106 @@ +# Test Data Anonymization + +This directory contains anonymized test data from the Errata Tool API for testing purposes. + +## Anonymization Script + +The test data has been anonymized using the script: `hack/anonymize-test-data.sh` + +### What Gets Anonymized + +#### In `*_builds.json` files: +- **sig_key**: Replaced with placeholder values + - `name`: "anonymized-key" + - `keyid`: "00000000" +- **container_sig_key**: Replaced with placeholder values + - `name`: "anonymized-key" + - `keyid`: "00000000" +- **added_by**: Replaced with "anonymized-user@example.com" + +#### In `*_errata.json` files: +- **User objects** (`who.user`): + - `id`: 9999999 + - `login_name`: "anonymized-user@example.com" + - `realname`: "Anonymized User" + - `user_organization_id`: 999 + - `email_address`: "anonymized-user@example.com" + - `account_name`: "anonymized-user" + - Preserves: `enabled`, `receives_mail`, `type` + +- **Kerberos Principal Owner**: + - `name`: "anonymized-service@example.com" + - `description`: "Anonymized service account" + +- **ID Fields**: + - `reporter_id`: 9999991 + - `assigned_to_id`: 9999992 + - `package_owner_id`: 9999993 + - `manager_id`: 9999994 + - `doc_reviewer_id`: 9999995 + - `product_security_reviewer_id`: 9999996 + +- **CVE References**: All CVE references (e.g., CVE-2025-9230) are replaced with "CVE-XXXX-XXXXX" + +### Running the Anonymization Script + +From the project root: + +```bash +./hack/anonymize-test-data.sh +``` + +The script will: +1. Find all `*_builds.json` files and anonymize them +2. Find all `*_errata.json` files and anonymize them +3. Replace files in-place (creates temporary files during processing) + +### Requirements + +- `jq` - Command-line JSON processor +- `bash` - Shell script interpreter + +Install jq: +```bash +# On macOS +brew install jq + +# On RHEL/Fedora +sudo dnf install jq + +# On Ubuntu/Debian +sudo apt-get install jq +``` + +### Adding New Test Data + +When adding new test data from the real Errata Tool API: + +1. Place the raw JSON files in the appropriate directory structure: + ``` + errata-responses/{type}/example-advisory-N/{advisoryId}_{endpoint}.json + ``` + +2. Run the anonymization script: + ```bash + ./hack/anonymize-test-data.sh + ``` + +3. Verify the anonymization worked correctly by checking: + - No real user names, emails, or IDs remain + - No real signing keys remain + - CVE references are anonymized + - Test data structure is preserved + +### What Is NOT Anonymized + +The following data is preserved as it's needed for testing: +- Advisory IDs and numbers +- Build IDs and NVRs (Name-Version-Release) +- Product names and versions +- Advisory status and dates +- Build architecture information +- File names and paths +- Boolean flags and status fields +- Advisory content (synopsis, description, solution) + +This ensures the test data remains realistic and useful for testing while removing sensitive information. \ No newline at end of file diff --git a/src/test/resources/errata-responses/README.md b/src/test/resources/errata-responses/README.md new file mode 100644 index 0000000..0a64b33 --- /dev/null +++ b/src/test/resources/errata-responses/README.md @@ -0,0 +1,111 @@ +# Errata Tool API Response Test Data + +This directory contains **anonymized** mock JSON responses from the Errata Tool API for testing purposes. + +⚠️ **IMPORTANT**: Care has been taken to anonymise test data in this directory has. See [ANONYMIZATION.md](ANONYMIZATION.md) for details. + +## Directory Structure + +``` +errata-responses/ +├── container/ # Container/Docker image advisories +│ ├── example-advisory-1/ +│ │ ├── 157826_errata.json # Erratum details +│ │ └── 157826_builds.json # Build list +│ ├── example-advisory-2/ +│ │ ├── 152887_errata.json +│ │ └── 152887_builds.json +│ └── example-advisory-3/ +│ ├── 157751_errata.json +│ └── 157751_builds.json +├── rpm/ # RPM package advisories +│ ├── example-advisory-1/ +│ │ ├── 789012_errata.json +│ │ └── 789012_builds.json +│ └── example-advisory-2/ +│ ├── 157548_errata.json +│ └── 157548_builds.json +└── textonly/ # Text-only advisories (no builds) + ├── example-advisory-1/ + │ ├── 155577_errata.json + │ └── 155577_builds.json + └── example-advisory-2/ + ├── 157587_errata.json + └── 157587_builds.json +``` + +## File Naming Convention + +Files follow the pattern: `{advisory_id}_{endpoint}.json` + +- `{advisory_id}_errata.json` - Response from `/api/v1/erratum/{id}` endpoint +- `{advisory_id}_builds.json` - Response from `/api/v1/erratum/{id}/builds_list` endpoint + +## Adding New Test Data + +To add real API responses: + +1. Create a new directory under the appropriate type (container/rpm/textonly) + ```bash + mkdir -p src/test/resources/errata-responses/container/example-advisory-4 + ``` + +2. Fetch the API responses with proper naming: + ```bash + ADVISORY="123456" + cd src/test/resources/errata-responses/container/example-advisory-4 + + # Fetch errata details + curl -H 'Accept: application/json' --negotiate -u : \ + "https://errata.engineering.redhat.com/api/v1/erratum/${ADVISORY}" | \ + jq > ${ADVISORY}_errata.json + + # Fetch builds list + curl -H 'Accept: application/json' --negotiate -u : \ + "https://errata.engineering.redhat.com/api/v1/erratum/${ADVISORY}/builds_list" | \ + jq > ${ADVISORY}_builds.json + ``` + +3. **IMPORTANT**: Anonymize the data before committing: + ```bash + cd /path/to/project/root + ./hack/anonymize-test-data.sh + ``` + +4. Update the test in `ErrataToolServiceTest.java` to include the new test case in the `advisoryTestData()` method + +## Data Anonymization + +Out of caution data is anonymized using the script: `hack/anonymize-test-data.sh` + +**What gets anonymized:** +- User IDs, names, emails, and organization IDs +- Signing keys (sig_key, container_sig_key) +- Reporter, assignee, package owner, and manager IDs +- CVE references (replaced with CVE-XXXX-XXXXX) +- Kerberos principal information + +**What is preserved:** +- Advisory IDs and structure +- Build IDs and NVRs +- Product names and versions +- Advisory status and dates +- File names and architectures + +See [ANONYMIZATION.md](ANONYMIZATION.md) for complete details. + +## Test Integration + +The test class `ErrataToolServiceTest` uses JUnit 5 parameterized tests to load these JSON files and mock the `ErrataClient` responses. This allows tests to run without requiring Kerberos authentication or network access to the actual Errata Tool service. + +The helper method `loadJsonResponse(type, descriptiveName, advisoryId, endpoint, clazz)` automatically constructs the correct file path based on the directory structure and naming convention. + +### Running Tests + +```bash +# Run all tests +mvn test + +# Run only the ErrataToolService tests +mvn test -Dtest=ErrataToolServiceTest +``` diff --git a/src/test/resources/errata-responses/container/example-advisory-1/157826_builds.json b/src/test/resources/errata-responses/container/example-advisory-1/157826_builds.json new file mode 100644 index 0000000..3689440 --- /dev/null +++ b/src/test/resources/errata-responses/container/example-advisory-1/157826_builds.json @@ -0,0 +1,268 @@ +{ + "RHEL-8-OSE-Middleware": { + "name": "RHEL-8-OSE-Middleware", + "description": "RHEL-8 based Middleware Containers", + "builds": [ + { + "fuse-java-openshift-jdk17-rhel-8-container-1.13-15.1767882203": { + "nvr": "fuse-java-openshift-jdk17-rhel-8-container-1.13-15.1767882203", + "nevr": "fuse-java-openshift-jdk17-rhel-8-container-0:1.13-15.1767882203", + "id": 3925725, + "is_module": false, + "variant_arch": { + "8Base-RHOSE-Middleware": { + "multi": [ + { + "filename": "docker-image-sha256:f100bb5ad3ac4b1d92be3ec55cf6e26930e7ece0bac5cda564fe081892a840e6.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8d5aded80f4001e9ebb52694d7547d55a6fdd451ba6e6288723cfdc5d7ff0bd1.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:653f72dd3d536bdd20d977e432b5e9a74ace2f94ef8ef846f485650b6bf7be93.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "fuse-java-openshift-rhel-8-container-1.13-17.1767882175": { + "nvr": "fuse-java-openshift-rhel-8-container-1.13-17.1767882175", + "nevr": "fuse-java-openshift-rhel-8-container-0:1.13-17.1767882175", + "id": 3925723, + "is_module": false, + "variant_arch": { + "8Base-RHOSE-Middleware": { + "multi": [ + { + "filename": "docker-image-sha256:308dd8a91be651a098e32047ef0c2f22a535e19e6adc3a1f9478d21b560296df.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "fuse-apicurito-rhel-8-operator-container-1.13-16.1767877156": { + "nvr": "fuse-apicurito-rhel-8-operator-container-1.13-16.1767877156", + "nevr": "fuse-apicurito-rhel-8-operator-container-0:1.13-16.1767877156", + "id": 3925604, + "is_module": false, + "variant_arch": { + "8Base-RHOSE-Middleware": { + "multi": [ + { + "filename": "docker-image-sha256:d7c3993158e1fc222be0f1b582f053f57a8f52f49ec3711f1159306aeb2e1f1f.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "fuse-console-rhel-8-operator-container-1.13-17.1767877157": { + "nvr": "fuse-console-rhel-8-operator-container-1.13-17.1767877157", + "nevr": "fuse-console-rhel-8-operator-container-0:1.13-17.1767877157", + "id": 3925607, + "is_module": false, + "variant_arch": { + "8Base-RHOSE-Middleware": { + "multi": [ + { + "filename": "docker-image-sha256:d902a88d703337c294707c654ee66aa94d421cfe3bbee6e9e422965de3ffbc4c.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:bcd9a785e879809d6cb5bb2f1854fd93085ce78e6ebe4f31bb0c77df89fcc3bf.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:de3748562dbf9bdf81942b74b74ac49b3d449d668c7a4719712c6e8e4cab371d.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "fuse-apicurito-generator-openshift-rhel-8-container-1.13-14.1767882469": { + "nvr": "fuse-apicurito-generator-openshift-rhel-8-container-1.13-14.1767882469", + "nevr": "fuse-apicurito-generator-openshift-rhel-8-container-0:1.13-14.1767882469", + "id": 3925727, + "is_module": false, + "variant_arch": { + "8Base-RHOSE-Middleware": { + "multi": [ + { + "filename": "docker-image-sha256:c52ea439488b7be217631a1a1e7cf000273af08fa06b58f7e36c51b63d9cb6b5.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "fuse-apicurito-openshift-rhel-8-container-1.13-20.1767877160": { + "nvr": "fuse-apicurito-openshift-rhel-8-container-1.13-20.1767877160", + "nevr": "fuse-apicurito-openshift-rhel-8-container-0:1.13-20.1767877160", + "id": 3925602, + "is_module": false, + "variant_arch": { + "8Base-RHOSE-Middleware": { + "multi": [ + { + "filename": "docker-image-sha256:2dc139200d56be63379de39d53706b985b04292b9f8ac44612901d454e7f2779.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "fuse-console-openshift-rhel-8-container-1.13-20.1767877159": { + "nvr": "fuse-console-openshift-rhel-8-container-1.13-20.1767877159", + "nevr": "fuse-console-openshift-rhel-8-container-0:1.13-20.1767877159", + "id": 3925606, + "is_module": false, + "variant_arch": { + "8Base-RHOSE-Middleware": { + "multi": [ + { + "filename": "docker-image-sha256:6d3b6f6ea6db58e4951aaf5bd1347eb2e3307936b40ed2c93e541189378ecbd0.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a5f74cc166e6bd92473daf7842d92d441956c82127494b9175d9a820575a8e29.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:52245482b2940cdeaa81d0e86b943e5ae6235416ae865cf6557db18870daef37.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "fuse-karaf-openshift-jdk11-rhel-8-container-1.13-17.1767878625": { + "nvr": "fuse-karaf-openshift-jdk11-rhel-8-container-1.13-17.1767878625", + "nevr": "fuse-karaf-openshift-jdk11-rhel-8-container-0:1.13-17.1767878625", + "id": 3925649, + "is_module": false, + "variant_arch": { + "8Base-RHOSE-Middleware": { + "multi": [ + { + "filename": "docker-image-sha256:e24e05f80c0fa43a1a3961b1306533042d48d795a8a0e35100a66081ed93ae1f.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "fuse-java-openshift-jdk11-rhel-8-container-1.13-17.1767878624": { + "nvr": "fuse-java-openshift-jdk11-rhel-8-container-1.13-17.1767878624", + "nevr": "fuse-java-openshift-jdk11-rhel-8-container-0:1.13-17.1767878624", + "id": 3925647, + "is_module": false, + "variant_arch": { + "8Base-RHOSE-Middleware": { + "multi": [ + { + "filename": "docker-image-sha256:d92650971d6886fdb2afa16d442c10801e19d9af8f1e1189334a178c0d507bc1.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:655e5b133141fe0a24d22156d862fb0f7e2b852bead29b90bf882cb8ce9d59c9.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:87014c15d018cc75e80cf92f7e302dd63de18b6592bf83ac2b810b233c2be476.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "fuse-karaf-openshift-rhel-8-container-1.13-15.1767882176": { + "nvr": "fuse-karaf-openshift-rhel-8-container-1.13-15.1767882176", + "nevr": "fuse-karaf-openshift-rhel-8-container-0:1.13-15.1767882176", + "id": 3925722, + "is_module": false, + "variant_arch": { + "8Base-RHOSE-Middleware": { + "multi": [ + { + "filename": "docker-image-sha256:951e5732616918aac79e638c62e215f518a48472bb941b99fec57e732988fcbb.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "fuse-karaf-openshift-jdk17-rhel-8-container-1.13-15.1767882203": { + "nvr": "fuse-karaf-openshift-jdk17-rhel-8-container-1.13-15.1767882203", + "nevr": "fuse-karaf-openshift-jdk17-rhel-8-container-0:1.13-15.1767882203", + "id": 3925726, + "is_module": false, + "variant_arch": { + "8Base-RHOSE-Middleware": { + "multi": [ + { + "filename": "docker-image-sha256:e0be9789df8668df7994a9cc36f3c1dbc0113d6d9d6fea94e4a29da9f7878a7b.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + } + ], + "sig_key": { + "name": "anonymized-key", + "keyid": "00000000" + }, + "container_sig_key": { + "name": "anonymized-key", + "keyid": "00000000" + } + } +} diff --git a/src/test/resources/errata-responses/container/example-advisory-1/157826_errata.json b/src/test/resources/errata-responses/container/example-advisory-1/157826_errata.json new file mode 100644 index 0000000..00b6a55 --- /dev/null +++ b/src/test/resources/errata-responses/container/example-advisory-1/157826_errata.json @@ -0,0 +1,371 @@ +{ + "who": { + "user": { + "id": 9999999, + "login_name": "anonymized-user@example.com", + "realname": "Anonymized User", + "user_organization_id": 999, + "enabled": 1, + "receives_mail": true, + "preferences": {}, + "email_address": "anonymized-user@example.com", + "account_name": "anonymized-user", + "type": "KerberosPrincipal" + }, + "kerberos_principal_owner": { + "name": "anonymized-service@example.com", + "description": "Anonymized service account" + } + }, + "params": { + "id": 157826 + }, + "errata": { + "rhba": { + "id": 157826, + "revision": 1, + "fulladvisory": "RHBA-2026:0377-01", + "issue_date": "2026-01-08T16:27:28Z", + "update_date": "2026-01-08T16:27:28Z", + "release_date": null, + "synopsis": "updated RHEL-8 based Middleware Containers container images", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 1, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "None", + "product_id": 79, + "is_brew": 1, + "status_updated_at": "2026-01-08T16:31:35Z", + "group_id": 1048, + "created_at": "2026-01-08T15:09:20Z", + "updated_at": "2026-01-12T14:20:56Z", + "respin_count": 1, + "old_advisory": "RHBA-2026:157826-01", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 2, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 954565, + "text_only": false, + "publish_date_override": "2026-01-08T00:00:00Z", + "state_machine_rule_set_id": null, + "actual_ship_date": "2026-01-08T16:31:35Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [ + "docker" + ], + "embargo_undated": false, + "security_sla": null, + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": "2026-01-08", + "builds_updated_at": "2026-01-08T15:09:22Z", + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 377, + "fulltype": "Red Hat Bug Fix Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": "2026-01-08T00:00:00Z", + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 79, + "name": "Red Hat OpenShift Enterprise", + "short_name": "RHOSE" + } + } + }, + "original_type": "RHBA", + "content": { + "content": { + "id": 155406, + "errata_id": 157826, + "topic": "Updated RHEL-8 based Middleware Containers container images are now available", + "description": "The RHEL-8 based Middleware Containers container images have been updated to address the following security advisory: RHSA-2026:0337 (see References)\n\nUsers of RHEL-8 based Middleware Containers container images are advised to upgrade to these updated images, which contain backported patches to correct these security issues, fix these bugs and add these enhancements. Users of these images are also encouraged to rebuild all container images that depend on these images.\n\nYou can find images updated by this advisory in Red Hat Container Catalog (see References).", + "solution": "The RHEL-8 based Middleware Containers container images provided by this update can be downloaded from the Red Hat Container Registry at registry.access.redhat.com. Installation instructions for your platform are available at Red Hat Container Catalog (see References).\n\nDockerfiles and scripts should be amended either to refer to this new image specifically, or to the latest image generally.", + "keywords": "", + "cve": "", + "crossref": "", + "reference": "https://access.redhat.com/errata/RHSA-2026:0337\nhttps://access.redhat.com/containers", + "how_to_test": null, + "doc_reviewer_id": 9999995, + "updated_at": "2026-01-08T15:09:20Z", + "revision_count": 1, + "doc_review_due_at": null, + "text_only_cpe": null, + "product_version_text": null, + "product_security_reviewer_id": null + } + }, + "diffs": {}, + "is_embargoed": false, + "bugs": { + "errata": { + "rhba": { + "id": 157826, + "revision": 1, + "fulladvisory": "RHBA-2026:0377-01", + "issue_date": "2026-01-08T16:27:28Z", + "update_date": "2026-01-08T16:27:28Z", + "release_date": null, + "synopsis": "updated RHEL-8 based Middleware Containers container images", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 1, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "None", + "product_id": 79, + "is_brew": 1, + "status_updated_at": "2026-01-08T16:31:35Z", + "group_id": 1048, + "created_at": "2026-01-08T15:09:20Z", + "updated_at": "2026-01-12T14:20:56Z", + "respin_count": 1, + "old_advisory": "RHBA-2026:157826-01", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 2, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 954565, + "text_only": false, + "publish_date_override": "2026-01-08T00:00:00Z", + "state_machine_rule_set_id": null, + "actual_ship_date": "2026-01-08T16:31:35Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [ + "docker" + ], + "embargo_undated": false, + "security_sla": null, + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": "2026-01-08", + "builds_updated_at": "2026-01-08T15:09:22Z", + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 377, + "fulltype": "Red Hat Bug Fix Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": "2026-01-08T00:00:00Z", + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 79, + "name": "Red Hat OpenShift Enterprise", + "short_name": "RHOSE" + } + } + }, + "idsfixed": [ + "2396054" + ], + "to_fetch": [], + "id_field": "id", + "id_prefix": "bz:", + "type": "bugs", + "bugs": [ + { + "bug": { + "id": 2396054, + "bug_status": "NEW", + "short_desc": "CVE-XXXX-XXXXX openssl: Out-of-bounds read & write in RFC 3211 KEK Unwrap", + "package_id": 1520, + "is_private": 0, + "last_updated": "2026-01-12T14:20:26Z", + "is_security": 1, + "alias": "CVE-XXXX-XXXXX", + "was_marked_on_qa": 0, + "priority": "medium", + "bug_severity": "medium", + "qa_whiteboard": "", + "keywords": "Security", + "issuetrackers": "", + "pm_score": 0, + "is_blocker": 0, + "is_exception": 0, + "flags": "requires_doc_text?", + "release_notes": "", + "reconciled_at": "2026-01-12T14:20:56Z", + "verified": "", + "has_security_group": false, + "internal_target_release": "", + "approved_release": "", + "zstream_target_release": "", + "product": "Security Response", + "sla_date": "2025-09-30", + "is_embargoed": false + } + } + ] + }, + "jira_issues": { + "errata": { + "rhba": { + "id": 157826, + "revision": 1, + "fulladvisory": "RHBA-2026:0377-01", + "issue_date": "2026-01-08T16:27:28Z", + "update_date": "2026-01-08T16:27:28Z", + "release_date": null, + "synopsis": "updated RHEL-8 based Middleware Containers container images", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 1, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "None", + "product_id": 79, + "is_brew": 1, + "status_updated_at": "2026-01-08T16:31:35Z", + "group_id": 1048, + "created_at": "2026-01-08T15:09:20Z", + "updated_at": "2026-01-12T14:20:56Z", + "respin_count": 1, + "old_advisory": "RHBA-2026:157826-01", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 2, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 954565, + "text_only": false, + "publish_date_override": "2026-01-08T00:00:00Z", + "state_machine_rule_set_id": null, + "actual_ship_date": "2026-01-08T16:31:35Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [ + "docker" + ], + "embargo_undated": false, + "security_sla": null, + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": "2026-01-08", + "builds_updated_at": "2026-01-08T15:09:22Z", + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 377, + "fulltype": "Red Hat Bug Fix Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": "2026-01-08T00:00:00Z", + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 79, + "name": "Red Hat OpenShift Enterprise", + "short_name": "RHOSE" + } + } + }, + "idsfixed": [], + "to_fetch": [], + "id_field": "key", + "id_prefix": "jira:", + "type": "jira_issues", + "jira_issues": [] + } +} diff --git a/src/test/resources/errata-responses/container/example-advisory-2/152887_builds.json b/src/test/resources/errata-responses/container/example-advisory-2/152887_builds.json new file mode 100644 index 0000000..2d5c149 --- /dev/null +++ b/src/test/resources/errata-responses/container/example-advisory-2/152887_builds.json @@ -0,0 +1,5784 @@ +{ + "OSE-4.19-RHEL-9": { + "name": "OSE-4.19-RHEL-9", + "description": "Red Hat OpenShift Container Platform 4.19", + "builds": [ + { + "ose-cluster-bootstrap-container-v4.19.0-202507291138.p0.g8fde9c5.assembly.stream.el9": { + "nvr": "ose-cluster-bootstrap-container-v4.19.0-202507291138.p0.g8fde9c5.assembly.stream.el9", + "nevr": "ose-cluster-bootstrap-container-0:v4.19.0-202507291138.p0.g8fde9c5.assembly.stream.el9", + "id": 3774017, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:d1a3a885f5da1a20f956d152b246d2e6a812effb69df58bf6d7f95cdb7cfec31.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fb82518aca3af64460eb023e84d8d2feb718e2c6d2934160596943f1d72bca31.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8937037b3f5961163eb07f1987e98c80ed2dbb82d12136097298ba560a3d059d.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2996a8b3bfe5edf76761fd7e833dbf0fc86cc59a8c7e7623d47988722682dbf1.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openshift-enterprise-deployer-container-v4.19.0-202507291138.p0.g298429b.assembly.stream.el9": { + "nvr": "openshift-enterprise-deployer-container-v4.19.0-202507291138.p0.g298429b.assembly.stream.el9", + "nevr": "openshift-enterprise-deployer-container-0:v4.19.0-202507291138.p0.g298429b.assembly.stream.el9", + "id": 3774095, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:f433dc0a16226e76821e6bc06a3ba8c5b517b44faadad83e45f2485d61f96460.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2c61788e43a166108f5951bde97141024e211bb430b7b8fab2ea7ac5f2cdd047.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:040fba253e9e23f61033ea174089cd4e79e28f87e6c8753db2a68c77791cccb2.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:7b72c18d2f53b13326f4d9f1f5c380e644029182b85e625550b9d73677470034.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-openshift-controller-manager-container-v4.19.0-202507291138.p0.ga672407.assembly.stream.el9": { + "nvr": "ose-openshift-controller-manager-container-v4.19.0-202507291138.p0.ga672407.assembly.stream.el9", + "nevr": "ose-openshift-controller-manager-container-0:v4.19.0-202507291138.p0.ga672407.assembly.stream.el9", + "id": 3773849, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:019ccf2218b49685300d23109ac05f177657805e2362cedcff1452b8ff91a6a9.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b2d1ff5f96e6aea20a0182534f09b0f1fc1471380ec7ab1c2a465c44695248f4.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b34efb9d8789a15f72b783fe656fa78f0caeac606e8685fdabf4e99997c40dee.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:610a34028d87a9ea696dde5e827be3d2a3e2e40feb409f2454e873a6594d2059.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-azure-file-csi-driver-container-v4.19.0-202507291138.p0.g762a2b9.assembly.stream.el9": { + "nvr": "ose-azure-file-csi-driver-container-v4.19.0-202507291138.p0.g762a2b9.assembly.stream.el9", + "nevr": "ose-azure-file-csi-driver-container-0:v4.19.0-202507291138.p0.g762a2b9.assembly.stream.el9", + "id": 3774087, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:666f18435d176bab96a43f0af1aab71edfc006c741b9360ca469e8b0f3b32b0c.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:29deb4188f3340d20499a5edc21f6cef667933028d3f5c3dc8b399ec730cd7bf.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "telemeter-container-v4.19.0-202507291138.p0.gd72f157.assembly.stream.el9": { + "nvr": "telemeter-container-v4.19.0-202507291138.p0.gd72f157.assembly.stream.el9", + "nevr": "telemeter-container-0:v4.19.0-202507291138.p0.gd72f157.assembly.stream.el9", + "id": 3773882, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:76ac01227208dcdabc475a1df4f6b362a9c1e324bc4aff5eda2b370809cba3ef.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2f7e7b1269ca2934221afc9b5601bafe7a2d468d82c15f6c8e6d61e7aa1f0b97.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:7bb5853774f7bab39d46591ed910506a0d8239a044861e0ce8abc07f15b14391.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e23cc523ab4b56a668ac9fb6bb6ca7abca78737309c4e1ac9c5ab0f381364bd6.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "driver-toolkit-container-v4.19.0-202507300637.p0.g686fdac.assembly.stream.el9": { + "nvr": "driver-toolkit-container-v4.19.0-202507300637.p0.g686fdac.assembly.stream.el9", + "nevr": "driver-toolkit-container-0:v4.19.0-202507300637.p0.g686fdac.assembly.stream.el9", + "id": 3775395, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:7c6afbe5511448ea29326c0520b63b7eb59d944b9619e61a184905fa6d8d7dc8.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b3a4aab114a90ed928fcdfeb3b7d0ad2c21d612bb834d2f6f3b561ab8b661a86.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:58a0c066af18f4ebc41c209efbb7d9f9bfca186b2e1dfc0830ad9e097d14f569.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2b9c4017fb7f4d3e1782ba9568762b1188dd9d8a1026b9d4f4d6b1fb51e272ae.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "kube-rbac-proxy-container-v4.19.0-202507291138.p0.g5912775.assembly.stream.el9": { + "nvr": "kube-rbac-proxy-container-v4.19.0-202507291138.p0.g5912775.assembly.stream.el9", + "nevr": "kube-rbac-proxy-container-0:v4.19.0-202507291138.p0.g5912775.assembly.stream.el9", + "id": 3773943, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:2a86deaf61852493efd501b3ca6518ef53ec3760d2673a771d58c5cac0089e8a.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:3539ab0531524f424571f698ff1683c0d758cf3b853e7a57cc07abf143d808d2.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:3b92ecf939be5b50fe3144f530f753fc77edd4dc0f764cad84cd599cec38aaf7.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4f8ed18448cf449abe68490e6724a00c9689a4f6e087a692373df2528d5f5176.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-kubevirt-csi-driver-container-v4.19.0-202507291138.p0.gf535e9a.assembly.stream.el9": { + "nvr": "ose-kubevirt-csi-driver-container-v4.19.0-202507291138.p0.gf535e9a.assembly.stream.el9", + "nevr": "ose-kubevirt-csi-driver-container-0:v4.19.0-202507291138.p0.gf535e9a.assembly.stream.el9", + "id": 3773895, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:45fe695ec56cb7c6a79a512b1115b56125bc4f623d5988099151ec40085910c2.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4802aae156fe2860329f8355e6565333968a8d0154f1bb0e16688a473b768829.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d0673eb600478dca15648768f8e065ad701c344d4c8fcfcd0b1dd26f665e888a.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:aca51d6624b2b8747d5852503fef5d8632d1ed1cea909691f5a91ced09dceb47.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-csi-external-snapshotter-container-v4.19.0-202507291138.p0.gac82caf.assembly.stream.el9": { + "nvr": "ose-csi-external-snapshotter-container-v4.19.0-202507291138.p0.gac82caf.assembly.stream.el9", + "nevr": "ose-csi-external-snapshotter-container-0:v4.19.0-202507291138.p0.gac82caf.assembly.stream.el9", + "id": 3774025, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:47e25c61a361a6f37aa42974967f13f95b8c9276a13351f830c207c7d74bbdd9.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fcc1f31d7273239ded87877d9f31a41dffc8ac736e99b6d6c4f5c697a4d040b2.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:cf6588a946585cd5e00c5c0b3cf26a2afe63d59d7a6bdbfeade8c68fd2ccc983.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8b5bf752931d28f53112369dfcabc4520c16c095f46d8385daaba4ab2632bd82.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openshift-enterprise-haproxy-router-container-v4.19.0-202507291138.p0.gb41f9d0.assembly.stream.el9": { + "nvr": "openshift-enterprise-haproxy-router-container-v4.19.0-202507291138.p0.gb41f9d0.assembly.stream.el9", + "nevr": "openshift-enterprise-haproxy-router-container-0:v4.19.0-202507291138.p0.gb41f9d0.assembly.stream.el9", + "id": 3774098, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:ac56ede84ccbdcf84c462993700d2d50d24bb77ec4c216e2bd29700248736f36.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a57c54b7db26bd350cb1688b6af6f3d33dc50b48b30a814c40f4246090ed188e.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fc3748c3bf3be5e626a0035fa644188f7fe16939be8e4b6ed006ec70d5093508.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d6a331cd0ec95c8c30ea05c59b70ba5a28794f8142b63aa9fd3223d4b58c340e.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-operator-framework-tools-container-v4.19.0-202507291138.p0.g8bcf155.assembly.stream.el9": { + "nvr": "ose-operator-framework-tools-container-v4.19.0-202507291138.p0.g8bcf155.assembly.stream.el9", + "nevr": "ose-operator-framework-tools-container-0:v4.19.0-202507291138.p0.g8bcf155.assembly.stream.el9", + "id": 3774026, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:c8a1969ad96a59dd25d1a8e3f3e37c3ae67636a4dba21cb7d5cf66f1f9d7ef23.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4619bb6449b88a20cd7a0a478108c2b802919b0877554d4ca4bd32a4f8c18e5a.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b5baa2acc8376ba9043fe5ac3d8ef10e5f6005504ea6230b78c18eb12db7069f.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c90e2cce22aaa1f8b77d0b2b6ab1100578be8570ff0092ee200d0ca6a22ccbae.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-baremetal-cluster-api-controllers-container-v4.19.0-202507291138.p0.g06a66db.assembly.stream.el9": { + "nvr": "ose-baremetal-cluster-api-controllers-container-v4.19.0-202507291138.p0.g06a66db.assembly.stream.el9", + "nevr": "ose-baremetal-cluster-api-controllers-container-0:v4.19.0-202507291138.p0.g06a66db.assembly.stream.el9", + "id": 3773971, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:f8d9b23de809e2a1573fc8e2bd5f9eea561fc6c4d3c74efd100c25b10d0f9b17.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:914d27fc7f934be4ddd41810d67bdbf638e16ebae126cadd80df66550e432d06.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2a97b5a83b245cd8e0bd41593fb76cd65f534d8708a7fd2f9543d216ef68c63c.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:1bb89f242f82cca57b093bdbe36562bd398bc8880c10d18b7741ec286e03c54b.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-kube-storage-version-migrator-container-v4.19.0-202507291138.p0.g4ab93e0.assembly.stream.el9": { + "nvr": "ose-kube-storage-version-migrator-container-v4.19.0-202507291138.p0.g4ab93e0.assembly.stream.el9", + "nevr": "ose-kube-storage-version-migrator-container-0:v4.19.0-202507291138.p0.g4ab93e0.assembly.stream.el9", + "id": 3773921, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:f329291866a7d16f73f4e9717a0e0531ebbdae3d1adc55f16bc92cc5b6b76f60.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9775918af2d210f1713eafd2a3266de126017e4c11436c6fff44d447a6737873.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:df1a87c38dd52e01303aa83f04481495e5feca75a18018c2affa9e25ec82aa8a.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:027e1ce08e10e051dc7de6e4e431108e2bd0eaeb466883b4079615e87631b713.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-multus-networkpolicy-container-v4.19.0-202507291138.p0.g6fffe5d.assembly.stream.el9": { + "nvr": "ose-multus-networkpolicy-container-v4.19.0-202507291138.p0.g6fffe5d.assembly.stream.el9", + "nevr": "ose-multus-networkpolicy-container-0:v4.19.0-202507291138.p0.g6fffe5d.assembly.stream.el9", + "id": 3774056, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:916523d60f20322e6bb4334c76104789ce279f1b1b83671a126e52cd4c5e9e5b.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:03fe6084e559a27defd2e6cfed2c96bc7917c0fccee9d70f2d962e12337f54e6.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4302a4f2986d056dfd7b9ae6ca297ac57a285f86be642a3b100ae139406aacae.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:3543d200b5973adb5bf27e85455f1cedf1ef88c613586ba510b898a72f169aa3.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openstack-cluster-api-controllers-container-v4.19.0-202507291138.p0.g5319094.assembly.stream.el9": { + "nvr": "openstack-cluster-api-controllers-container-v4.19.0-202507291138.p0.g5319094.assembly.stream.el9", + "nevr": "openstack-cluster-api-controllers-container-0:v4.19.0-202507291138.p0.g5319094.assembly.stream.el9", + "id": 3773919, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:59b6ff01eb8304806a8fde615e73ffc4a0a6395290ec249d5d22b9a1142a3e28.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:408ae7839529d591e408568c1ff770089ecd1235dfdbc341ae0388cf0d707484.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a435c6ce78484980ea9f0b8c8486451e6aac2f3ac132c0960570ef533288c9a0.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:530c0ea76304bc2f8d530920234e5a52b3a21e4d9bd09c07f8cbbbbbfcc14f04.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-ovirt-csi-operator-container-v4.19.0-202507292137.p0.g76db379.assembly.stream.el9": { + "nvr": "ose-cluster-ovirt-csi-operator-container-v4.19.0-202507292137.p0.g76db379.assembly.stream.el9", + "nevr": "ose-cluster-ovirt-csi-operator-container-0:v4.19.0-202507292137.p0.g76db379.assembly.stream.el9", + "id": 3774469, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:ed9cfcf97a14e114939b6929ffb140c1af7bfba5b0ade1ac220e9cf0f0063fd0.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:63f94cb17770817f329129b75e9e2ed1e357e6e2e94fd74a42ac7620a4cf65c6.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:82273540d0773da0722f19962aac04f497f9e18e111a8b4e3c569a57e10cd2df.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c2b4006ef125efa2e7385bc20f3b506c45e328ea3a2700dd401f8449a695693e.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "cluster-monitoring-operator-container-v4.19.0-202507291138.p0.ge4ecf31.assembly.stream.el9": { + "nvr": "cluster-monitoring-operator-container-v4.19.0-202507291138.p0.ge4ecf31.assembly.stream.el9", + "nevr": "cluster-monitoring-operator-container-0:v4.19.0-202507291138.p0.ge4ecf31.assembly.stream.el9", + "id": 3774043, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:ed198284b995d5aa40e50f9bf3bc58a78dbbb1fdc1c73c3e474eccac52fda6ec.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:3d780911c4e8220ac5d1b92da51b66cc680c1e8f9b8c73d60acef7044fca2449.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d7ab39a682e62537eaee5aa2d02c4b3d24d3a5d20262745f3df1a13371342e5f.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e2d574ebfc6ad4f33d71931a9aad5fea53ad7bc9786ad9e8bfaef50cf97ba1ca.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-kube-cluster-api-operator-container-v4.19.0-202507291138.p0.g3ec3037.assembly.stream.el9": { + "nvr": "ose-cluster-kube-cluster-api-operator-container-v4.19.0-202507291138.p0.g3ec3037.assembly.stream.el9", + "nevr": "ose-cluster-kube-cluster-api-operator-container-0:v4.19.0-202507291138.p0.g3ec3037.assembly.stream.el9", + "id": 3773952, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:204073af37d7fda0543ca3f4ad7a28b57ad91262cdb22f645dc1489a5d71ab4d.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9d086b51553bfe6d22f57c64c32bebcc10a855551109417becb1b6c6aa8a2a99.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e3a5d38c7afde0c90ee22ef7ff30a80db84bdb662e4e45e3cb9d30a1927bd4e5.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d279bbfb9d623cd94703d15bc79b2cacdd4156d435be2c42bb89b8d9faef4b05.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-capi-operator-container-v4.19.0-202507291138.p0.gcf9e6e9.assembly.stream.el9": { + "nvr": "ose-cluster-capi-operator-container-v4.19.0-202507291138.p0.gcf9e6e9.assembly.stream.el9", + "nevr": "ose-cluster-capi-operator-container-0:v4.19.0-202507291138.p0.gcf9e6e9.assembly.stream.el9", + "id": 3773892, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:1b537bd52905efae76c461406e5e257f022f5409ee2396e10bf82b4186e9566f.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d0d5a3e15df63b5c18ddaefd4a6e66c4077f6fce96d9f8803f814c7cb71a85db.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d5c9b66ad583ab9e21adfb6049476f629df25a2b111064c30c8cd5cf133dc86a.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d41832a7643702f518eef5ea70079abf78ecb65e1e112d5524107c1cb61aa36c.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-thanos-container-v4.19.0-202507291138.p0.g95f7bb2.assembly.stream.el9": { + "nvr": "ose-thanos-container-v4.19.0-202507291138.p0.g95f7bb2.assembly.stream.el9", + "nevr": "ose-thanos-container-0:v4.19.0-202507291138.p0.g95f7bb2.assembly.stream.el9", + "id": 3773983, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:40f5dc2b18dc49b08c8e9eeb5d50691c6219731ebf4c748a5d9903973ccffb4f.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4623850cd42c683f0e531155c85ffa16f85a974e67d29573571f099f7a1e18cd.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:406f5435c5d22b153e72c7d45c963eb91dff811f81c6b0a02ce6ac169e236edf.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:195702fa394959212e21d1afde088b6881669a9d6608c12d107d36f7487be93f.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "csi-driver-manila-operator-container-v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9": { + "nvr": "csi-driver-manila-operator-container-v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9", + "nevr": "csi-driver-manila-operator-container-0:v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9", + "id": 3774068, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:6f88db97a8cdb1cfec67f829b748e0e2938d7d1fc6ba0c183185099a72edf7e9.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:55ff09e4defff8e30de79442ff8a8e8160ae6ef4fa02b8065e8a111c5457dc50.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "operator-lifecycle-manager-container-v4.19.0-202507291138.p0.g8bcf155.assembly.stream.el9": { + "nvr": "operator-lifecycle-manager-container-v4.19.0-202507291138.p0.g8bcf155.assembly.stream.el9", + "nevr": "operator-lifecycle-manager-container-0:v4.19.0-202507291138.p0.g8bcf155.assembly.stream.el9", + "id": 3774029, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:90c16d18a5e06c72f03d061879920ed7d89189041cd36b4526c47993921505ce.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:73f478eae272c77badcdc7df71bb1f319c347ef64cc7a2907285fb6158544ffe.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:120cfd8af288f03bc821fd2265d59a5bf0f2bd054f2c67a9b8bb25ccfc4d3744.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:7cbbfcb2dca020215b9dfe990faec09308558e313e94151e1a0d3146d3379f59.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-gcp-pd-csi-driver-operator-container-v4.19.0-202507291138.p0.g44c74f2.assembly.stream.el9": { + "nvr": "ose-gcp-pd-csi-driver-operator-container-v4.19.0-202507291138.p0.g44c74f2.assembly.stream.el9", + "nevr": "ose-gcp-pd-csi-driver-operator-container-0:v4.19.0-202507291138.p0.g44c74f2.assembly.stream.el9", + "id": 3773957, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:2ee845cf745d0a75a0274bcee4a4e2cd0653b7b495daee7e2118673872f68b96.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8a1c8b135691eb0c00638f347b7a754b9e56c9b891072b522b2a71a3842f5bc6.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:0e7edd218ef706537371c4092f90024f76366bdc44934f4603ef3e847c39406d.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "csi-attacher-container-v4.19.0-202507291138.p0.ga8175e3.assembly.stream.el9": { + "nvr": "csi-attacher-container-v4.19.0-202507291138.p0.ga8175e3.assembly.stream.el9", + "nevr": "csi-attacher-container-0:v4.19.0-202507291138.p0.ga8175e3.assembly.stream.el9", + "id": 3773840, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:b2593aab4e06fa1a6c1d6dd88328283d1b7ede7dfe37150e72e6c3862cb3e13c.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:337b538b85af9decc8b63de2b453c6ab574eff81e574ae10ca176a708e05a6ff.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:04f382dd2edc9dae9f77d880f2d2f477161d27a70ba1dcdc22ecbe61e4e37bff.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d4223681b2ab0ee90b818cb890e76178627ef2bce05a5a32f89544b775dbd2db.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-vmware-vsphere-csi-driver-container-v4.19.0-202507291138.p0.g1513403.assembly.stream.el9": { + "nvr": "ose-vmware-vsphere-csi-driver-container-v4.19.0-202507291138.p0.g1513403.assembly.stream.el9", + "nevr": "ose-vmware-vsphere-csi-driver-container-0:v4.19.0-202507291138.p0.g1513403.assembly.stream.el9", + "id": 3773945, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:9900fe380b20aaa079754af080f9cdc0527b4cf56c25a8d325898a0ef80e90a6.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-vsphere-cloud-controller-manager-container-v4.19.0-202507291138.p0.g2c21c8c.assembly.stream.el9": { + "nvr": "ose-vsphere-cloud-controller-manager-container-v4.19.0-202507291138.p0.g2c21c8c.assembly.stream.el9", + "nevr": "ose-vsphere-cloud-controller-manager-container-0:v4.19.0-202507291138.p0.g2c21c8c.assembly.stream.el9", + "id": 3774042, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:794b0eecba0a046f9ed4d8aa7521771d7b42b727205712f62e59fad7dd533e2e.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-gcp-cloud-controller-manager-container-v4.19.0-202507291138.p0.gd8d3aeb.assembly.stream.el9": { + "nvr": "ose-gcp-cloud-controller-manager-container-v4.19.0-202507291138.p0.gd8d3aeb.assembly.stream.el9", + "nevr": "ose-gcp-cloud-controller-manager-container-0:v4.19.0-202507291138.p0.gd8d3aeb.assembly.stream.el9", + "id": 3773873, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:a67dde7bc3c6f61cc620ca931afda4ad5680cc89b05605b0244471e79b241733.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:5cf266d82ebf3301c710569c3b98c79f5195b873b4385bd45430cc375ae0700a.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:393ff591db049294a36f7f26ee6ca137ce117bc31038e373a9b082d44b12bc41.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openshift-enterprise-tests-container-v4.19.0-202507291138.p0.gbb0d449.assembly.stream.el9": { + "nvr": "openshift-enterprise-tests-container-v4.19.0-202507291138.p0.gbb0d449.assembly.stream.el9", + "nevr": "openshift-enterprise-tests-container-0:v4.19.0-202507291138.p0.gbb0d449.assembly.stream.el9", + "id": 3774099, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:fbdb2a8954c8bce6060de1e95da87f254ff0cf018b0e091f6c2fc94e51321c75.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f9fcd0a00f86a03c10e14ef43f17fe4e6aabb129facd3284ef976c1ba4f478fb.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9ba7bd6781ab3c5b495ddbb4ed6d2966ecda1b88b8bf9b5d28f59a8abc3f4f61.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fe2eb73223324c35c7c1759fe0f647f817217b2fa4663cfe157c982f68bd3b9f.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-image-registry-operator-container-v4.19.0-202507291138.p0.g328419e.assembly.stream.el9": { + "nvr": "ose-cluster-image-registry-operator-container-v4.19.0-202507291138.p0.g328419e.assembly.stream.el9", + "nevr": "ose-cluster-image-registry-operator-container-0:v4.19.0-202507291138.p0.g328419e.assembly.stream.el9", + "id": 3773968, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:3f7f27d7cd1095f824b9ec72ee3b6590aed1eac012db763ca7283db6a3ee5aef.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ebc0e8093b3cfb1813ba205ab660a2ecf3f26fda5763e18611d546f9a82d5a99.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f91d4ffeed5bc377da47c1b62d500052fc06c430f906dea552671ca694f9f4ad.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:dcca97ab869ea59cc25f4e2880a69631448bd09c1471634a7d29745436959fa9.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-azure-disk-csi-driver-container-v4.19.0-202507291138.p0.g466334d.assembly.stream.el9": { + "nvr": "ose-azure-disk-csi-driver-container-v4.19.0-202507291138.p0.g466334d.assembly.stream.el9", + "nevr": "ose-azure-disk-csi-driver-container-0:v4.19.0-202507291138.p0.g466334d.assembly.stream.el9", + "id": 3773846, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:aa44ba455d27a0188510bafbae91a84d0e63982e3f794bfa3ca9f8f3c489d950.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:401499aa0391bb73fe892a6b470d5e53190120c120cccd9ce36aea5ee96bad49.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-openstack-cinder-csi-driver-container-v4.19.0-202507291138.p0.gd9b2461.assembly.stream.el9": { + "nvr": "ose-openstack-cinder-csi-driver-container-v4.19.0-202507291138.p0.gd9b2461.assembly.stream.el9", + "nevr": "ose-openstack-cinder-csi-driver-container-0:v4.19.0-202507291138.p0.gd9b2461.assembly.stream.el9", + "id": 3774070, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:61b94a225a313fad351052f7bb8a4ffe68917a6d907cb674cf2f6de92d35b4bb.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b98490a0939a6d4fd6ecb443870ce94bfeb39a04ea1b761fad19e016dd87c460.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f85170a29eb389ca16bf9aa25a2837cc5c26e11774a6347ecc9f55e6d117c8ff.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:842fdec94c72b4584a3a494a44ba955c8090163610bfab289f65a994df18a472.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "vmware-vsphere-syncer-container-v4.19.0-202507291138.p0.g1513403.assembly.stream.el9": { + "nvr": "vmware-vsphere-syncer-container-v4.19.0-202507291138.p0.g1513403.assembly.stream.el9", + "nevr": "vmware-vsphere-syncer-container-0:v4.19.0-202507291138.p0.g1513403.assembly.stream.el9", + "id": 3773908, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:b6b6d56126b8df9b8c4569f7154b3367c7a1a1ab03eb0b85cce5a3d62f6c6a93.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openshift-enterprise-registry-container-v4.19.0-202507291138.p0.gb1d0976.assembly.stream.el9": { + "nvr": "openshift-enterprise-registry-container-v4.19.0-202507291138.p0.gb1d0976.assembly.stream.el9", + "nevr": "openshift-enterprise-registry-container-0:v4.19.0-202507291138.p0.gb1d0976.assembly.stream.el9", + "id": 3773958, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:c08140d1c919c828ebe5421f234640f207c6b847aabac62d37f24f18f35bc894.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fb68ced1484eabb12f62a3d8de1698eaeef0669b61788a81232ade34180ab465.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f208052b0d3b8243fbf47b5914487ee053a884a33f29bbc77f6d20b879f8094b.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:494ab7d2748731f1d64eec30055001e960fac40410ec1461190571b34712be31.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-insights-operator-container-v4.19.0-202507291138.p0.g8fffce9.assembly.stream.el9": { + "nvr": "ose-insights-operator-container-v4.19.0-202507291138.p0.g8fffce9.assembly.stream.el9", + "nevr": "ose-insights-operator-container-0:v4.19.0-202507291138.p0.g8fffce9.assembly.stream.el9", + "id": 3773936, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:e7d13db5dc43c93ea862a0f97d092781814f35e7157c0573ae050e659ecfe1da.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9f1640514bef26f92921d8c2f5fb348c0115dee2d30fd852a6136a64bf93005b.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a9e7fd43b41bf1e8654a325dc9bcd36df59b29cd8c526c2f9c0b2384fc48736e.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:83804de331b05e741b927841f71633aa080ac56c07f852a861e7afcab33527f8.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-baremetal-operator-container-v4.19.0-202507291138.p0.g0c3beae.assembly.stream.el9": { + "nvr": "ose-cluster-baremetal-operator-container-v4.19.0-202507291138.p0.g0c3beae.assembly.stream.el9", + "nevr": "ose-cluster-baremetal-operator-container-0:v4.19.0-202507291138.p0.g0c3beae.assembly.stream.el9", + "id": 3774060, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:ea3990a993fa9125b2e15818b1585b1d06d8b9bbe39d3d354a3de0e1ed2c2d35.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6119311299d87c101555c30d6c81962c1d36d1340e276a208d0a86da9b91abd9.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6810c2b662dfb1038b5938af4309b641759340342636ffd6455f14b0e9b2bd3d.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e91d5ec93d65ab040a39de188c05c6062d83c03077cf761c47ab370e0f609748.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "operator-registry-container-v4.19.0-202507291138.p0.g8bcf155.assembly.stream.el9": { + "nvr": "operator-registry-container-v4.19.0-202507291138.p0.g8bcf155.assembly.stream.el9", + "nevr": "operator-registry-container-0:v4.19.0-202507291138.p0.g8bcf155.assembly.stream.el9", + "id": 3773867, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:10db47555f1b03c3fd20c3e183595c565c3f7493ef9bc5d795d2c3d07ec95381.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b46e00ac3de4e968038b86db32cdad9e4050acd2d2e9d5632e0ae69f9b1ed745.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9c37ce8495b6eb2d9ec7ecc5c93d0b299d34345eaf84837c461be4b3b8deed07.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8ad86947f43b4c5e1d64dc65f473a47dd52fe6e3a20296f6488b785dea083860.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "container-networking-plugins-microshift-container-v4.19.0-202507291138.p0.gb09f487.assembly.stream.el9": { + "nvr": "container-networking-plugins-microshift-container-v4.19.0-202507291138.p0.gb09f487.assembly.stream.el9", + "nevr": "container-networking-plugins-microshift-container-0:v4.19.0-202507291138.p0.gb09f487.assembly.stream.el9", + "id": 3773955, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:102c3d8fa5a56f498f38dfc1d66a80813dcda18c8b5738bacb1afb2845ca082d.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:32dbac99825bb570e3fc5227dd457addc683d98b3a6525cbff37aa6323be83c0.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:3d550cc7c58075f46d85062eed8a8481baad759b4914593536ceb65e9b152fab.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:43745041825786c55bc75073c9239da22cdb52fd3118a0ff5fe658395b63af76.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "cluster-node-tuning-operator-container-v4.19.0-202507291138.p0.g61b6637.assembly.stream.el9": { + "nvr": "cluster-node-tuning-operator-container-v4.19.0-202507291138.p0.g61b6637.assembly.stream.el9", + "nevr": "cluster-node-tuning-operator-container-0:v4.19.0-202507291138.p0.g61b6637.assembly.stream.el9", + "id": 3773946, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:2ee0d12c03a024cdc637bc50e0afd77a3b3a81faf46c64b380d461dbb6291a79.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b6985e6b953c82b873e7355bacbceee1736c45622f90f395e618f042a43bd58e.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:36fce553b781dfbf6d824dca28c967c9bbb1005686559eca9184a86e413bc468.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b928f2fe01dd295bfc64e71975b03c4081725f112df4a12e4bdef70d46be7a53.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-powervs-block-csi-driver-container-v4.19.0-202507291138.p0.gf681413.assembly.stream.el9": { + "nvr": "ose-powervs-block-csi-driver-container-v4.19.0-202507291138.p0.gf681413.assembly.stream.el9", + "nevr": "ose-powervs-block-csi-driver-container-0:v4.19.0-202507291138.p0.gf681413.assembly.stream.el9", + "id": 3773994, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:1a01f668473e4a62a51bee86a0f62fd33c4bc7e8d7f4248381ac02972915a6df.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d01dc84ffe77312f0991e57b98285807f8096991c2a2527a8481a7a2cc56258f.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "golang-github-prometheus-node_exporter-container-v4.19.0-202507291138.p0.gc90542d.assembly.stream.el9": { + "nvr": "golang-github-prometheus-node_exporter-container-v4.19.0-202507291138.p0.gc90542d.assembly.stream.el9", + "nevr": "golang-github-prometheus-node_exporter-container-0:v4.19.0-202507291138.p0.gc90542d.assembly.stream.el9", + "id": 3773900, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:c655e0a834241a1dfcb7639abc8d54c6d3844d4a9f0b3479c567efe50de290e4.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:64f01510ed0a5150f11adba4905c0572d2d9651825cf71b73af79f033fdb8e3b.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a89c4a37c24251fc7434cc9e637be08e5f6a0a6a7df3780633b19fb23f11960c.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:0fdabdb0f0f255e906e57557b7f85068b98af9d8dae02df8d39d0a13479b8416.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-olm-operator-container-v4.19.0-202507291138.p0.gefb9139.assembly.stream.el9": { + "nvr": "ose-cluster-olm-operator-container-v4.19.0-202507291138.p0.gefb9139.assembly.stream.el9", + "nevr": "ose-cluster-olm-operator-container-0:v4.19.0-202507291138.p0.gefb9139.assembly.stream.el9", + "id": 3773995, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:581dac8d0f54ae33d298379dcfde56857181bcd688db009ea31f9ac8332489ab.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:551f8bbc2600ec5b008ae08151ce379245c26d45a912ac1d1922570bc7f88811.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:db97cb51e7bde92f3abc85e3fa616cd7f42755b1435df65f0ca00146d8bad146.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d16e03a3d348eca9df40b8dd38ba8628987df406945fcf39dd9f04b975ff9239.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-api-container-v4.19.0-202507291138.p0.g479f0c4.assembly.stream.el9": { + "nvr": "ose-cluster-api-container-v4.19.0-202507291138.p0.g479f0c4.assembly.stream.el9", + "nevr": "ose-cluster-api-container-0:v4.19.0-202507291138.p0.g479f0c4.assembly.stream.el9", + "id": 3774015, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:fc332b80bbfa8f48968720e3f1b2f5d89416a2365204663c8d727630aee4870a.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2b686718fe4b6ac74b8d2f10d51aa8e87e27a0b52ba2c7d54857a4285a77e7b5.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4aecce7a6373ee9ef465a9921b10b6aece2368b1b8a1793dd847f50a522db58f.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ff49374d423ef1083251919ae3c87f475b63ea6436fb9dbe81902334896f1f1f.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-agent-installer-api-server-container-v4.19.0-202507291138.p0.gbe6aa91.assembly.stream.el9": { + "nvr": "ose-agent-installer-api-server-container-v4.19.0-202507291138.p0.gbe6aa91.assembly.stream.el9", + "nevr": "ose-agent-installer-api-server-container-0:v4.19.0-202507291138.p0.gbe6aa91.assembly.stream.el9", + "id": 3774007, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:10de9c79da80798558ee8cc7292c133fef766d306d9bf47888eff307347e6fba.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:05c31debc784a45734df992793b0d0a90c980a8241eac9462668bdfe13868181.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:83e97a91436a9a4814efff0f0857c35a67ed550f152c97e1691d28a5b3bd0be5.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:3b923f9c1632fa5b985367663ec9d1767e83da51bae7248e84f6d1efb1610ba5.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-baremetal-runtimecfg-container-v4.19.0-202507291138.p0.g33a1d92.assembly.stream.el9": { + "nvr": "ose-baremetal-runtimecfg-container-v4.19.0-202507291138.p0.g33a1d92.assembly.stream.el9", + "nevr": "ose-baremetal-runtimecfg-container-0:v4.19.0-202507291138.p0.g33a1d92.assembly.stream.el9", + "id": 3773933, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:6e991ce649c63ea9c0fd9f6bba126ce33e58b80022c90f673bd8df2505ce6399.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ca4c1ab65c179f7d20fd6c84da9cf2fd8ce342690fe6afeaa0fab1fac437de8f.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fad7eaaae1ff208fd7fdfc4f292000fc07a90cd50f093ada08f43ef04abe43bf.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:649d4b401c0d8cc40807b742ce0504356ce54503e871e5ebcd33e929c656c08b.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "csi-driver-manila-container-v4.19.0-202507291138.p0.gd9b2461.assembly.stream.el9": { + "nvr": "csi-driver-manila-container-v4.19.0-202507291138.p0.gd9b2461.assembly.stream.el9", + "nevr": "csi-driver-manila-container-0:v4.19.0-202507291138.p0.gd9b2461.assembly.stream.el9", + "id": 3773887, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:c2c7479c0a85f4ac59b5c89718f263799f47100590fbaa842b736609da6b1ff5.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:eee61a42b3bc78db47e0bd4cc35c442fa874913181ef877b38f1d10150fe17f7.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-machine-approver-container-v4.19.0-202507291138.p0.ga52da47.assembly.stream.el9": { + "nvr": "ose-cluster-machine-approver-container-v4.19.0-202507291138.p0.ga52da47.assembly.stream.el9", + "nevr": "ose-cluster-machine-approver-container-0:v4.19.0-202507291138.p0.ga52da47.assembly.stream.el9", + "id": 3773909, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:5b59021e9eaf01f0be2d98b78d2090e39ea82d2930dc2a41546929503a884afb.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b2c8da838f23631d0e6b65555f94a0ac908226cb6548bf18824539bbb3b22c8f.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:79c1c837dd2d7bc9e20df8e2f7709c6294b686db0bd2cd7259d0fcf9e7352cac.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b98a6b550d91a63b8adba5d66aa31719ebe3942487cc4be69649ae240e04efc0.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-oauth-apiserver-container-v4.19.0-202507291138.p0.g7591406.assembly.stream.el9": { + "nvr": "ose-oauth-apiserver-container-v4.19.0-202507291138.p0.g7591406.assembly.stream.el9", + "nevr": "ose-oauth-apiserver-container-0:v4.19.0-202507291138.p0.g7591406.assembly.stream.el9", + "id": 3774063, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:c44b2e4d4e8618e9b746a993b2ee3eaf7d2e1d104b34a3149872bfb04ade6182.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b58a854091948e1f20c92519b808c0392f596cfb78796e75848a29f10c440f52.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d869e307d3b8c2d288d05d7f4991bc22515c6ba64f743266f2235f52ba508a7c.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:21edf9bdd8b067aa592d4aa3161e846eaa7d27c6a070b1d9625bef58afa771fe.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-cloud-controller-manager-operator-container-v4.19.0-202507291138.p0.g7ddcbe3.assembly.stream.el9": { + "nvr": "ose-cluster-cloud-controller-manager-operator-container-v4.19.0-202507291138.p0.g7ddcbe3.assembly.stream.el9", + "nevr": "ose-cluster-cloud-controller-manager-operator-container-0:v4.19.0-202507291138.p0.g7ddcbe3.assembly.stream.el9", + "id": 3774064, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:d7b83c2c65828fd79c1aa47bf6de028d588e8321a917ebed1105e10ae6093cc0.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:22a4680db39d15037cb4f3c1573cb6eaf4d2b2c81cc5537bac6152bcec74a1f2.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:1fa1170818118926df785a35d4a159876e9215e83fa25d9d8f7682cf17d2df1d.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:475fa20db5ecf16e35646c2afd6c0463b96496b807b9a701e23ec85ad9d6ec62.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-route-controller-manager-container-v4.19.0-202507291138.p0.gbc97534.assembly.stream.el9": { + "nvr": "ose-route-controller-manager-container-v4.19.0-202507291138.p0.gbc97534.assembly.stream.el9", + "nevr": "ose-route-controller-manager-container-0:v4.19.0-202507291138.p0.gbc97534.assembly.stream.el9", + "id": 3774046, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:b87c602e67955eeafca8c6da5738e5e7ede5e65310464d9d5ff2094c57ef103e.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:91e9c849148c64e8b896b967356a5f4b09dd217e4c3f4ed2ea3bf1ec96e56f3d.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:44a814374017c3f980df50ef2c9265d733701f65938208df0373f85cce96b5a4.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:38b5fc8ada2afe92ad687806f55147f6d6f3f54755418f283dbae01b5b225239.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-aws-pod-identity-webhook-container-v4.19.0-202507291138.p0.gb0a16d5.assembly.stream.el9": { + "nvr": "ose-aws-pod-identity-webhook-container-v4.19.0-202507291138.p0.gb0a16d5.assembly.stream.el9", + "nevr": "ose-aws-pod-identity-webhook-container-0:v4.19.0-202507291138.p0.gb0a16d5.assembly.stream.el9", + "id": 3773932, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:09fbfbd7f6e859b9d6a5ebef3199433fbe1d2fef3b2c982cef33292b4107e5a9.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:0f6176e3002e7046f7aa3ca3db386d342f13d499ca46ae6306458fe4ddbc6974.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-control-plane-machine-set-operator-container-v4.19.0-202507291138.p0.g1dbf0c7.assembly.stream.el9": { + "nvr": "ose-cluster-control-plane-machine-set-operator-container-v4.19.0-202507291138.p0.g1dbf0c7.assembly.stream.el9", + "nevr": "ose-cluster-control-plane-machine-set-operator-container-0:v4.19.0-202507291138.p0.g1dbf0c7.assembly.stream.el9", + "id": 3773947, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:70ec4a688aff985b59d35d4872d8a1bb85d79c5bc9def6c1752945ebc359cb4b.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:77eddbc51cec167a701a30bb867df7580e3d5bd7b473d59c95c7178f957cdeac.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8ddac947ac0c44173bb46b69838dd8a5cc8c02f67c8d88fe089f2d75f2c19548.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8ed5409693536b16493d28c9051109d66bfb9ad9dc217170afe8a5720e437c69.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-autoscaler-operator-container-v4.19.0-202507291138.p0.g227f753.assembly.stream.el9": { + "nvr": "ose-cluster-autoscaler-operator-container-v4.19.0-202507291138.p0.g227f753.assembly.stream.el9", + "nevr": "ose-cluster-autoscaler-operator-container-0:v4.19.0-202507291138.p0.g227f753.assembly.stream.el9", + "id": 3773982, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:3564db4e19a806585ef360edd9fd4e7c5dde408aadccbc8a81a33222f354e018.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9a5e2937022de9d360998f0bc51bffc56cb2f56d9568480bcced355727fbff37.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8fb7a6333ce31175120fb3acfacb2df9ef838ba2236ef46b616184b75436dcf6.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b0f9cc842baa20f04f7ebc289ec43585e322795ee9002d37a81a844f900ed567.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "prometheus-operator-admission-webhook-container-v4.19.0-202507291138.p0.gb8debb4.assembly.stream.el9": { + "nvr": "prometheus-operator-admission-webhook-container-v4.19.0-202507291138.p0.gb8debb4.assembly.stream.el9", + "nevr": "prometheus-operator-admission-webhook-container-0:v4.19.0-202507291138.p0.gb8debb4.assembly.stream.el9", + "id": 3773948, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:1ebcfe0c1d72d5c25bd6f9511cefe350a2b2b7254ed2c99abcbcfb0b7f148c71.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:df96d3abfff7d6c773f65f902da806a5ee1e86f64065e54515974ef1966a38d1.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:99770b6fff62e14f24fe347998e1f8038121f1377905c31fb9163ce7d065e886.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c474af49cd2773cd2cb83ebb68b03a47a359e704568b3041450aba431e5fdea9.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openshift-enterprise-cli-container-v4.19.0-202507291138.p0.g298429b.assembly.stream.el9": { + "nvr": "openshift-enterprise-cli-container-v4.19.0-202507291138.p0.g298429b.assembly.stream.el9", + "nevr": "openshift-enterprise-cli-container-0:v4.19.0-202507291138.p0.g298429b.assembly.stream.el9", + "id": 3773960, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:78e6d045ce2ab13b302f5f07a221124755589df15613a798fad8383d2f9a7b6a.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:44507f3d19467ab82067c9e890e57f8f4eb3cee1d8ccbe4817867a6836b37938.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a1c65b53d5a40dd0d7712d665ac275d247725d32db08c0201f58838db22ed846.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:62d80c8fcd71c33c13bcfc5f35d59769d3c04415936f80e6a91ecd1592db27d9.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "golang-github-openshift-oauth-proxy-container-v4.19.0-202507291138.p0.gf74e8e0.assembly.stream.el9": { + "nvr": "golang-github-openshift-oauth-proxy-container-v4.19.0-202507291138.p0.gf74e8e0.assembly.stream.el9", + "nevr": "golang-github-openshift-oauth-proxy-container-0:v4.19.0-202507291138.p0.gf74e8e0.assembly.stream.el9", + "id": 3773985, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:d8e590ef391e96ec8af8b74106bab91b89426053b9d2e19a3b3d3f464bfdae7c.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:32158e0f364b0d0d9ce66b5f5a79db47a0aa462778691436a7216eccae866ffe.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:64756b1d04f153dd0bf0be7d945f624defca4573eaaba45866ab6692ac931c3c.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d2f727976f28997b6c94dbee4bb28954aaa475f27eba29c5f5a2f1141287e015.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "gcp-workload-identity-federation-webhook-container-v4.19.0-202507291138.p0.gfbf4c1b.assembly.stream.el9": { + "nvr": "gcp-workload-identity-federation-webhook-container-v4.19.0-202507291138.p0.gfbf4c1b.assembly.stream.el9", + "nevr": "gcp-workload-identity-federation-webhook-container-0:v4.19.0-202507291138.p0.gfbf4c1b.assembly.stream.el9", + "id": 3773928, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:06f6e69d5aea92206a8e4bab15ebef5732e5d29cea2fe7b89b92549f53d78024.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:934020c606ff9cc0ac060eed1eb586fec4f7b27e61001e3b381686e766d6a909.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:0d61338f46e36fcf13f7412cfc7bdb742d08f3d48c2edc9f3d8e38422e675152.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fe9b02e2e552148d7fb14e93403be8023f8c1c8ebbcaf1fb88db1455f960554d.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-kubevirt-cloud-controller-manager-container-v4.19.0-202507291138.p0.g3f4542e.assembly.stream.el9": { + "nvr": "ose-kubevirt-cloud-controller-manager-container-v4.19.0-202507291138.p0.g3f4542e.assembly.stream.el9", + "nevr": "ose-kubevirt-cloud-controller-manager-container-0:v4.19.0-202507291138.p0.g3f4542e.assembly.stream.el9", + "id": 3774022, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:4d3c9eff969df627ad32189820a1b25315876d8fbe240190d119a25c077f639d.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f71becd3212b97c98c3a823220f73120ce4f98331584393f6b53077430a6e1c7.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4a2e1397fafd9366b38aa820a18c506f860bb01e9549a0f92ebd2e4022369c4f.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8f3765a6f4c275b3d1a48c8cf1374194aea5726376e7b6f88c02712661879777.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-ibm-vpc-block-csi-driver-container-v4.19.0-202507291138.p0.g176b6ef.assembly.stream.el9": { + "nvr": "ose-ibm-vpc-block-csi-driver-container-v4.19.0-202507291138.p0.g176b6ef.assembly.stream.el9", + "nevr": "ose-ibm-vpc-block-csi-driver-container-0:v4.19.0-202507291138.p0.g176b6ef.assembly.stream.el9", + "id": 3773986, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:1a8053451ec989d67baca27cce042439134091558d7a9008715dd1aba6e6a7c2.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d0529b0a5bf0f2c7626f577bf5037f060401ed7e319ce35fc8d36c1e2147afcc.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "coredns-container-v4.19.0-202507291138.p0.g74776b8.assembly.stream.el9": { + "nvr": "coredns-container-v4.19.0-202507291138.p0.g74776b8.assembly.stream.el9", + "nevr": "coredns-container-0:v4.19.0-202507291138.p0.g74776b8.assembly.stream.el9", + "id": 3773890, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:adeb198bcbb34d10a237ca9bc7aa32958e966af4f29ecaf0c4c2ab8669c29128.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c8045afa9f08cc61eadb83ba264da7242ce6842ee285c590fc6b5319dc884da2.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4fb4ef6d3715e70b6a5733d2be1475bd1594e729ae6e22901ad1ac741ab8da49.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:231c89cf928028e2b5f8564c7df660739486261eb2526ab6ab50807302e7449c.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openshift-enterprise-console-container-v4.19.0-202507300242.p0.g8d06e69.assembly.stream.el9": { + "nvr": "openshift-enterprise-console-container-v4.19.0-202507300242.p0.g8d06e69.assembly.stream.el9", + "nevr": "openshift-enterprise-console-container-0:v4.19.0-202507300242.p0.g8d06e69.assembly.stream.el9", + "id": 3774911, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:b209c13002a3fc2883de1f37b037aa14ceb80cff9e4b521ce3f06e3b9652d8e0.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a235b5a8672d70557d2baffe4cbd987870ddca62025b6917e70b1f83bd0b2a31.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:bf8371ea8225f18788e42fbff7a3c8ca9205e11a62687e21101e6eb751c9ceda.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:0e6ea1c0fcaad41473e67cb7df1adbc62438f38897ac3d35e28a391f4052f4e8.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-csi-snapshot-controller-operator-container-v4.19.0-202507291138.p0.gcf99de9.assembly.stream.el9": { + "nvr": "ose-cluster-csi-snapshot-controller-operator-container-v4.19.0-202507291138.p0.gcf99de9.assembly.stream.el9", + "nevr": "ose-cluster-csi-snapshot-controller-operator-container-0:v4.19.0-202507291138.p0.gcf99de9.assembly.stream.el9", + "id": 3773979, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:d90b0718dddd5e9f2559ad82a71364582098057c3a02c4ca4c02546937594b27.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:331f4085e71795341e2792ba6eecd2c9d4bb57bad1a27311f6134188c25a0f5e.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:957acb5103b8784cb095e9bdce8eb0ff588a6c2e75148f09c92c3087964e0e1b.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:23b0d26f73a7a26c94b5d3d87a8db67ea42f2afc087122da11d6a1b0581c8a93.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-vsphere-problem-detector-container-v4.19.0-202507291138.p0.g32b15d8.assembly.stream.el9": { + "nvr": "ose-vsphere-problem-detector-container-v4.19.0-202507291138.p0.g32b15d8.assembly.stream.el9", + "nevr": "ose-vsphere-problem-detector-container-0:v4.19.0-202507291138.p0.g32b15d8.assembly.stream.el9", + "id": 3773931, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:33bfd08dfffee164e75ab68149a71e5b1861c8aea5366e74c1e2357b31d01a9e.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-machine-os-images-container-v4.19.0-202507292137.p0.g32b5f16.assembly.stream.el9": { + "nvr": "ose-machine-os-images-container-v4.19.0-202507292137.p0.g32b5f16.assembly.stream.el9", + "nevr": "ose-machine-os-images-container-0:v4.19.0-202507292137.p0.g32b5f16.assembly.stream.el9", + "id": 3774643, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:701bf030df80aaf428b21e554dd99757c985a1228a78afc22cadf62305a3c509.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2b95681cf41ccfbce2e42401bb25daa79db118e8aef3a7123589ba686fde8062.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ac80660b9e7c3a59f14521f14510533352115d4d2d6899267a2ce5e85419a0bd.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4203f39f0784b1b9d495929aa3364e0276d408833cfcd6a49c58dd4a302fbeb8.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ironic-agent-container-v4.19.0-202507291138.p0.g5b5afbd.assembly.stream.el9": { + "nvr": "ironic-agent-container-v4.19.0-202507291138.p0.g5b5afbd.assembly.stream.el9", + "nevr": "ironic-agent-container-0:v4.19.0-202507291138.p0.g5b5afbd.assembly.stream.el9", + "id": 3773937, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:84d3cb06d863fbb34dd7a704af14ceefabb06f1bb2052d63daae842d75fd7b52.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c024f907739b180c2b37b9a31479c1a8d32d9961aeaf906174fbde4f2414daec.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-config-operator-container-v4.19.0-202507291138.p0.g96607b5.assembly.stream.el9": { + "nvr": "ose-cluster-config-operator-container-v4.19.0-202507291138.p0.g96607b5.assembly.stream.el9", + "nevr": "ose-cluster-config-operator-container-0:v4.19.0-202507291138.p0.g96607b5.assembly.stream.el9", + "id": 3773975, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:3e2d2d8171628d31ab0e949f15585d59554567ea470c41d35867b10528a22261.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2ab3c4957b817d078b03e5115e438a647502ea9f9eedc9e6cd7335f30341ba67.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:67055a8db401a0ddbdd73918c610e8ba0e3cda8fd399cfa7f34254bd17cb9a55.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:227bddf08d10a60d9003f9e17002bf1fd29d27e975f2737588658f9febe824f9.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-vsphere-cluster-api-controllers-container-v4.19.0-202507291138.p0.g55cce62.assembly.stream.el9": { + "nvr": "ose-vsphere-cluster-api-controllers-container-v4.19.0-202507291138.p0.g55cce62.assembly.stream.el9", + "nevr": "ose-vsphere-cluster-api-controllers-container-0:v4.19.0-202507291138.p0.g55cce62.assembly.stream.el9", + "id": 3773964, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:a128263a7ce463f7b703450d10cb2a5688de1efbf3389047a21c7c743141ee47.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-machine-api-operator-container-v4.19.0-202507292137.p0.g5eb6a36.assembly.stream.el9": { + "nvr": "ose-machine-api-operator-container-v4.19.0-202507292137.p0.g5eb6a36.assembly.stream.el9", + "nevr": "ose-machine-api-operator-container-0:v4.19.0-202507292137.p0.g5eb6a36.assembly.stream.el9", + "id": 3774481, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:1bdfca24be4e92f9a9a878a282598de3d9451273ba44a19b9ab31759ab98721d.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:77d26211875e588ab1c2edc64917dfa271c208b4568317b03daf97cc30b5bc60.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fa530e16d94bcba241e3de2938599428da666ab7d6b8bbe9fe7f6eb656d78a37.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ca323ce438891a4b5002f3f1c304feee3677dfda2192c9ccbe31820adefff0fc.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-machine-api-provider-azure-container-v4.19.0-202507291138.p0.g04987a4.assembly.stream.el9": { + "nvr": "ose-machine-api-provider-azure-container-v4.19.0-202507291138.p0.g04987a4.assembly.stream.el9", + "nevr": "ose-machine-api-provider-azure-container-0:v4.19.0-202507291138.p0.g04987a4.assembly.stream.el9", + "id": 3773963, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:99a3a0fcbb2b69c2e763b44078fc44af5ab5ce934cd55d50bd51e07de507a80b.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6359c5bcfebbac858b740d7394aaa349ceac9822a5e72f740fd7c1159606a970.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-etcd-container-v4.19.0-202507291138.p0.ga5421df.assembly.stream.el9": { + "nvr": "ose-etcd-container-v4.19.0-202507291138.p0.ga5421df.assembly.stream.el9", + "nevr": "ose-etcd-container-0:v4.19.0-202507291138.p0.ga5421df.assembly.stream.el9", + "id": 3774006, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:0e04151ecb6d57859bbe9d125d889a68d64e157a08a01a7eb3920a6c03f4c520.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ceaedcd76f4278fca308a2895c1e46b6cadf91a6b1d5fe3b2ff29ed3d28f0f24.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:af554847695d6795c76342bc122e776728281695525e4d0104ea324280291cfc.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ae0009a41a3dd85af68c7cf9f93b8691428043d8c3930ffe5285fb0004623f3a.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openshift-enterprise-builder-container-v4.19.0-202507291138.p0.g28622dd.assembly.stream.el9": { + "nvr": "openshift-enterprise-builder-container-v4.19.0-202507291138.p0.g28622dd.assembly.stream.el9", + "nevr": "openshift-enterprise-builder-container-0:v4.19.0-202507291138.p0.g28622dd.assembly.stream.el9", + "id": 3773856, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:6031eb774a59ed0f94a2eebf0ffaa16124d84a0647b57d9909e09e1bb62e359d.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:54e5137392c3f69ed331f7bbcce1066e037db883958d8296de0eb01dbb5d24ee.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ad3433443d31205bd944ea8e3ae0ceac453c7796e35865d1cafa95d09cb47796.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:447c5c8084c6efeff36c1ca926ed5f3682374a51f280e91bb589cafc02d049e4.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-ibm-cloud-controller-manager-container-v4.19.0-202507291138.p0.g7422aab.assembly.stream.el9": { + "nvr": "ose-ibm-cloud-controller-manager-container-v4.19.0-202507291138.p0.g7422aab.assembly.stream.el9", + "nevr": "ose-ibm-cloud-controller-manager-container-0:v4.19.0-202507291138.p0.g7422aab.assembly.stream.el9", + "id": 3773835, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:37fbbd6b4d54d7f5b4447ac669d9ede2c7de63eab2c894372a2a2701e91fb736.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ed6c175e3f125a864dd3308289677f138b4bf566fd14ec46e4e5085bbd4dd5b0.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-agent-installer-utils-container-v4.19.0-202507291138.p0.gaa7e2a3.assembly.stream.el9": { + "nvr": "ose-agent-installer-utils-container-v4.19.0-202507291138.p0.gaa7e2a3.assembly.stream.el9", + "nevr": "ose-agent-installer-utils-container-0:v4.19.0-202507291138.p0.gaa7e2a3.assembly.stream.el9", + "id": 3774065, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:2a5f0a66dbcbd10e331686e0031827bd327eb158931fe1da9a9e70448158bc7c.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:07bcd92b73d08233a103ffc2184eeaa996997f494b9fb40dcb6cb014ad7f63a3.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:40e528bd7113a2da2bb6e5dd901fc422b7e001c254f44e6dadaaa1e861fe7efb.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:89ccc86dc8c219498fd409722e7d9ac2cf3377cce428240b83b068233519c96d.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-aws-ebs-csi-driver-operator-container-v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9": { + "nvr": "ose-aws-ebs-csi-driver-operator-container-v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9", + "nevr": "ose-aws-ebs-csi-driver-operator-container-0:v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9", + "id": 3774016, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:8fb2c684bf919f347ace019267a7eca1136f7b2e98b0ad95cba9ce9c57e9d9b5.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a47bd15076a368e9543025a4ec45f01efdf897e88ecc1519d108f9f1888b3c6f.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-insights-runtime-exporter-container-v4.19.0-202507291138.p0.g0bee2d9.assembly.stream.el9": { + "nvr": "ose-insights-runtime-exporter-container-v4.19.0-202507291138.p0.g0bee2d9.assembly.stream.el9", + "nevr": "ose-insights-runtime-exporter-container-0:v4.19.0-202507291138.p0.g0bee2d9.assembly.stream.el9", + "id": 3773903, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:79a863dfb74da1dc80f2f3aea647792adafc3b8eb5904ea270575aa246e464da.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:23fd45facee4966949bcd0ef06f22b3930ddc28917401484dcec12e14c2ae641.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:3ca2f7b830cd6e277df38b40ea991cab74c3167f24a263554d850ac38a8f8817.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8a5efa0ac01bbad30155728631333065bebca19e82a7e8178c704b7ea61c9aca.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-aws-cloud-controller-manager-container-v4.19.0-202507291138.p0.g425c1c5.assembly.stream.el9": { + "nvr": "ose-aws-cloud-controller-manager-container-v4.19.0-202507291138.p0.g425c1c5.assembly.stream.el9", + "nevr": "ose-aws-cloud-controller-manager-container-0:v4.19.0-202507291138.p0.g425c1c5.assembly.stream.el9", + "id": 3773984, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:5f95668f8b0db48b4d71a8a89b429ec5dbbecd6cffda750750aa7d18cbb55424.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:34797bdd4ce6a73467e216afb4f6ac5ba29d14c67abfc7b4e2987a8f7e06ba33.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-apiserver-network-proxy-container-v4.19.0-202507291138.p0.g77213cc.assembly.stream.el9": { + "nvr": "ose-apiserver-network-proxy-container-v4.19.0-202507291138.p0.g77213cc.assembly.stream.el9", + "nevr": "ose-apiserver-network-proxy-container-0:v4.19.0-202507291138.p0.g77213cc.assembly.stream.el9", + "id": 3773989, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:0d35f5337f7c9f6dff43e507854b78bbdfa5ebd00e4f97fb9d207b727ddbfa94.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c60e9e7c3939016c0297e3cf3857da573bd11c08f4cb5030b20b2eaaefaaf0d9.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e9a5377a4dfe7d92cf516bce382c8fefdfc0feb035350ea4bbfe0f0dbb4aa1a8.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:611c4dfdb967a19c01a7cb570aa16cfa5592bf061c28b8483c4fe915f69baa98.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "kube-state-metrics-container-v4.19.0-202507291138.p0.gc3da3b5.assembly.stream.el9": { + "nvr": "kube-state-metrics-container-v4.19.0-202507291138.p0.gc3da3b5.assembly.stream.el9", + "nevr": "kube-state-metrics-container-0:v4.19.0-202507291138.p0.gc3da3b5.assembly.stream.el9", + "id": 3774012, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:ea511ee73152888e07fa6bde5c35d2db4ea6c6c58616682798446ed155322cab.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b4c0553115b022acebb629a9ac1158bf2b9b1cd08d7a0aa9e616600d385b5b52.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a037a69e9ee8987db90907ca957d2084666e037a756816a8a69a5502b7c16122.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fad7137181df5c4ea63949aaa12db2a727347ebd65eb55bed5184027b151d13a.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ironic-rhcos-downloader-container-v4.19.0-202507291138.p0.gdacba7d.assembly.stream.el9": { + "nvr": "ironic-rhcos-downloader-container-v4.19.0-202507291138.p0.gdacba7d.assembly.stream.el9", + "nevr": "ironic-rhcos-downloader-container-0:v4.19.0-202507291138.p0.gdacba7d.assembly.stream.el9", + "id": 3773962, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:d649d580eac01c54009043cfd1882a53773db58c40bb09d78e885705506ebe4b.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:64e28035a38204213cedbaf79a5bd870668e03823062b1e707e04f6d5d0a5e11.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-agent-installer-orchestrator-container-v4.19.0-202507291138.p0.g0de2920.assembly.stream.el9": { + "nvr": "ose-agent-installer-orchestrator-container-v4.19.0-202507291138.p0.g0de2920.assembly.stream.el9", + "nevr": "ose-agent-installer-orchestrator-container-0:v4.19.0-202507291138.p0.g0de2920.assembly.stream.el9", + "id": 3773942, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:4d5ffbf61df9424b063f332573e224a91e78f7a5ed7782e5d1d9ae37eca99161.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:3e8c0c340b6d96105fd21a43663d5f2af746e050f033a24c98a65d04ff0e608f.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:7ced37b04c42f34eb98fda09993d12841344619d23c6d2c3c2cd24cb36455757.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:075a730fef8a87774f3d165a697f4258afbc6fff4e1c987b632f2b0dedc03a72.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-tools-container-v4.19.0-202507291138.p0.g298429b.assembly.stream.el9": { + "nvr": "ose-tools-container-v4.19.0-202507291138.p0.g298429b.assembly.stream.el9", + "nevr": "ose-tools-container-0:v4.19.0-202507291138.p0.g298429b.assembly.stream.el9", + "id": 3773870, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:9e75657a6c1b85d822d1edcb4d142fc4197c56367ff22a8c5a4fde25d83bb43b.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:3ad3cc86c744ee2adb4f2f89a206f078e8d242d93ed701f15749b2b0660f3649.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6dc2f10ef7cd7e322afc9f869a1efe5668211f8add58fab78748b7bd2d1be7c2.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:1e459089f0fd4607757cd391340495dd73e34cbff5c8ec35b84cecb214290d45.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-azure-workload-identity-webhook-container-v4.19.0-202507291138.p0.ge5c6c44.assembly.stream.el9": { + "nvr": "ose-azure-workload-identity-webhook-container-v4.19.0-202507291138.p0.ge5c6c44.assembly.stream.el9", + "nevr": "ose-azure-workload-identity-webhook-container-0:v4.19.0-202507291138.p0.ge5c6c44.assembly.stream.el9", + "id": 3773949, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:1fbbcf3eb643ee4456b0d5d3137d519abdc88cde4d057356a0ac6586768869a9.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b7b6b5ef91f9dd4b82bd525b4a5c4b7205f5d70857c35e9cd6413237136f10ef.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "baremetal-machine-controller-container-v4.19.0-202507291138.p0.gf7a7895.assembly.stream.el9": { + "nvr": "baremetal-machine-controller-container-v4.19.0-202507291138.p0.gf7a7895.assembly.stream.el9", + "nevr": "baremetal-machine-controller-container-0:v4.19.0-202507291138.p0.gf7a7895.assembly.stream.el9", + "id": 3773976, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:344b1958dca3110ac3a92fa12d78ff6b43f54ddc5afcb7ede69775f9314e8af2.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f9b6856fadd7c2e11ba9a80ec89a00a75686b3bdf6a0ca2e5fa664cb54275803.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a8a69f2369e645606530c0f28f3f6772bb25c5e016468e104f9dc74025e27f24.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c23015103a281e91c15ec7cac535a87b590c0ee0c3aba41df8ad047b6fe9f7f4.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-azure-service-operator-container-v4.19.0-202507291138.p0.g0ae129b.assembly.stream.el9": { + "nvr": "ose-azure-service-operator-container-v4.19.0-202507291138.p0.g0ae129b.assembly.stream.el9", + "nevr": "ose-azure-service-operator-container-0:v4.19.0-202507291138.p0.g0ae129b.assembly.stream.el9", + "id": 3773899, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:f7a93d661a2f38d2a1891bf36bda8497cbf528e3cdea01b505184f7220f80d93.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e2f7baa6ed9d481602acad02efcc11a425ec814d57895cf1c4534f1b62e5412c.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e5e1b624d2153b800b2c84d61ead46166b6f9fda932325c4a580555aef612e7e.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8e0dbe27e6df902df295b6fb66ac8a4d4fe34431683abc31beaa3fbd6538b0e0.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-olm-operator-controller-container-v4.19.0-202507291138.p0.g8f42f09.assembly.stream.el9": { + "nvr": "ose-olm-operator-controller-container-v4.19.0-202507291138.p0.g8f42f09.assembly.stream.el9", + "nevr": "ose-olm-operator-controller-container-0:v4.19.0-202507291138.p0.g8f42f09.assembly.stream.el9", + "id": 3773904, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:f8c0937c22d6c163830af692517f5e37ad559b6f38470313fc43c8c35657ffd5.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:37bf2993dce6dc04db22ea8d5a5bf8ae2d602139146ea2270aacb15ad0d81c6a.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:15538b87bf7a5723137ac1623ca8dab4013c46cb27c147af18fca4c63aff1380.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:55ae85dc622141652c39ea8f2c9d889e5631c33a8cfaba8f3d8c9a3cc46167f0.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-frr-container-v4.19.0-202507291138.p0.g5076dbc.assembly.stream.el9": { + "nvr": "ose-frr-container-v4.19.0-202507291138.p0.g5076dbc.assembly.stream.el9", + "nevr": "ose-frr-container-0:v4.19.0-202507291138.p0.g5076dbc.assembly.stream.el9", + "id": 3773940, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:2ac3e02570774e1128dbd63ae528cb69080134df58d7cbfcd18314482778d289.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:88b9a9951006a7d187d2dceba2ec3839fd419aeab0099f2e333fed9d22d7d49a.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:618ab9650460f1ba839c4556bb96da8b3c9e9e7daeecf5aab0c95dbeeb3f688f.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ed2d5901949da6ae209deb5b088b7064635442ce6f60c395e13483c83d467360.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-olm-catalogd-container-v4.19.0-202507291138.p0.g8f42f09.assembly.stream.el9": { + "nvr": "ose-olm-catalogd-container-v4.19.0-202507291138.p0.g8f42f09.assembly.stream.el9", + "nevr": "ose-olm-catalogd-container-0:v4.19.0-202507291138.p0.g8f42f09.assembly.stream.el9", + "id": 3774047, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:31efbea988b7cc3e106b7c4c7fb693d77296ff140076b6c4a7f6704bd62a8e4a.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:0e1d5c056f395193b224da3ee5fcca84058a68d930505165c1713281280050c3.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9531e7a30deea0bd73285d6e5cf38c392e41b910c378338faeda900ea5d18a78.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:3a5a4153b3d02cb2c4ee7c2f11808e6576a81a35eee67590bdf859e5680be22d.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-powervs-block-csi-driver-operator-container-v4.19.0-202507291138.p0.g059d95c.assembly.stream.el9": { + "nvr": "ose-powervs-block-csi-driver-operator-container-v4.19.0-202507291138.p0.g059d95c.assembly.stream.el9", + "nevr": "ose-powervs-block-csi-driver-operator-container-0:v4.19.0-202507291138.p0.g059d95c.assembly.stream.el9", + "id": 3774037, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:de26575028da079faf254b2ff4d5f4c15705dff8f58267cb404393f915d0d8f2.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:61c0e1d1b19e6fe0a0f50b714c7a5ee405e0956e3fd9f5a86a9e677794872092.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-azure-file-csi-driver-operator-container-v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9": { + "nvr": "ose-azure-file-csi-driver-operator-container-v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9", + "nevr": "ose-azure-file-csi-driver-operator-container-0:v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9", + "id": 3773906, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:09087ae7e60733217f405015afaad4c55dfab1674573f47d426ed710dbbf8b8f.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:30eadd1097a15e998ed2f6ff9fc21f037d4b53e8b83f4112bafd3bb932837d4f.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-ibm-vpc-block-csi-driver-operator-container-v4.19.0-202507291138.p0.g3dfcfa1.assembly.stream.el9": { + "nvr": "ose-ibm-vpc-block-csi-driver-operator-container-v4.19.0-202507291138.p0.g3dfcfa1.assembly.stream.el9", + "nevr": "ose-ibm-vpc-block-csi-driver-operator-container-0:v4.19.0-202507291138.p0.g3dfcfa1.assembly.stream.el9", + "id": 3773883, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:f80af68c89256d690080cdddf6d0cdfeb1c666e0881de4a1943e8c9a5d66b1d6.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a00a71b97c62f2be0fbd7fa9baca44589e5f31d036a5ae50c7a4ff7ddc5cca28.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-machine-config-operator-container-v4.19.0-202507291138.p0.gdbaf702.assembly.stream.el9": { + "nvr": "ose-machine-config-operator-container-v4.19.0-202507291138.p0.gdbaf702.assembly.stream.el9", + "nevr": "ose-machine-config-operator-container-0:v4.19.0-202507291138.p0.gdbaf702.assembly.stream.el9", + "id": 3773865, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:3dddc41223a8efade08724f3f56ea0143e760175a37b498df846e0e98b54bac8.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:44d357b1693275e0f103981858fd1b544339d3943690b5f43bf74453d01eb76a.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8e33e5c9f0da489b846dfd4fb39016563881d94f08866fa831bd2595b8219374.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a46e52f6b38f5ef61e4973c30ff61b1f5ff5b777d7caca04a4450c20819e69c2.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-service-ca-operator-container-v4.19.0-202507291138.p0.g4dfa691.assembly.stream.el9": { + "nvr": "ose-service-ca-operator-container-v4.19.0-202507291138.p0.g4dfa691.assembly.stream.el9", + "nevr": "ose-service-ca-operator-container-0:v4.19.0-202507291138.p0.g4dfa691.assembly.stream.el9", + "id": 3774032, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:64a7d2fadaabe89616cc277271d72ef9206ae9691b7eedcc01f9aad73fd35510.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e8a2bd0c1ca866a56b1786668f4bf902bdeae655dab43014673e983bba8ede8e.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:04a5b841728ed5e0267dbda1421160b668c945048d4066732a81ad1114375e54.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e7fafa79c5d256ae5614c346e288d0bf620dc1177cd7ab008ed988f707b56034.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-dns-operator-container-v4.19.0-202507291138.p0.g6598130.assembly.stream.el9": { + "nvr": "ose-cluster-dns-operator-container-v4.19.0-202507291138.p0.g6598130.assembly.stream.el9", + "nevr": "ose-cluster-dns-operator-container-0:v4.19.0-202507291138.p0.g6598130.assembly.stream.el9", + "id": 3773999, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:6b1b8e76c9e9fb5238f3d3f183274cc262e710ffdfcf650cbdf39ddb412ed2f5.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a770d5a5665283b75003f828548dc5d987bad8ee7b7e62038d9f915e8d6e498f.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:84154fd3ec774357b4096172ef48d1716662ade208a9402eb813265f4f141153.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:cd024721a046aaf0b4489b7399b1aacfcc718c914b7f471b459108c32715e523.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-nutanix-machine-controllers-container-v4.19.0-202507291138.p0.ga26db5a.assembly.stream.el9": { + "nvr": "ose-nutanix-machine-controllers-container-v4.19.0-202507291138.p0.ga26db5a.assembly.stream.el9", + "nevr": "ose-nutanix-machine-controllers-container-0:v4.19.0-202507291138.p0.ga26db5a.assembly.stream.el9", + "id": 3774058, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:a26e51ed4ad797906c6890618934775d5ec6807c52758c742670d30a110dbc5f.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-multus-route-override-cni-container-v4.19.0-202507291138.p0.g391c1b0.assembly.stream.el9": { + "nvr": "ose-multus-route-override-cni-container-v4.19.0-202507291138.p0.g391c1b0.assembly.stream.el9", + "nevr": "ose-multus-route-override-cni-container-0:v4.19.0-202507291138.p0.g391c1b0.assembly.stream.el9", + "id": 3773965, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:bf4cf40387b927d6d64c4d4dc119669755bc66575a4aac5b4a71ebd06ea067b5.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:eaf082ad2c2bbad5b5dbc6ac66166dbf8ec19c0d1630f68d5bcb5fa4c7084220.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:46a77513039932119d12ab6fab0066053a426ed573b7da78c25c4633e468d61f.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9b8a92da01ea234d2912d13457271a76cea54e1b383deadb76d84072bdf559ce.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-aws-ebs-csi-driver-container-v4.19.0-202507291138.p0.gd686e7d.assembly.stream.el9": { + "nvr": "ose-aws-ebs-csi-driver-container-v4.19.0-202507291138.p0.gd686e7d.assembly.stream.el9", + "nevr": "ose-aws-ebs-csi-driver-container-0:v4.19.0-202507291138.p0.gd686e7d.assembly.stream.el9", + "id": 3773844, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:5127b419e19a51b81fd77c36f0fbebd042e16f69866e7fa28c9abc828932d1e5.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:1cc29c0ceebd12f4367782c68a14cd293ab63b3f1641bce811926c45c3787a85.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-vmware-vsphere-csi-driver-operator-container-v4.19.0-202507291138.p0.gc2b41c3.assembly.stream.el9": { + "nvr": "ose-vmware-vsphere-csi-driver-operator-container-v4.19.0-202507291138.p0.gc2b41c3.assembly.stream.el9", + "nevr": "ose-vmware-vsphere-csi-driver-operator-container-0:v4.19.0-202507291138.p0.gc2b41c3.assembly.stream.el9", + "id": 3773993, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:edebcc8ad0f9c8a2e797546d0f7b8be42b16295dcd35a80b8396b2fa22d522c8.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "marketplace-operator-container-v4.19.0-202507291138.p0.g02d2455.assembly.stream.el9": { + "nvr": "marketplace-operator-container-v4.19.0-202507291138.p0.g02d2455.assembly.stream.el9", + "nevr": "marketplace-operator-container-0:v4.19.0-202507291138.p0.g02d2455.assembly.stream.el9", + "id": 3774044, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:adf946edbcbc81c30aa53a3d7ea3877be4d38f1f07cb8cade86041b7ed228850.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c8fc253ad1c33d3ab28bd6b5cd6c825c2d4cba813c89631b040adfb6152149ba.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b805731a90f87fc5aeab91b353fc21fa6161ec9839c7ff2f88971d627eeb80d5.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:0c23604c06b5724056d3a6efcf13bd244e3b40e82e6eeea136e096b35d500130.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-gcp-pd-csi-driver-container-v4.19.0-202507291138.p0.g3aeac35.assembly.stream.el9": { + "nvr": "ose-gcp-pd-csi-driver-container-v4.19.0-202507291138.p0.g3aeac35.assembly.stream.el9", + "nevr": "ose-gcp-pd-csi-driver-container-0:v4.19.0-202507291138.p0.g3aeac35.assembly.stream.el9", + "id": 3774038, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:9fd3b4ec29533176df10f03659803d5a35ec0bf9f7252b020fe6465f70275be7.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4baa74da499a8f43019b4c42b186edc1be9d7803ae04ed98053eb71c929dab07.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ef5bcf8a714db9191d4a20e40a8467346f4f829a0e6a2bc3723d599b9c2d6f29.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-azure-cluster-api-controllers-container-v4.19.0-202507291138.p0.g2e2909c.assembly.stream.el9": { + "nvr": "ose-azure-cluster-api-controllers-container-v4.19.0-202507291138.p0.g2e2909c.assembly.stream.el9", + "nevr": "ose-azure-cluster-api-controllers-container-0:v4.19.0-202507291138.p0.g2e2909c.assembly.stream.el9", + "id": 3774005, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:d7a8c8d0c93b15c4323b2fecfb93c763ac12ba0055bbac48dbd764f6ea971db9.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ffed5e0124d6162152a24244c6a67da24c8aaaf32c84b5341f9683ff0a1e154d.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "aws-karpenter-provider-aws-container-v4.19.0-202507291138.p0.g68ae0c2.assembly.stream.el9": { + "nvr": "aws-karpenter-provider-aws-container-v4.19.0-202507291138.p0.g68ae0c2.assembly.stream.el9", + "nevr": "aws-karpenter-provider-aws-container-0:v4.19.0-202507291138.p0.g68ae0c2.assembly.stream.el9", + "id": 3774002, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:a656265b6536ac41a0ce53b88cc0d434526cd8e0904fec6a88a8d645ac8a4181.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ffb0e01c83b9a4bf6c7a038a2483bd05b1bfd7619a3bee4e277d368cf23c32f1.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:0effde2308b3c40eab128e2f46c56afc20fe06a7b57c4f9339cd2d501c61feda.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:7db6302de78ced9ec364b68ad00404b2432211382cd229b5754e143aefb30a06.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-agent-installer-node-agent-container-v4.19.0-202507291138.p0.g1753a85.assembly.stream.el9": { + "nvr": "ose-agent-installer-node-agent-container-v4.19.0-202507291138.p0.g1753a85.assembly.stream.el9", + "nevr": "ose-agent-installer-node-agent-container-0:v4.19.0-202507291138.p0.g1753a85.assembly.stream.el9", + "id": 3773877, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:10d64603ccb96c438936d6097824bbdae70047d95871437fa1bcf1aef41bf3fc.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2a9142d0c64ed10a87cb4dd62265b68ec74e6d707be1d170569a3cc5da811312.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:7b47b3e3a40646865bf7cd3b60a5cf476a5cc63348430f5cf588177f9791d2ce.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b390a02248c10f4279b2df3805f72c725392d9ad8a67a46fade260c79753d9ee.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "oauth-server-container-v4.19.0-202507291138.p0.g14780f7.assembly.stream.el9": { + "nvr": "oauth-server-container-v4.19.0-202507291138.p0.g14780f7.assembly.stream.el9", + "nevr": "oauth-server-container-0:v4.19.0-202507291138.p0.g14780f7.assembly.stream.el9", + "id": 3773879, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:e06348c4bb833bc389c6cf1cd07c46cb6fc9ac71b909ea388fe9326bc9689472.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:10b88371a95a506901c8e8e6a257ccf649ac995505767f634a4683dad90ae84e.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6b5e984c1f3cc7e0e3f48b7d4a9757432f8bad24a4b734a4a88946947e63eecb.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8b039fd7d0b42848a1df504f5ad5a7ea1af0ca4b22230e68a711ddafd7aba791.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-azure-cloud-node-manager-container-v4.19.0-202507291138.p0.g7109d6b.assembly.stream.el9": { + "nvr": "ose-azure-cloud-node-manager-container-v4.19.0-202507291138.p0.g7109d6b.assembly.stream.el9", + "nevr": "ose-azure-cloud-node-manager-container-0:v4.19.0-202507291138.p0.g7109d6b.assembly.stream.el9", + "id": 3773998, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:e38de306fb199fa3904fc8cd12544a17cf55962b785ecc8b5d4dfaa423de1f25.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4f2851c7f9dcb7b56726deabdc86274377c48bcd00a6f4e009d2699dacf1f45a.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-libvirt-machine-controllers-container-v4.19.0-202507291138.p0.ga336f0b.assembly.stream.el9": { + "nvr": "ose-libvirt-machine-controllers-container-v4.19.0-202507291138.p0.ga336f0b.assembly.stream.el9", + "nevr": "ose-libvirt-machine-controllers-container-0:v4.19.0-202507291138.p0.ga336f0b.assembly.stream.el9", + "id": 3774027, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:7f2b78f148d5bfb85057c89cd2567941d7f8162154b0401005d1c8c38fb77d0e.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9756ed03f956b40e393d3357f16b0be87fbe53957179c0706cabbf5013753dbb.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:5a9f928c6d00db8e1083ea4febea1cf5a128ea7e413623b3b7ac557e986d2ade.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:53c346f251527614c7a22c2dfa1dead2beb2a1fa20ca92e0aad82d8fc9041060.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-machine-api-provider-aws-container-v4.19.0-202507291138.p0.g84fbc02.assembly.stream.el9": { + "nvr": "ose-machine-api-provider-aws-container-v4.19.0-202507291138.p0.g84fbc02.assembly.stream.el9", + "nevr": "ose-machine-api-provider-aws-container-0:v4.19.0-202507291138.p0.g84fbc02.assembly.stream.el9", + "id": 3773843, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:8f0c476e563e974c20b8f0475a32f66a5b4fe21a7c5c617de5f15a3d2b9a761e.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:7642816235fa08d8cd96b7a9fd4126f3df49f4817b38c11bf0eb8a3c29bef75a.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-kube-metrics-server-container-v4.19.0-202507291138.p0.g037a0e7.assembly.stream.el9": { + "nvr": "ose-kube-metrics-server-container-v4.19.0-202507291138.p0.g037a0e7.assembly.stream.el9", + "nevr": "ose-kube-metrics-server-container-0:v4.19.0-202507291138.p0.g037a0e7.assembly.stream.el9", + "id": 3774066, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:305180355f61a06ea9dabb8defe817cfb789cbbebe57935e29df629e1ba708f0.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:41a28498694a4a298890160009b19f282a8d29eaf35c74f457473f0eabf19d08.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e0e7dd058e93e5ea78598e1b45cc6780acd0cbc0b10ddf5eeddaa5362780e063.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fd3ee0725678375646c8304e84843165be6a9e8e2c82241008888231b0281d06.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-agent-installer-csr-approver-container-v4.19.0-202507291138.p0.g0de2920.assembly.stream.el9": { + "nvr": "ose-agent-installer-csr-approver-container-v4.19.0-202507291138.p0.g0de2920.assembly.stream.el9", + "nevr": "ose-agent-installer-csr-approver-container-0:v4.19.0-202507291138.p0.g0de2920.assembly.stream.el9", + "id": 3773916, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:2fa46524afefb40d42fb4dea3abd8c09de554f53df0688dbb4125070d4a2bb60.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:1350056a1de6c48c29b91a280fc08b358c0df7ac7c1f8582a696f2815007837e.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:28845a9951f141f52e518e2ea43fb2abf9a38038a59587dde27623034058150f.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8d4407adbd1fc2809ac48bfad02296e5c8513e81a78a166852c893cd7878100a.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-ingress-operator-container-v4.19.0-202507291138.p0.g137807b.assembly.stream.el9": { + "nvr": "ose-cluster-ingress-operator-container-v4.19.0-202507291138.p0.g137807b.assembly.stream.el9", + "nevr": "ose-cluster-ingress-operator-container-0:v4.19.0-202507291138.p0.g137807b.assembly.stream.el9", + "id": 3774024, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:2b77c6b1d3c1f53713b9bb7b2754b7ac591e21c35bac6a1905106127289ce25d.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:317efc794276a10667f2d218c6488a3247bf0f91603078990c286d6e541e2a16.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e2c327fd987985cd03c6f8995f81038c3619d150038fbcbf62ea18e7a11d4cac.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b7709de3dec1b3b348484106f9e76e2f4673fdc53b8d59c16f1fca531c005ae9.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "golang-github-prometheus-prometheus-container-v4.19.0-202507291138.p0.g7935bae.assembly.stream.el9": { + "nvr": "golang-github-prometheus-prometheus-container-v4.19.0-202507291138.p0.g7935bae.assembly.stream.el9", + "nevr": "golang-github-prometheus-prometheus-container-0:v4.19.0-202507291138.p0.g7935bae.assembly.stream.el9", + "id": 3773988, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:0fba7a3217e8a31c755f14173a55d56f437ff8c04c007c13c40bf071057a881b.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:19f85fbfdfb3e7011651047972ba8803439689a6b327630b182344513fbdf09b.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d9978bf61b0fa878cdfdfc6b8c164fdaefd2fc26000ffdf773ca2bc8ff141eea.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b23e9d5b1d954fe781d6d92ab3bbd274b855fbd1fb8c38ee6bc5baa7211b06b6.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "csi-livenessprobe-container-v4.19.0-202507291138.p0.gca51447.assembly.stream.el9": { + "nvr": "csi-livenessprobe-container-v4.19.0-202507291138.p0.gca51447.assembly.stream.el9", + "nevr": "csi-livenessprobe-container-0:v4.19.0-202507291138.p0.gca51447.assembly.stream.el9", + "id": 3773917, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:11e07c7fb12a9e2240a2aff606720f05a0cad0d1885c3567802ba9dddc57c0f8.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d6a83d17e4764b6bceb5df0c5426380d0b9a3cfe083f9643cf81496a605120d9.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e1786a1145ec900eb87e187719b65461ef8202439eb4bfdcbf4b16d76a973a0b.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:cb9520a46883f3abfdc8a2746f656fa5f0442cbe8c79d178c1d049f3570b953c.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-openstack-cinder-csi-driver-operator-container-v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9": { + "nvr": "ose-openstack-cinder-csi-driver-operator-container-v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9", + "nevr": "ose-openstack-cinder-csi-driver-operator-container-0:v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9", + "id": 3773922, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:d94b55e71f31416d5055606fef97d6ec707aff7b5b7228c518a15e3b4a72b284.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6cb7601767bc7cf0f5845179924cb1cf6d2c485cc6cf6f8c55a18e448eaab324.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d0ab50ee14665cb6603622e7732f734acdf6329a02aa0aacf4bb51da4b48068b.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8bc67f172e8f20aa7c9f33b1b6e83ea2dc280b2e9fc5a50baea10584af21bac1.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "azure-kms-encryption-provider-container-v4.19.0-202507291138.p0.g20a9ba5.assembly.stream.el9": { + "nvr": "azure-kms-encryption-provider-container-v4.19.0-202507291138.p0.g20a9ba5.assembly.stream.el9", + "nevr": "azure-kms-encryption-provider-container-0:v4.19.0-202507291138.p0.g20a9ba5.assembly.stream.el9", + "id": 3773980, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:b848aa1568d62a5a864a83d5bf385deaa0752f14abfdc459e610f42f5bf013fa.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:849d8429dd70b0d9a1c30c7fa2ae5441141e483c156decbe7bf25f165be9cfef.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9d34cf93710a6062c4afd6841da6aede6ca723b71b8eb00dc7e089b28305a668.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fdd457ea7946a90e83b279cbd7c595dc8ffdafa6a89ea603d645c1afa2af32e7.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-containernetworking-plugins-container-v4.19.0-202507291138.p0.gb09f487.assembly.stream.el9": { + "nvr": "ose-containernetworking-plugins-container-v4.19.0-202507291138.p0.gb09f487.assembly.stream.el9", + "nevr": "ose-containernetworking-plugins-container-0:v4.19.0-202507291138.p0.gb09f487.assembly.stream.el9", + "id": 3774008, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:a769a2674761cedd20cae5a47cc7a3e5e4082f0dcd9fa2f121eab1f2b4300cfe.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:317bdc44f305039d99c9d2e7f7e3c2299a5f547107b1c0d85842be5394f45a6a.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:31ce355373d1da657ba524d97a094c2c549a165342d966267ff67042ba2da514.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d21c3a296132f421ce41fe1fb0333b7f7e49ddfcacb78db23d9d556200d83cfa.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "kube-proxy-container-v4.19.0-202507291138.p0.g38c60a5.assembly.stream.el9": { + "nvr": "kube-proxy-container-v4.19.0-202507291138.p0.g38c60a5.assembly.stream.el9", + "nevr": "kube-proxy-container-0:v4.19.0-202507291138.p0.g38c60a5.assembly.stream.el9", + "id": 3773878, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:c5985b32d4a941800e8a8d4e1bf21168186f5bc4dbaf5f06f7ae600ab3506e9b.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:96d3490c2bb6883d2ba381769f6dccb90c4c453716d8d73bdc2316edcb31492d.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:0ab7a66f326f72f49b0068f65722bdf4f31273a49f988b9b6ee97e15320cd664.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:5cb2c4a08cd0fc976cd0274b45df90ed36608d7dcab2afc3de852bb757ae1fae.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-hypershift-container-v4.19.0-202507291138.p0.gd078767.assembly.stream.el9": { + "nvr": "ose-hypershift-container-v4.19.0-202507291138.p0.gd078767.assembly.stream.el9", + "nevr": "ose-hypershift-container-0:v4.19.0-202507291138.p0.gd078767.assembly.stream.el9", + "id": 3774034, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:c63494c60f09b011d497ffe29311de5ef4465f5158b307fe213a3f75fae2a964.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:63038a5138916abf8a94da12fff23f44b8b765ccb020743d3e8598dac36512b5.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8c9d678375b5a1a60a406c3355e753cbd920465eb91f8bfd0b623fae399b17ee.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:adf09e4c37ba9d4cd08cce1ae7ddbd140a13ed302a7749a8b12346b5bdf86f2b.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-kube-controller-manager-operator-container-v4.19.0-202507291138.p0.gcec410b.assembly.stream.el9": { + "nvr": "ose-cluster-kube-controller-manager-operator-container-v4.19.0-202507291138.p0.gcec410b.assembly.stream.el9", + "nevr": "ose-cluster-kube-controller-manager-operator-container-0:v4.19.0-202507291138.p0.gcec410b.assembly.stream.el9", + "id": 3774001, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:b5bf5ec5d535d9058ad125fc02a639ebc962b3049037b0ff54aaca23c1f4e419.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:76ac6ebac2ffb7e25aad1a8fc9b6dc6c3818cbc814a70ae239f5d02f70823037.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:0122ce89a8f0cc52816f644c8703c047d4269f1e2855c12ae3f04d3713cd203b.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a515ee1e2a6ce13caef134473d8bbcb9a94f57cae4681747bc02ad30ad07e24f.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-network-tools-container-v4.19.0-202507300242.p0.g81f7aeb.assembly.stream.el9": { + "nvr": "ose-network-tools-container-v4.19.0-202507300242.p0.g81f7aeb.assembly.stream.el9", + "nevr": "ose-network-tools-container-0:v4.19.0-202507300242.p0.g81f7aeb.assembly.stream.el9", + "id": 3775285, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:55e33a6436f19f1e61ff0478cb657fb8170b6cde8bb50495a416db2ad53c0174.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d15c717bda4a8c420163362c54098ba5c711f7f2f2a7ffcdd45e72479059db96.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:26b7c3db5f76c63752299111656706205cf8993ecb06262a6c46a473d6bebeb4.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8261dbd5c01bd50f6dd8921b09776f9962bd38a056fa4e7e7267332ce11d6a89.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-samples-operator-container-v4.19.0-202507291138.p0.g4cb2919.assembly.stream.el9": { + "nvr": "ose-cluster-samples-operator-container-v4.19.0-202507291138.p0.g4cb2919.assembly.stream.el9", + "nevr": "ose-cluster-samples-operator-container-0:v4.19.0-202507291138.p0.g4cb2919.assembly.stream.el9", + "id": 3773918, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:0e2fbae834031c4b0e3996814757f10b1acf1f0fd89712bba85d723efcfb5691.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:aaccfa3e14f2c73278e77ee62df81b47cc053b0bb78762ca22a57984ac7041dc.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:7571701604cf2ff3651f7b7a0b415efe81cbbe3bb17f8d564823a5de6e236a94.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:88767c617ca6c6a8bf084fea1d44d84fa86e1b4910e983e03d99c4a08bb901bd.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-multus-admission-controller-container-v4.19.0-202507291138.p0.g381c36b.assembly.stream.el9": { + "nvr": "ose-multus-admission-controller-container-v4.19.0-202507291138.p0.g381c36b.assembly.stream.el9", + "nevr": "ose-multus-admission-controller-container-0:v4.19.0-202507291138.p0.g381c36b.assembly.stream.el9", + "id": 3773941, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:cfdeb2893b698b2d121584837f5dd5f7e9b76706e57c2750cfd2679c6e188dfd.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:959f19e25635f2d2ae1d6a655804903be36e253e62ebf74469b246dd52baceed.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:1155c98363c0f810810cbaf8ca72bdcb18e8a59ec549a28337a5dc8342f438d3.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d0d15bbb4c059559eaeb3cef99d9a92e94f54cf28fd1f6e08fff9ab58d87191f.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-network-metrics-daemon-container-v4.19.0-202507291138.p0.g5ec8c6b.assembly.stream.el9": { + "nvr": "ose-network-metrics-daemon-container-v4.19.0-202507291138.p0.g5ec8c6b.assembly.stream.el9", + "nevr": "ose-network-metrics-daemon-container-0:v4.19.0-202507291138.p0.g5ec8c6b.assembly.stream.el9", + "id": 3773891, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:130d5f7dc7b5d408370bd1a34edde333e030a7d9427582bbe766c2823ef7e462.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c57cf1e44e49aed87a244c57306205f24c70d9230bd538b539c8127d1927b309.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ee4787b0fd85ee5c230bb2b31403989043566874c6c4e16cd29f9f1518931b71.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:25b38888c3d2deaa4ead5d77d2ccab07f7bcb542ab348e21d58388dfb657290f.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-network-interface-bond-cni-container-v4.19.0-202507291138.p0.g9788e75.assembly.stream.el9": { + "nvr": "ose-network-interface-bond-cni-container-v4.19.0-202507291138.p0.g9788e75.assembly.stream.el9", + "nevr": "ose-network-interface-bond-cni-container-0:v4.19.0-202507291138.p0.g9788e75.assembly.stream.el9", + "id": 3774014, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:dac096e851a8735780013f200dfec2ffe3b2c5b7a53751628d7854c67a441b8b.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f9874ce218df4a1f63d042ce6627c39080683d92a5a04eca2ee5cc084184cc8e.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9f0ee4f7444c2e0f6c4bae9bfc9a0a2287d69ad30ba0dcf42eb8577823979394.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:54db011ff6248f46548471f32a725724a66cfa2a51ebc630893bce09c8e13745.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "cluster-version-operator-container-v4.19.0-202507291138.p0.g06f6aa6.assembly.stream.el9": { + "nvr": "cluster-version-operator-container-v4.19.0-202507291138.p0.g06f6aa6.assembly.stream.el9", + "nevr": "cluster-version-operator-container-0:v4.19.0-202507291138.p0.g06f6aa6.assembly.stream.el9", + "id": 3773996, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:8bd6e75873ec8d3f65c5e4b6b5e2eea0cf24343c211e30e42cefca5dc8e1c74f.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4a37f765c9f8927be3a60c66fbd116978efad343834f8110e983b18ac9553617.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:30b879cb8bf7ac553de98f4e10efe83d985147c2524b954ed6a48164f286cc6f.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c6f796af32d0d332ee972c1aef09a1a7b9cde941fbed8b3ac07d78af0aaf62b9.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-gcp-cluster-api-controllers-container-v4.19.0-202507291138.p0.gc8b865a.assembly.stream.el9": { + "nvr": "ose-gcp-cluster-api-controllers-container-v4.19.0-202507291138.p0.gc8b865a.assembly.stream.el9", + "nevr": "ose-gcp-cluster-api-controllers-container-0:v4.19.0-202507291138.p0.gc8b865a.assembly.stream.el9", + "id": 3774052, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:bd51b664599d7ea098d0569e17fef7638c282bbd5e29e9a96ad39fde2df5ce9f.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9c471d14e7099feebd13b9eb5a26c43bcce4f296193965293f3360a8f280f609.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:0ccdf2feed5f5403cf5fd890b243f99009e9f30daee870cbd283043a3a0598e6.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-nutanix-cloud-controller-manager-container-v4.19.0-202507291138.p0.gdb1f264.assembly.stream.el9": { + "nvr": "ose-nutanix-cloud-controller-manager-container-v4.19.0-202507291138.p0.gdb1f264.assembly.stream.el9", + "nevr": "ose-nutanix-cloud-controller-manager-container-0:v4.19.0-202507291138.p0.gdb1f264.assembly.stream.el9", + "id": 3774039, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:62ac83cf608b2ac84c79a1ce6dde079e30829c5ae3c7e8db843666ad45fbf10c.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-storage-operator-container-v4.19.0-202507291138.p0.gc09f715.assembly.stream.el9": { + "nvr": "ose-cluster-storage-operator-container-v4.19.0-202507291138.p0.gc09f715.assembly.stream.el9", + "nevr": "ose-cluster-storage-operator-container-0:v4.19.0-202507291138.p0.gc09f715.assembly.stream.el9", + "id": 3774045, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:c5e8a1b6163308dfde5870d8e692a7d9f9f358c54c5328c9ba290e817323c015.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c62e72d82706c998ce661773a6b315394c4afe2ee4c2d5243f447768caf0dfa3.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:cac811fe75e2903c772167c53968e88ce9f98d510bb650babc704a188fc61494.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:3db29a0bcdf7910089524b6d918978c4969ddb43686912387c2b004a6c8daa57.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-csi-snapshot-controller-container-v4.19.0-202507291138.p0.gac82caf.assembly.stream.el9": { + "nvr": "ose-csi-snapshot-controller-container-v4.19.0-202507291138.p0.gac82caf.assembly.stream.el9", + "nevr": "ose-csi-snapshot-controller-container-0:v4.19.0-202507291138.p0.gac82caf.assembly.stream.el9", + "id": 3774053, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:29af74ff46b583af456939a6a56708ace04dffad83fe69eb328769b9b1da9212.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d4191bd552cb425997e9e7e14c4aec96abc600ea369df525a5e0d9c11c443e8a.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c33c62a91292b901d8f2812732833082c657ee275e5acf91707274d384dc6840.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:485c63f6a0fe6ccd77bb82b28cbf3f588c2d5e6372ba4a9eaf54414b991725b2.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openshift-enterprise-hyperkube-container-v4.19.0-202507291138.p0.g38c60a5.assembly.stream.el9": { + "nvr": "openshift-enterprise-hyperkube-container-v4.19.0-202507291138.p0.g38c60a5.assembly.stream.el9", + "nevr": "openshift-enterprise-hyperkube-container-0:v4.19.0-202507291138.p0.g38c60a5.assembly.stream.el9", + "id": 3774048, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:c5e452754200eab1196ac4ed20a146b97ddcf05001d75455d4ff3bd5d3508593.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:57a58dbaeb2bd99fb36d275b89a77d54939b2078ae24344c217319f309319685.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:cbd0b4b29cf6c9ac55f57a66dba10a31e1c03b1ccd1ff134f9b4710347750655.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:68348fd95a9ed97d46726e79b2c3443be29de70ea9d58896f7b58a97d996c37f.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-azure-disk-csi-driver-operator-container-v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9": { + "nvr": "ose-azure-disk-csi-driver-operator-container-v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9", + "nevr": "ose-azure-disk-csi-driver-operator-container-0:v4.19.0-202507291138.p0.gb61e357.assembly.stream.el9", + "id": 3774023, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:e2cb0669e1edb334656a1bc3c3cfb4553b18743fb3baa2ecfd91b0a56ebae703.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6d7ebad53b33c75b2696f030d76a4e57c8c830ba9c1870d7b0cb670de9dc27aa.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "golang-github-prometheus-alertmanager-container-v4.19.0-202507291138.p0.ga2346ca.assembly.stream.el9": { + "nvr": "golang-github-prometheus-alertmanager-container-v4.19.0-202507291138.p0.ga2346ca.assembly.stream.el9", + "nevr": "golang-github-prometheus-alertmanager-container-0:v4.19.0-202507291138.p0.ga2346ca.assembly.stream.el9", + "id": 3773915, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:42e4127e01432db37084eecdb506f784088a879b4443f023e3ac0a901dc47eb0.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:bd5e9f5906ab4e39f0b77c50ba82d87f8044241f7bca7720bb70856dc0f497cc.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b06726e2d2a5127dc8aa5942bb3388d471ba183b83f04875a0992d8ecee43e6a.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:5722344a44050dadafbecd31f14e7bd400fa32bbbd37a7831a92ecdb1e4ec2fe.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cli-artifacts-container-v4.19.0-202507291138.p0.g298429b.assembly.stream.el9": { + "nvr": "ose-cli-artifacts-container-v4.19.0-202507291138.p0.g298429b.assembly.stream.el9", + "nevr": "ose-cli-artifacts-container-0:v4.19.0-202507291138.p0.g298429b.assembly.stream.el9", + "id": 3774094, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:6946335dbb0aa24946c692b5b393c5c33b8e2a6e3f28024adcf4b7fcd7044a59.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:5b90de844bb24221afba070592c36e7d51725ef551572b533be6a31d87d5c06b.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f4cf2c890fbcef3e34030dd6f7b6bc6b8c0987b0d60ec27b6c160c67fa0b513c.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:5b8977017d5a92f218edc036c6674ed623513bac2b0627aaee57c7673a3d1c49.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openshift-state-metrics-container-v4.19.0-202507291138.p0.gc604f81.assembly.stream.el9": { + "nvr": "openshift-state-metrics-container-v4.19.0-202507291138.p0.gc604f81.assembly.stream.el9", + "nevr": "openshift-state-metrics-container-0:v4.19.0-202507291138.p0.gc604f81.assembly.stream.el9", + "id": 3773954, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:7b6dcf3a6a28ed227a9ddf1efe85e6d572e31e9d8a803934f1e4cdff312218ea.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:39dc4b0ee57654af639e60f9667eb1a686b1429afffe6ab50b344b869bf5ff11.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:410c92730af6abb0f965b4410e71c82abf5421506e0bfaac5ee9faddd4f12ee1.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:5bd05a520468f5acc83a3e40e1c6057758fbe6048ed5238876935116bc7533a2.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-insights-runtime-extractor-container-v4.19.0-202507291138.p0.g0bee2d9.assembly.stream.el9": { + "nvr": "ose-insights-runtime-extractor-container-v4.19.0-202507291138.p0.g0bee2d9.assembly.stream.el9", + "nevr": "ose-insights-runtime-extractor-container-0:v4.19.0-202507291138.p0.g0bee2d9.assembly.stream.el9", + "id": 3773868, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:743842a25dd5d3700fd34c09751bb7e4df72f221bd732431ea00fc8b58688a17.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6f2b31492b4c93c07b8e36b3e531148d4d46ee05d3b582540d022bda779cf2f6.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:174ac864397c77a310b19eabb47ce72a924c31de7839ec45ffb990ac968bda43.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a6be357713f8a3c6b0096502bb172502d99ea44a40bab04b98357e251f7db513.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "multus-cni-container-microshift-container-v4.19.0-202507291138.p0.gcf0f68e.assembly.stream.el9": { + "nvr": "multus-cni-container-microshift-container-v4.19.0-202507291138.p0.gcf0f68e.assembly.stream.el9", + "nevr": "multus-cni-container-microshift-container-0:v4.19.0-202507291138.p0.gcf0f68e.assembly.stream.el9", + "id": 3773970, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:3b62a67e0d3785429c91f9f0c3b44700c376311beb1868437c49395c1e4ea7a5.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9f529a87060717a85a995ffb08bf876bbb893fbdf9a316856518c4b6170c2f49.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a5480e4875c02842ddf3f5d89eb7b9132c447cf1c081ee8e660a30355d02b73f.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:70b88726aa53bb4e723709d678009d0d2e2838e2810595625c1d7dd0c1dc56bd.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cloud-network-config-controller-container-v4.19.0-202507292137.p0.g98ae311.assembly.stream.el9": { + "nvr": "ose-cloud-network-config-controller-container-v4.19.0-202507292137.p0.g98ae311.assembly.stream.el9", + "nevr": "ose-cloud-network-config-controller-container-0:v4.19.0-202507292137.p0.g98ae311.assembly.stream.el9", + "id": 3774478, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:f9b99f630dcde40cab40d049ebe42e600198aec143eee3abf7294f6673e7a4e2.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6e91d288bd261e5fe2ba5e5107f506f9dcbcecbc7dd2947c56a0da52b08775ab.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:72a8e9578604277c26b92bdb89639731328fc8977876eac41eb36788284a72cc.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2be89c4da818d6d1507d425c4177281e25db6668546071e42419467d358310f7.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-policy-controller-container-v4.19.0-202507291138.p0.g7485247.assembly.stream.el9": { + "nvr": "ose-cluster-policy-controller-container-v4.19.0-202507291138.p0.g7485247.assembly.stream.el9", + "nevr": "ose-cluster-policy-controller-container-0:v4.19.0-202507291138.p0.g7485247.assembly.stream.el9", + "id": 3773997, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:71bbf68c1349a4ab7a3fbd9fd474400322ace9e4ea8023d66e4803ae9caca991.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6239afbe53bac2bcbb0b1281d09c7dda57556e2dd94ed175001f2247583b5eab.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:53b0e40c91076491e1145a5f40b1f777c90e7c7e070d39751f8bf17fd448bc60.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:daca78d1155aef5fd6f0d6bdc2b184108b2d0f462b21b3db5ce9b714fcd5822b.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "networking-console-plugin-container-v4.19.0-202507291138.p0.ga5c90cb.assembly.stream.el9": { + "nvr": "networking-console-plugin-container-v4.19.0-202507291138.p0.ga5c90cb.assembly.stream.el9", + "nevr": "networking-console-plugin-container-0:v4.19.0-202507291138.p0.ga5c90cb.assembly.stream.el9", + "id": 3773934, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:5762dc858558e0d71871f79c1cf55f3c144142a66f498f83e50610fc9fd23087.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:1da04451bf235c8760bf06ca78ebedebf09be7abd6af43c034c2f7587fba7a36.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:10197945cc15d572bfed64b28ec4e44fd69d330db92138c4cc75817ba91ab7cf.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e1c2af6c4a14e9bafbb4b846fe964f17d8663343097474a3b6e7da9aa93e3ae4.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ironic-container-v4.19.0-202507291138.p0.gfe31e71.assembly.stream.el9": { + "nvr": "ironic-container-v4.19.0-202507291138.p0.gfe31e71.assembly.stream.el9", + "nevr": "ironic-container-0:v4.19.0-202507291138.p0.gfe31e71.assembly.stream.el9", + "id": 3774020, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:27bea737b3561376995c72488a14d9a452d1a5ac876265ee1ef09362dfe4c747.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:adbe55523e52ee2275ad7d4f5e33866749a4a60ac544aee029f0c52c49747b3e.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-kube-storage-version-migrator-operator-container-v4.19.0-202507291138.p0.g4e51404.assembly.stream.el9": { + "nvr": "ose-cluster-kube-storage-version-migrator-operator-container-v4.19.0-202507291138.p0.g4e51404.assembly.stream.el9", + "nevr": "ose-cluster-kube-storage-version-migrator-operator-container-0:v4.19.0-202507291138.p0.g4e51404.assembly.stream.el9", + "id": 3773974, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:c50641790715453a3cc2ed1c2c8043b05ed251ee92d63f0d170612e21bd937c7.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:728b90d4ae2719b98e9d424feba932e3f15be7a80f066f14d1e039d485e197e0.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:decb5232b3fb83165ec7eafe326690f1a6bda6d8e6669312e4a1c6c5d07f19d9.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ce3b6217596fa2b7513b15c77f6c3aab71fc5e222ad97a5b173d1bb557725d22.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-authentication-operator-container-v4.19.0-202507291138.p0.gceeb021.assembly.stream.el9": { + "nvr": "ose-cluster-authentication-operator-container-v4.19.0-202507291138.p0.gceeb021.assembly.stream.el9", + "nevr": "ose-cluster-authentication-operator-container-0:v4.19.0-202507291138.p0.gceeb021.assembly.stream.el9", + "id": 3773861, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:c7126995a9db3f6a4b1196a7645f990c66edec1e899c57a280eb647abb301371.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b42795f9d2f4eb976096765b3dfea9e9991b0a0f916b03ff7fa340538cb2b006.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fdf631ff97d6adaed4921ac444bfeb1201895f34bf39cd6917e8f50dee06e5e2.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:bd2a58282d14440b895a4e60237c5d12eaaa2ec2ea6879e54b99f821faafd19f.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "prometheus-config-reloader-container-v4.19.0-202507291138.p0.gb8debb4.assembly.stream.el9": { + "nvr": "prometheus-config-reloader-container-v4.19.0-202507291138.p0.gb8debb4.assembly.stream.el9", + "nevr": "prometheus-config-reloader-container-0:v4.19.0-202507291138.p0.gb8debb4.assembly.stream.el9", + "id": 3773956, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:e168fae795f44c64e2ad47b43b3e8cb17ce88622f1b986f61a4015b2df03b631.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c4578ba31f17c01fce48d394c81795fea04c8fa1b909735be59482c9448c4b83.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:1cfa958425c3f7e568ae01c99d2c395a8b6487249606a1e417b8ff54d48cdf31.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6b46ae7bd8462f135910eefb44b2dbab72a0a195ff5e28f59ec8db61a29dbac6.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openshift-enterprise-pod-container-v4.19.0-202507291138.p0.g38c60a5.assembly.stream.el9": { + "nvr": "openshift-enterprise-pod-container-v4.19.0-202507291138.p0.g38c60a5.assembly.stream.el9", + "nevr": "openshift-enterprise-pod-container-0:v4.19.0-202507291138.p0.g38c60a5.assembly.stream.el9", + "id": 3774000, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:d9df0eb3e6f71beb4029fd74b487dc200607b94ec23a71d410cbc869423d4dbb.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:20801a77b7fe17b0b43d060f755e61b7b817339a4e808dcae069fe2099e6bfbe.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:628797a5ed08e0579b955018aa9f22115ff8413eb706998b096f586fd9229ea1.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8f5580ff556d80fefa830b7b24c487a4e14723254d07a7c05d42e4d2e1e64462.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-kube-apiserver-operator-container-v4.19.0-202507291138.p0.gcd86a67.assembly.stream.el9": { + "nvr": "ose-cluster-kube-apiserver-operator-container-v4.19.0-202507291138.p0.gcd86a67.assembly.stream.el9", + "nevr": "ose-cluster-kube-apiserver-operator-container-0:v4.19.0-202507291138.p0.gcd86a67.assembly.stream.el9", + "id": 3773860, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:ed09d73a925c8a9cccafdf5a0df11b1f5f118fb66ce13762136737234fd45a60.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:30a30b73017a9a325bc7407c4ac1baf6043934fc83f4e41b629805125839f15c.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e7a2b45bcb468b1b8973442e7b3f49fdbcf7c4c24fe914f844187ee82c9047fe.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9bbf393c4bc95920b77177dd6baafdbceba775bc0447899ad6c6c352e35103ba.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-installer-container-v4.19.0-202507292137.p0.g249d742.assembly.stream.el9": { + "nvr": "ose-installer-container-v4.19.0-202507292137.p0.g249d742.assembly.stream.el9", + "nevr": "ose-installer-container-0:v4.19.0-202507292137.p0.g249d742.assembly.stream.el9", + "id": 3774591, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:cfa17f3173cd5786c945818b1e57c77fc7f5588cce2070d4d18c5bd5d67b34ff.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c8860804a45cba9ae2ac822a013d7fc528d269ddb9b8d4ad11f850a946f54867.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b86883bb7de846aed540048140074cbcafc54020c2b8caff4de67c4b152c430a.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:836ab359b4b92a35d863405e84d92a98b1bbf4f0b43352f8d2633d092c75e056.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "monitoring-plugin-container-v4.19.0-202507300242.p0.g569dc72.assembly.stream.el9": { + "nvr": "monitoring-plugin-container-v4.19.0-202507300242.p0.g569dc72.assembly.stream.el9", + "nevr": "monitoring-plugin-container-0:v4.19.0-202507300242.p0.g569dc72.assembly.stream.el9", + "id": 3774905, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:8452ef27081e42c7357ffc122b6ceb1d863d7c4d68ff175f4101b27b23fb13ef.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c26a5838f6f6ac36b9440edf672fce2368bdc1dfd6f9dcb0460ff764a9cb83e5.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:216a20fd4507af15f21a0e0771e8827e15f250f13ba7d16129eb6a1063b819aa.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ff459bac86679a6586bacf8b0c8687fc2734e902c0664f86c4f54e13c1778d3d.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openstack-resource-controller-container-v4.19.0-202507291138.p0.gd00bab2.assembly.stream.el9": { + "nvr": "openstack-resource-controller-container-v4.19.0-202507291138.p0.gd00bab2.assembly.stream.el9", + "nevr": "openstack-resource-controller-container-0:v4.19.0-202507291138.p0.gd00bab2.assembly.stream.el9", + "id": 3773966, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:a976acb0d5a57f0987a2cf14f7090870eac712b8f9af4c93c4b00225ecaa7b07.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f631f2d67d53c67935965492e91094d09ea3c7d3787bc44ebc66ee7f2b63a9b1.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:faad311e787755f820489472094a89e08392ea06ec3d7d325483ec556ec09350.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:1d2682aec9284874d19156aecaec016322e119f7318bfa66eb138558d1effb13.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "cluster-network-operator-container-v4.19.0-202507291138.p0.gfd80a4a.assembly.stream.el9": { + "nvr": "cluster-network-operator-container-v4.19.0-202507291138.p0.gfd80a4a.assembly.stream.el9", + "nevr": "cluster-network-operator-container-0:v4.19.0-202507291138.p0.gfd80a4a.assembly.stream.el9", + "id": 3773972, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:e15d9798d10b8967c99881583821b1f714426f79e8fb2e0e8d369c63ac5e468b.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:001be07819668ea2b8c8f846ffa53602f1fbe1f7e18528dc769e7f9c91ffb072.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:620894195748cc9d1262a2043416c070313b1b671ceb7ad94f8a7faa8af44ba3.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:88b0f23aa1f5e16f1195e2727a85b2ed57e82368ad8257800218cd30fe84ecf6.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "aws-kms-encryption-provider-container-v4.19.0-202507291138.p0.g088dcaf.assembly.stream.el9": { + "nvr": "aws-kms-encryption-provider-container-v4.19.0-202507291138.p0.g088dcaf.assembly.stream.el9", + "nevr": "aws-kms-encryption-provider-container-0:v4.19.0-202507291138.p0.g088dcaf.assembly.stream.el9", + "id": 3773898, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:c7a2e0b607bb9aef85eb53b6033ea3d228667415979283444fdaf60b258004eb.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fa4094521faddde68ffbdc09afd0f9fa6f0e03253e1acf47e1c35da855ccf1cd.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f7ea3d1e3cfc51d3e231240561b2d3477b8fe08a1ed28924559b64af66ea39de.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a26795990fdde41e5024f1f196664507e25bc58aa19d47ee22c8cad0dc879f54.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-baremetal-operator-container-v4.19.0-202507291138.p0.gf4e49d5.assembly.stream.el9": { + "nvr": "ose-baremetal-operator-container-v4.19.0-202507291138.p0.gf4e49d5.assembly.stream.el9", + "nevr": "ose-baremetal-operator-container-0:v4.19.0-202507291138.p0.gf4e49d5.assembly.stream.el9", + "id": 3773875, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:3190c4fef7c8977a9104df65d8883af14d1964f8162aa3202ad35502ecd07623.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b189db30246ee3e8db292341fcb2c1301084639afc463624e4d4aeed15b75982.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:687a00038a92efd6eb594910d9a25924f3df00cb3922ae7577714d31723221da.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:3948c6cd8329aac0444049c0b0b53aa91cb8e6c398479f6584655b58fba482a7.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-update-keys-container-v4.19.0-202507291138.p0.gc1c56b4.assembly.stream.el9": { + "nvr": "ose-cluster-update-keys-container-v4.19.0-202507291138.p0.gc1c56b4.assembly.stream.el9", + "nevr": "ose-cluster-update-keys-container-0:v4.19.0-202507291138.p0.gc1c56b4.assembly.stream.el9", + "id": 3773987, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:c2c4f9dd6e59b83f740da4c42c88142ccd92745ca9b722c74b859c4b6dbd8574.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:53121b3fabf7f63a6890a4a63c235bc87f5068caf39a94fe05395e11c068aa26.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6917df6808f6b99ee2ba406f73783e879c06d12bbd1d7cc2e7002a0c9a6e3e0a.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:795e8af1e937501363eb1b56e212106f738a5c4ebf619df3ed19a6dce7bb6a9f.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-ovirt-csi-driver-container-v4.19.0-202507291138.p0.g1db726a.assembly.stream.el9": { + "nvr": "ose-ovirt-csi-driver-container-v4.19.0-202507291138.p0.g1db726a.assembly.stream.el9", + "nevr": "ose-ovirt-csi-driver-container-0:v4.19.0-202507291138.p0.g1db726a.assembly.stream.el9", + "id": 3773852, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:1db62dcb11dfe00aaddbbcb7d1d4eaec69fcd29a7f29b7f7fd5317547ca5776b.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:aee100b8c7068110ac4b7b1add522bf7cc34233ff5d2672cac7305e4c20ea77a.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:885e736e1f2ada026716e85e6df8e2a410bd2ad0def3c2d9f4afe73b6483d175.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a0ea78a2dfb80ab0e12dd5c3e9d957e93a7c900ff4fec15580a7d3f18a506a59.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-baremetal-installer-container-v4.19.0-202507291138.p0.g249d742.assembly.stream.el9": { + "nvr": "ose-baremetal-installer-container-v4.19.0-202507291138.p0.g249d742.assembly.stream.el9", + "nevr": "ose-baremetal-installer-container-0:v4.19.0-202507291138.p0.g249d742.assembly.stream.el9", + "id": 3774154, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:01116dd088006794f6310d7d694f0aaf9e18eae52434421f04a4b074f6f610b0.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:dff53234593634f9cb367f220069473812cfd74a41143115cd60ccf112bc5f2d.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fdeb8a4d3594e36bec11d973c74b0e1218a9c82974f9f7a77883ed3683a4187a.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:091ebdf92a5cb7219de779268e3fde0f191e01681cf1623b87dad6b167ba4808.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-machine-api-provider-openstack-container-v4.19.0-202507291138.p0.g848bf65.assembly.stream.el9": { + "nvr": "ose-machine-api-provider-openstack-container-v4.19.0-202507291138.p0.g848bf65.assembly.stream.el9", + "nevr": "ose-machine-api-provider-openstack-container-0:v4.19.0-202507291138.p0.g848bf65.assembly.stream.el9", + "id": 3773935, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:ed88406cbb60849236b52def534c919680b51353391aea3801091fb5b2db41cb.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b02ebad7ca19a921552ce54bcc36ae91653ac2160b888d89b6f579832783f62c.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ba3cab05fee623876d5c6c570486f88ddb3578ed493d2ee862f856712a704c97.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e579d1b26b25e285ea7638e7a56b336b83aba4af61da6afd11dcc9394f4f1a0d.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "atomic-openshift-cluster-autoscaler-container-v4.19.0-202507291138.p0.gf746d44.assembly.stream.el9": { + "nvr": "atomic-openshift-cluster-autoscaler-container-v4.19.0-202507291138.p0.gf746d44.assembly.stream.el9", + "nevr": "atomic-openshift-cluster-autoscaler-container-0:v4.19.0-202507291138.p0.gf746d44.assembly.stream.el9", + "id": 3773939, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:2c43e773198625e7b321d7a886a89f9991ea6a630fa9b0501736333b33be4255.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8268a0c26545f67d64b2df999e42087638c970873b7c0c15f25ce3b47f39ffaa.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b3a9e58b22e2f7dbc591164d0c16f746e94fe8e0fb8de4aedc704a814244ca73.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f37cd2d861972096d57dde98ee2521511a9695eae1b56a34daf7df262093eb49.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "oc-mirror-plugin-container-v4.19.0-202507292137.p0.gaa8c685.assembly.stream.el9": { + "nvr": "oc-mirror-plugin-container-v4.19.0-202507292137.p0.gaa8c685.assembly.stream.el9", + "nevr": "oc-mirror-plugin-container-0:v4.19.0-202507292137.p0.gaa8c685.assembly.stream.el9", + "id": 3774476, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:e1e1eaaba061c39671f28be841a5c132e6006c5e086eaf6bcead9693448033f0.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:81dfe84a11896bed79658175361f9daf52736aa92cca6d8aaaa827e1b00ddc7d.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:11db00ec8f21dd6f97103ca34ef31ace1c2fb2697dfbb14b5e2b65fb3abb59db.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b9fb61fad7ae256054b18884657c306cf4033cb1a18dc021614bd287953d3c34.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-config-api-container-v4.19.0-202507292137.p0.g9781237.assembly.stream.el9": { + "nvr": "ose-cluster-config-api-container-v4.19.0-202507292137.p0.g9781237.assembly.stream.el9", + "nevr": "ose-cluster-config-api-container-0:v4.19.0-202507292137.p0.g9781237.assembly.stream.el9", + "id": 3774482, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:6ea77b914ccc19e5b17de11d599ec61060415a260e96ca32ea7125387c048f94.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8a057ab163428eeb9e7c315b560e0448dbdbcf69ab17fc568a828032d6784017.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:cd55d4f2016b5f3cecf9c0b01e0d6735a65194b1a71d69780e1668cc34dbc2b4.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:1ec5101221ca396f69a785251126a4b5e69eb1472a2216211d834f468e068f08.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-multus-whereabouts-ipam-cni-container-v4.19.0-202507291138.p0.g45624b6.assembly.stream.el9": { + "nvr": "ose-multus-whereabouts-ipam-cni-container-v4.19.0-202507291138.p0.g45624b6.assembly.stream.el9", + "nevr": "ose-multus-whereabouts-ipam-cni-container-0:v4.19.0-202507291138.p0.g45624b6.assembly.stream.el9", + "id": 3773837, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:2bdb99263d66bddb78f19a4a4c44df37f8f89dea6ed23433f83f8fc797dc312d.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:0d1af5b7fc6d8bae8afad3e87e879d4f1f0b18f1a05a03e43ba558d76e254f49.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:89caa4c041e9126901e1144a1076dda548ec79a34fdd139525e3713f63f639d0.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:45d9bf90e023d99afd64ac622bb36621895f17a5575a2ced7e6e446ad0d69549.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-ibmcloud-cluster-api-controllers-container-v4.19.0-202507291138.p0.g877ef8c.assembly.stream.el9": { + "nvr": "ose-ibmcloud-cluster-api-controllers-container-v4.19.0-202507291138.p0.g877ef8c.assembly.stream.el9", + "nevr": "ose-ibmcloud-cluster-api-controllers-container-0:v4.19.0-202507291138.p0.g877ef8c.assembly.stream.el9", + "id": 3773884, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:a59138ba157b522c5bd3339540bb5efecd7d9cac29e8e8a137b133ca6979ec30.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:45ec4c5fee42feeabefdbf7995498f24bdb5c98c7690d08e486b2a147e17270c.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b2934e9d21a01a7407b039870792e7a811664b145dd165da28cdfc077c60eeb1.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-egress-router-cni-container-v4.19.0-202507300242.p0.g85353bb.assembly.stream.el9": { + "nvr": "ose-egress-router-cni-container-v4.19.0-202507300242.p0.g85353bb.assembly.stream.el9", + "nevr": "ose-egress-router-cni-container-0:v4.19.0-202507300242.p0.g85353bb.assembly.stream.el9", + "id": 3774906, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:fee4c1b9973c57d7ade848bf2a4135c885d7811e65dbc9058c4deb7fc0654332.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:1cc9359beb5e42afc36938f84df44523dfbb307621f7f4a918e3f30ed4dd44cb.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:178bbfa92f7e73e4b1feff958909fc61dab11bbb56e0206a23c6965458ef0be2.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a7e686d845855e5af1ce86353d19b7414296cb2b4f041909963b664556c18995.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-azure-cloud-controller-manager-container-v4.19.0-202507291138.p0.g7109d6b.assembly.stream.el9": { + "nvr": "ose-azure-cloud-controller-manager-container-v4.19.0-202507291138.p0.g7109d6b.assembly.stream.el9", + "nevr": "ose-azure-cloud-controller-manager-container-0:v4.19.0-202507291138.p0.g7109d6b.assembly.stream.el9", + "id": 3773863, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:67d78a800ee95652716fbcb54ed7dcd5aa7b5d6a9290d197ec03940c6d9ae274.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e562d5919ac565422b8e7181e3386f343dc9ff58e0d3fe409f3e893580aac055.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-ibmcloud-machine-controllers-container-v4.19.0-202507291138.p0.g989bd87.assembly.stream.el9": { + "nvr": "ose-ibmcloud-machine-controllers-container-v4.19.0-202507291138.p0.g989bd87.assembly.stream.el9", + "nevr": "ose-ibmcloud-machine-controllers-container-0:v4.19.0-202507291138.p0.g989bd87.assembly.stream.el9", + "id": 3773888, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:e924103eac4caffabf4b170f343e18a5fdd2624a7f6f638a792ac985d6435dc1.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:71a28c7bff087e6bb84deeaebfd86a385d1208ecfa07616947ff795fdfaf5754.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-openshift-controller-manager-operator-container-v4.19.0-202507291138.p0.g0ab3099.assembly.stream.el9": { + "nvr": "ose-cluster-openshift-controller-manager-operator-container-v4.19.0-202507291138.p0.g0ab3099.assembly.stream.el9", + "nevr": "ose-cluster-openshift-controller-manager-operator-container-0:v4.19.0-202507291138.p0.g0ab3099.assembly.stream.el9", + "id": 3773859, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:36f6b3c3041a9052d6e5e5236a24161852af9e6cf6317ca620290f9a6d71bdb3.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f39c796b6c6778c0151251a3162d33a24c214d34a690b03da28c925b81c84ec6.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:870d1d72d125959c44a92338c24f8324b0b68cbbf004ccb390bfbd836eccb3e3.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b003d475be9b0152e8353fdd63b570b85116a62641e41b471551171f0a195b1d.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cloud-credential-operator-container-v4.19.0-202507292137.p0.ga5d6267.assembly.stream.el9": { + "nvr": "ose-cloud-credential-operator-container-v4.19.0-202507292137.p0.ga5d6267.assembly.stream.el9", + "nevr": "ose-cloud-credential-operator-container-0:v4.19.0-202507292137.p0.ga5d6267.assembly.stream.el9", + "id": 3774473, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:83be08b3013044167f5283561a5316ad028ed348b81424306025d3cd1a0b51dd.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a8506c88b88d341b072dd09fde5d118c7e0b627d0962c0bffcacd52ca93a8f81.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:1e92c74b647a020eeb83372600586c1933d8d5246e7936e73f914bdc3c895ccb.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2642ff87b2fa782fdc51de7d2c03e2f0c0e07f03db4d4bef47af0d35a82c239b.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openshift-enterprise-keepalived-ipfailover-container-v4.19.0-202507291138.p0.gb42e7cf.assembly.stream.el9": { + "nvr": "openshift-enterprise-keepalived-ipfailover-container-v4.19.0-202507291138.p0.gb42e7cf.assembly.stream.el9", + "nevr": "openshift-enterprise-keepalived-ipfailover-container-0:v4.19.0-202507291138.p0.gb42e7cf.assembly.stream.el9", + "id": 3774019, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:3d4f9aaa99060b78edcbb1746fff8e05803e7a6c0dc7209e2449e54daa7ed93f.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f92b2b254450ac5d1143002b753dffa89b52cab370cb2e6faab8f2bbd8ae94b9.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c8e3a5e521e0e84bf06cb310b96e5b9fee39fa01cbbc7b908039bac4825fe08e.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:7355e37130c396f159285544c6a6f4c98b9268ae0fa8e0da5b04e03540c7307a.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-openshift-apiserver-operator-container-v4.19.0-202507291138.p0.g5f66a3e.assembly.stream.el9": { + "nvr": "ose-cluster-openshift-apiserver-operator-container-v4.19.0-202507291138.p0.g5f66a3e.assembly.stream.el9", + "nevr": "ose-cluster-openshift-apiserver-operator-container-0:v4.19.0-202507291138.p0.g5f66a3e.assembly.stream.el9", + "id": 3774040, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:5a696ff153f3cf7bf70b735e1bc5a5892869e90e7e263b3cc0fc36a119cd2834.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4508366600acd2244e68aeb9cf0e3470bbc1cafd98e0c56cf7dea7f5e014e218.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:7c389d9b8aee728db6680c92fcf16af5f324ec689594461ea36f78c528febba2.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2a7b04e43bd98ddaea02c02eb749dbf559e6984e6392597a02ae31d0c8219269.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-ovn-kubernetes-container-v4.19.0-202507300242.p0.ga71aaf8.assembly.stream.el9": { + "nvr": "ose-ovn-kubernetes-container-v4.19.0-202507300242.p0.ga71aaf8.assembly.stream.el9", + "nevr": "ose-ovn-kubernetes-container-0:v4.19.0-202507300242.p0.ga71aaf8.assembly.stream.el9", + "id": 3774933, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:0386091021707555aa7f5230c9dadc8777a74656b1225e1c1ebe3b5c546d7ddb.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c75d4a13b2f29294c2988f517c55186c74489b67672d495d8f3e3d18bff8c718.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e17b5df0e8c02673af8bee3b8898d023de5ed8810e11a200c0411f14a92aac1f.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:80af33455ded150b1bf8ddf917bd66778c3dd883434261210731b7a6d1630b10.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "configmap-reload-container-v4.19.0-202507291138.p0.ga2a48a3.assembly.stream.el9": { + "nvr": "configmap-reload-container-v4.19.0-202507291138.p0.ga2a48a3.assembly.stream.el9", + "nevr": "configmap-reload-container-0:v4.19.0-202507291138.p0.ga2a48a3.assembly.stream.el9", + "id": 3773912, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:708b366e5caf87a3112a98ff9f876623831284e4f095052de3d170ed52a834c4.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e020dda331ec3112b0a855a08ab5224e486f684df46f2738c321c5c4d2238e0c.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d8202d3d209e819c77866133676a809c27ddc61f170b43bceacdc3af9d29060c.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:193f8df26bccd8cbfe6356090cb5f409575a6f8a9ca35db824f2fcb218945520.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-csi-external-resizer-container-v4.19.0-202507291138.p0.gcca04e3.assembly.stream.el9": { + "nvr": "ose-csi-external-resizer-container-v4.19.0-202507291138.p0.gcca04e3.assembly.stream.el9", + "nevr": "ose-csi-external-resizer-container-0:v4.19.0-202507291138.p0.gcca04e3.assembly.stream.el9", + "id": 3774051, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:54d509192c485989fdf5987cb2a933abe30a8a615763d1cb074e89332df87081.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c5962c28e75845d3a4325b3ea50c54d5ab852dd71de20957eba0fd52213ccc3d.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c26e4265d32af64b5a7ab09cdaac0a1a900ba9f6d6c4b7fc89e113696b0c049c.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:61de23df30af946d0142ff48d1a66fd457ccf9b419c4b2ad871b4f5844c2bf71.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-image-customization-controller-container-v4.19.0-202507291138.p0.g7d06674.assembly.stream.el9": { + "nvr": "ose-image-customization-controller-container-v4.19.0-202507291138.p0.g7d06674.assembly.stream.el9", + "nevr": "ose-image-customization-controller-container-0:v4.19.0-202507291138.p0.g7d06674.assembly.stream.el9", + "id": 3774009, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:fd57f617889641715d33960b0568975dd2cf5589f5aa3cee181bf5050f4065b0.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6c106425e1e19f1f1e31b776af1d0091e99982e7c47f3206327f8cd4e8fdf375.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "csi-node-driver-registrar-container-v4.19.0-202507291138.p0.gd18edb3.assembly.stream.el9": { + "nvr": "csi-node-driver-registrar-container-v4.19.0-202507291138.p0.gd18edb3.assembly.stream.el9", + "nevr": "csi-node-driver-registrar-container-0:v4.19.0-202507291138.p0.gd18edb3.assembly.stream.el9", + "id": 3773874, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:a939c661dca04181f26f617c3be287266916d2fb28de4184294335d802661fba.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2a05c93251e56963e8de31a1002f9a0dc54c373d2b221726587f40b2368760b1.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:5a85bdd287fced2c2bd7bcbe6ee0617f352977797b1a6ebddf49b434fd985db3.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c152bdb8ef5fb013be1a8f64b26cccafb1d99c2a5f7b0fb70e0397e78b8860dd.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "prom-label-proxy-container-v4.19.0-202507291138.p0.g1366646.assembly.stream.el9": { + "nvr": "prom-label-proxy-container-v4.19.0-202507291138.p0.g1366646.assembly.stream.el9", + "nevr": "prom-label-proxy-container-0:v4.19.0-202507291138.p0.g1366646.assembly.stream.el9", + "id": 3774055, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:e0207d06239ecdb0ba9d501a366886702bac307f6afeba1a74c0b06d7fa85718.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fa6e73f84878f235389fbeedfcffa2d4e1289dc6cd53d0b76adedbfc2648ab03.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:324d404d314f099ea7989a992a33063c4ec80dd46c11c3954931b19c1fa9a46e.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ee4bd468f04001704634585f57104305306e2c64c6662af65071d11ed15bf17d.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "csi-driver-nfs-container-v4.19.0-202507291138.p0.g2eb5c10.assembly.stream.el9": { + "nvr": "csi-driver-nfs-container-v4.19.0-202507291138.p0.g2eb5c10.assembly.stream.el9", + "nevr": "csi-driver-nfs-container-0:v4.19.0-202507291138.p0.g2eb5c10.assembly.stream.el9", + "id": 3773991, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:019675b66e729c3824a858f0e3306ec92d298ae2de01c9f561cef0125eba84e3.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:267a8f56b5ba8de19769cfddc8d10253af7f6f4cdb5ec004f25232059a0bd334.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ironic-static-ip-manager-container-v4.19.0-202507291138.p0.gfcd9564.assembly.stream.el9": { + "nvr": "ironic-static-ip-manager-container-v4.19.0-202507291138.p0.gfcd9564.assembly.stream.el9", + "nevr": "ironic-static-ip-manager-container-0:v4.19.0-202507291138.p0.gfcd9564.assembly.stream.el9", + "id": 3773869, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:9819f4c11cb5432f8236389fc12dd056367e381c7310acc250611c475ae777e0.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:01d06c98627be28d843aa0fddec02e071034d0fcfe69dcbf6ecee126be3596c5.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "openshift-enterprise-console-operator-container-v4.19.0-202507291138.p0.g3861c72.assembly.stream.el9": { + "nvr": "openshift-enterprise-console-operator-container-v4.19.0-202507291138.p0.g3861c72.assembly.stream.el9", + "nevr": "openshift-enterprise-console-operator-container-0:v4.19.0-202507291138.p0.g3861c72.assembly.stream.el9", + "id": 3773923, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:084f5f65f535f6951a6fd21820cc8cec2a9b2a6d6ec5342503fae3f5f344fc96.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:80f57156287bbee161b23a5224ab60642c9d5b0c3f02c934cae9944c4807960a.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:fdc44fe8c021a583097b1258a191903a1555e306abae12368b7367bee4ad5ee5.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8fdc68c9c70cfa3e2d875015ed1d273bf72c185bdd654870559158ea1b21abf9.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-cluster-kube-scheduler-operator-container-v4.19.0-202507291138.p0.g8740a60.assembly.stream.el9": { + "nvr": "ose-cluster-kube-scheduler-operator-container-v4.19.0-202507291138.p0.g8740a60.assembly.stream.el9", + "nevr": "ose-cluster-kube-scheduler-operator-container-0:v4.19.0-202507291138.p0.g8740a60.assembly.stream.el9", + "id": 3774069, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:ddecec6237c4683c8c71e707cef01f69738f3cd20927c630f944a9ff605a35ba.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2174bdd551f25cff8ef4ad8df48cfbf372b22407aa0a170d9c3e76c8a064f9f5.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:0be81225c4e948ef64c50c8ac99012bc6e2367980561ccd4dc4b1a9b94ba2c1e.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ada6f26905d6129c403cdaf1489830b3ebe1d023fab37d5dc263fa981034ab45.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-installer-artifacts-container-v4.19.0-202507292137.p0.g249d742.assembly.stream.el9": { + "nvr": "ose-installer-artifacts-container-v4.19.0-202507292137.p0.g249d742.assembly.stream.el9", + "nevr": "ose-installer-artifacts-container-0:v4.19.0-202507292137.p0.g249d742.assembly.stream.el9", + "id": 3774587, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:96f40826907a1bfbdc37947a32b11fea70fee31bbe9484c203f63e25a5c62b3a.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f8d427ebe96f07137c149dd0d9a9f4cc09b7c1bf5f8cf7a31c74b917660489ea.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d13733bdd7662c55df4441a355ead9e3a9ebf1b1524de17e8e62f4a5d74bb50b.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:f831be27f5286910b8fed3491dd3f083b30ae762d423167e11a4bde1055cb697.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-powervs-cloud-controller-manager-container-v4.19.0-202507291138.p0.gef83f3f.assembly.stream.el9": { + "nvr": "ose-powervs-cloud-controller-manager-container-v4.19.0-202507291138.p0.gef83f3f.assembly.stream.el9", + "nevr": "ose-powervs-cloud-controller-manager-container-0:v4.19.0-202507291138.p0.gef83f3f.assembly.stream.el9", + "id": 3773853, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:25a1863f9677d4d7da14b75785cbc4658fcfc4e59fda21f1e3b794c70f4ca4a5.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:5710b04925b9f0cfd03812792c1abfeff71bd18a05673bb15081a10c7123399c.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "multus-cni-container-v4.19.0-202507291138.p0.gcf0f68e.assembly.stream.el9": { + "nvr": "multus-cni-container-v4.19.0-202507291138.p0.gcf0f68e.assembly.stream.el9", + "nevr": "multus-cni-container-0:v4.19.0-202507291138.p0.gcf0f68e.assembly.stream.el9", + "id": 3773959, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:b6b845aa0f7cc3904bcfebd9d44df2c2e97345afe0142cd021d3b0cd673f34eb.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:a228b9b44e66ef1ac64d4fbeda84951b6d681a4a8050af0e8fc67e2afe3ebc97.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:5b12df2b248f6a5426c4289f5083457c96de1059ef02b4a82e3a0900d51ee762.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:76f94bfe0dbb119138155dad316faa49e6b7f82a3d9193094f76a96b61d87680.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-openshift-apiserver-container-v4.19.0-202507291138.p0.g7fe5736.assembly.stream.el9": { + "nvr": "ose-openshift-apiserver-container-v4.19.0-202507291138.p0.g7fe5736.assembly.stream.el9", + "nevr": "ose-openshift-apiserver-container-0:v4.19.0-202507291138.p0.g7fe5736.assembly.stream.el9", + "id": 3774033, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:534975f962106109f0e72ae06fabc5216a825aa8235df27244986819024eaa40.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:75dd47f1078945cec77239897029a00f59cd07723a901d6ecb329646590ec7c8.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4b1f78179d9b336b9a33a611aea931b59a37ec8b715370c562185777731e9ff2.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:1cd8d32396b5203db6d02bef7c9b5b7cfacb4cb99bf09c6738d0a3da37f15701.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "cluster-etcd-operator-container-v4.19.0-202507291138.p0.ge900463.assembly.stream.el9": { + "nvr": "cluster-etcd-operator-container-v4.19.0-202507291138.p0.ge900463.assembly.stream.el9", + "nevr": "cluster-etcd-operator-container-0:v4.19.0-202507291138.p0.ge900463.assembly.stream.el9", + "id": 3773907, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:baae3d646b9d88cf3eb9169fa4a62fa70ef82785fb4f77d95e46f766ca8244aa.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2a0056368ba3f3d1c33a928f6dff4c39a8bbf4190dc36a4542b8993b3189db3f.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:b238e4666f2716c77c6317b5c56f7f2a410943e2790f56719bdf34e7f3e306d3.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:96bb0c9954f1dda6fcaf439a3e5d3f62c5e9e092febb6624b514b5a1efae9134.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-powervs-machine-controllers-container-v4.19.0-202507291138.p0.g87f8e30.assembly.stream.el9": { + "nvr": "ose-powervs-machine-controllers-container-v4.19.0-202507291138.p0.g87f8e30.assembly.stream.el9", + "nevr": "ose-powervs-machine-controllers-container-0:v4.19.0-202507291138.p0.g87f8e30.assembly.stream.el9", + "id": 3774071, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:1b42d2ff3f868ba4bcef12e095a46a7d59dc476bf7aa95c6f2b761ffce4efc1e.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c6ecb1863cb424c426c8b0c75246f112864c1ddc0d405d7b060656a466a70055.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-machine-api-provider-gcp-container-v4.19.0-202507291138.p0.g9c99902.assembly.stream.el9": { + "nvr": "ose-machine-api-provider-gcp-container-v4.19.0-202507291138.p0.g9c99902.assembly.stream.el9", + "nevr": "ose-machine-api-provider-gcp-container-0:v4.19.0-202507291138.p0.g9c99902.assembly.stream.el9", + "id": 3774067, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:825a027cb4db3f633db61e03d1133b5f969cf5aecb9b1243de2fd2d7a33f9d3b.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:4b6bc6f5920e78d2eac31a2fa97358cd53291c70f0b9349358c41e941ccbe1fa.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:81ba854a17bf69a8dce0ce606f454342e684649a302835cf8b1e04639503ebfb.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ovn-kubernetes-microshift-container-v4.19.0-202507300242.p0.ga71aaf8.assembly.stream.el9": { + "nvr": "ovn-kubernetes-microshift-container-v4.19.0-202507300242.p0.ga71aaf8.assembly.stream.el9", + "nevr": "ovn-kubernetes-microshift-container-0:v4.19.0-202507300242.p0.ga71aaf8.assembly.stream.el9", + "id": 3774927, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:228ba4bd5fccf5d1e73522e63a0baee3f0a215c428da826f3d53ed9bb0c0985c.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e13d4931c6354174c3e32c94f12aa2c9fc59b426d35a6acc97ee5e8c6a45a36c.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:6d9fd8cc3db2b76c91d3ee1580da8e8f6849a3fa1fdcd35ac7dc30d3479cbd34.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:099fdabf498be18450f61eb08672d1695810daf801fc7d8811c646ecb5c890d1.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-aws-cluster-api-controllers-container-v4.19.0-202507291138.p0.g778bbd2.assembly.stream.el9": { + "nvr": "ose-aws-cluster-api-controllers-container-v4.19.0-202507291138.p0.g778bbd2.assembly.stream.el9", + "nevr": "ose-aws-cluster-api-controllers-container-0:v4.19.0-202507291138.p0.g778bbd2.assembly.stream.el9", + "id": 3774076, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:94ef12f55191be7ea89a45c284271a0d25d47798e7458c8bd85c69a80108e4c9.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:766834c69036c9454b823fc52469e1aa4936bb5cb0c595d2d66fb8149f490d8d.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "csi-provisioner-container-v4.19.0-202507291138.p0.g9db1cdb.assembly.stream.el9": { + "nvr": "csi-provisioner-container-v4.19.0-202507291138.p0.g9db1cdb.assembly.stream.el9", + "nevr": "csi-provisioner-container-0:v4.19.0-202507291138.p0.g9db1cdb.assembly.stream.el9", + "id": 3774050, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:dd831a5faa9c28e1736cbb867651185187c6362e692a374e44e1294fae594bf5.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:3f243ee3b7b8c1cdd5685760b1921cf35bf2b138b4b6f5375e55dbd89ea24e4b.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:73763a9eff7160438041f8d972daeceea242d2d78b5a5fc90905f2aa15606bac.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:124a81f59d8eb105e5495e74a6074913febe7976abee4c46037f6a3a541141fa.aarch64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "prometheus-operator-container-v4.19.0-202507291138.p0.gb8debb4.assembly.stream.el9": { + "nvr": "prometheus-operator-container-v4.19.0-202507291138.p0.gb8debb4.assembly.stream.el9", + "nevr": "prometheus-operator-container-0:v4.19.0-202507291138.p0.gb8debb4.assembly.stream.el9", + "id": 3773897, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:21e919f2151a3c6387e85e31bc34ed45784d515eeebdfe242ea6be097608932a.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:771cade67a407e5aa8385a5f800acd995dc9f82e7298f608a875140d589d8381.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:7f2014132182965c07fdb7a467de5725ef3eac993d0defc029407b408f93a96e.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:ec956a269be49ab86f4fe3eefecbc4063d3c4237cc61313c7dcd955e90a7c830.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-must-gather-container-v4.19.0-202507291138.p0.g463c03c.assembly.stream.el9": { + "nvr": "ose-must-gather-container-v4.19.0-202507291138.p0.g463c03c.assembly.stream.el9", + "nevr": "ose-must-gather-container-0:v4.19.0-202507291138.p0.g463c03c.assembly.stream.el9", + "id": 3774092, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:7557a7ff6510df685061ea6f52244af926ebef390e575a9073edea5275764721.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8b1ddd2ae0db6dd42d08e1626b6d17bca3248e0e7a886748b79e1763d7066bcb.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:214424a0dcaa889200e874020cb83032a21b52c14f7e66e581b48083655f35a4.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:d597c59db98c222a833fd9869ae2e4da37f5f38bbec086d0c07c085b6e24291a.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "ose-openstack-cloud-controller-manager-container-v4.19.0-202507291138.p0.gd9b2461.assembly.stream.el9": { + "nvr": "ose-openstack-cloud-controller-manager-container-v4.19.0-202507291138.p0.gd9b2461.assembly.stream.el9", + "nevr": "ose-openstack-cloud-controller-manager-container-0:v4.19.0-202507291138.p0.gd9b2461.assembly.stream.el9", + "id": 3773920, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "multi": [ + { + "filename": "docker-image-sha256:829175f89d84208779233851ded9fff9c676d62d8692ffa9f7b6a3d3a50058a2.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:93f8a40b3536a364d428a77024fd2045488ce8314ed5b6d52e371e0c410f7b81.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:afbea6f013c34de9a5c8753b31e32e215af6890fc2b11a32e4b4fc94d27ecfac.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:8b5a8840ad9da02ea17750f629e8007eaf3c690d19de366b400edc6fbe22dce7.s390x.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "rhcos-x86_64-4.19.9.6.202507300243-0": { + "nvr": "rhcos-x86_64-4.19.9.6.202507300243-0", + "nevr": "rhcos-x86_64-0:4.19.9.6.202507300243-0", + "id": 3774894, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "x86_64": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ], + "s390x": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ], + "ppc64le": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ], + "aarch64": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "rhcos-ppc64le-4.19.9.6.202507300243-0": { + "nvr": "rhcos-ppc64le-4.19.9.6.202507300243-0", + "nevr": "rhcos-ppc64le-0:4.19.9.6.202507300243-0", + "id": 3774896, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "x86_64": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ], + "s390x": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ], + "ppc64le": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ], + "aarch64": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "rhcos-s390x-4.19.9.6.202507300243-0": { + "nvr": "rhcos-s390x-4.19.9.6.202507300243-0", + "nevr": "rhcos-s390x-0:4.19.9.6.202507300243-0", + "id": 3774895, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "x86_64": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ], + "s390x": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ], + "ppc64le": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ], + "aarch64": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "rhcos-aarch64-4.19.9.6.202507300243-0": { + "nvr": "rhcos-aarch64-4.19.9.6.202507300243-0", + "nevr": "rhcos-aarch64-0:4.19.9.6.202507300243-0", + "id": 3774893, + "is_module": false, + "variant_arch": { + "9Base-RHOSE-4.19": { + "x86_64": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ], + "s390x": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ], + "ppc64le": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ], + "aarch64": [ + { + "filename": "coreos-assembler-git.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + } + ], + "sig_key": { + "name": "anonymized-key", + "keyid": "00000000" + }, + "container_sig_key": { + "name": "anonymized-key", + "keyid": "00000000" + } + } +} diff --git a/src/test/resources/errata-responses/container/example-advisory-2/152887_errata.json b/src/test/resources/errata-responses/container/example-advisory-2/152887_errata.json new file mode 100644 index 0000000..a0fe484 --- /dev/null +++ b/src/test/resources/errata-responses/container/example-advisory-2/152887_errata.json @@ -0,0 +1,1317 @@ +{ + "who": { + "user": { + "id": 9999999, + "login_name": "anonymized-user@example.com", + "realname": "Anonymized User", + "user_organization_id": 999, + "enabled": 1, + "receives_mail": false, + "preferences": {}, + "email_address": "anonymized-user@example.com", + "account_name": "anonymized-user", + "type": "KerberosPrincipal" + }, + "kerberos_principal_owner": { + "name": "anonymized-service@example.com", + "description": "Anonymized service account" + } + }, + "params": { + "id": 152887 + }, + "errata": { + "rhsa": { + "id": 152887, + "revision": 3, + "fulladvisory": "RHSA-2025:12341-03", + "issue_date": "2025-08-05T03:58:42Z", + "update_date": "2025-08-05T03:58:42Z", + "release_date": null, + "synopsis": "Important: OpenShift Container Platform 4.19.7 bug fix and security update", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 0, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "Important", + "product_id": 79, + "is_brew": 1, + "status_updated_at": "2025-08-05T05:44:18Z", + "group_id": 1805, + "created_at": "2025-07-31T05:50:24Z", + "updated_at": "2025-10-23T14:31:20Z", + "respin_count": 1, + "old_advisory": "RHBA-2025:152887-01", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 139, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 923491, + "text_only": false, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2025-08-05T05:44:18Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": 4062, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [ + "docker" + ], + "embargo_undated": false, + "security_sla": null, + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": "2025-08-05", + "builds_updated_at": "2025-07-31T05:52:55Z", + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [ + 152888, + 152890 + ], + "embargo_date": null, + "errata_id": 12341, + "fulltype": "Red Hat Security Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": "2025-08-05T00:00:00Z", + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 79, + "name": "Red Hat OpenShift Enterprise", + "short_name": "RHOSE" + } + } + }, + "original_type": "RHSA", + "content": { + "content": { + "id": 150467, + "errata_id": 152887, + "topic": "Red Hat OpenShift Container Platform release 4.19.7 is now available with updates to packages and images that fix several bugs and add enhancements.\n\nThis release includes a security update for Red Hat OpenShift Container Platform 4.19.\n\nRed Hat Product Security has rated this update as having a security impact of Important. A Common Vulnerability Scoring System (CVSS) base score, which gives a detailed severity rating, is available for each vulnerability from the CVE link(s) in the References section.", + "description": "Red Hat OpenShift Container Platform is Red Hat's cloud computing Kubernetes application platform solution designed for on-premise or private cloud deployments.\n\nThis advisory contains the container images for Red Hat OpenShift Container Platform 4.19.7. See the following advisory for the RPM packages for this release:\n\nhttps://access.redhat.com/errata/RHBA-2025:12342\n\nSpace precludes documenting all of the container images in this advisory. See the following Release Notes documentation, which will be updated shortly for this release, for details about these changes:\n\nhttps://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/release_notes/\n\nSecurity Fix(es):\n\n* github.com/golang/glog: Vulnerability when creating log files in github.com/golang/glog (CVE-XXXX-XXXXX)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.\n\nAll OpenShift Container Platform 4.19 users are advised to upgrade to these updated packages and images when they are available in the appropriate release channel. To check for available updates, use the OpenShift CLI (oc) or web console. Instructions for upgrading a cluster are available at https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html-single/updating_clusters/index#updating-cluster-cli.", + "solution": "For OpenShift Container Platform 4.19 see the following documentation, which will be updated shortly for this release, for important instructions on how to upgrade your cluster and fully apply this asynchronous errata update:\n\nhttps://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/release_notes/\n\nYou may download the oc tool and use it to inspect release image metadata for x86_64, s390x, ppc64le, and aarch64 architectures. The image digests may be found at https://quay.io/repository/openshift-release-dev/ocp-release?tab=tags.\n\nThe sha values for the release are as follows:\n\n (For x86_64 architecture)\n The image digest is sha256:bd4cd954feebfe3a6b2847c20271e8f3ba21e99ac1e234db6ce4cf2207f8955a\n\n (For s390x architecture)\n The image digest is sha256:ceff42828a26986d26300c6d1c3cdf27f4e2e215a35847b23d9cfbbfe8011bd5\n\n (For ppc64le architecture)\n The image digest is sha256:229755fc2727bacab9fdf313741b6bfec8aecf99523aa82f469228fbc08ec1f3\n\n (For aarch64 architecture)\n The image digest is sha256:6c4163afcde7807fa71e9d8ee52767ea0f990a83afceaf4769052e2efc242602\n\nAll OpenShift Container Platform 4.19 users are advised to upgrade to these updated packages and images when they are available in the appropriate release channel. To check for available updates, use the OpenShift CLI (oc) or web console. Instructions for upgrading a cluster are available at https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html-single/updating_clusters/index#updating-cluster-cli.", + "keywords": "", + "cve": "CVE-XXXX-XXXXX", + "crossref": "", + "reference": "https://access.redhat.com/security/updates/classification/#important", + "how_to_test": null, + "doc_reviewer_id": 9999995, + "updated_at": "2025-07-31T15:52:11Z", + "revision_count": 1, + "doc_review_due_at": null, + "text_only_cpe": null, + "product_version_text": "", + "product_security_reviewer_id": null + } + }, + "diffs": {}, + "is_embargoed": false, + "bugs": { + "errata": { + "rhsa": { + "id": 152887, + "revision": 3, + "fulladvisory": "RHSA-2025:12341-03", + "issue_date": "2025-08-05T03:58:42Z", + "update_date": "2025-08-05T03:58:42Z", + "release_date": null, + "synopsis": "Important: OpenShift Container Platform 4.19.7 bug fix and security update", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 0, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "Important", + "product_id": 79, + "is_brew": 1, + "status_updated_at": "2025-08-05T05:44:18Z", + "group_id": 1805, + "created_at": "2025-07-31T05:50:24Z", + "updated_at": "2025-10-23T14:31:20Z", + "respin_count": 1, + "old_advisory": "RHBA-2025:152887-01", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 139, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 923491, + "text_only": false, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2025-08-05T05:44:18Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": 4062, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [ + "docker" + ], + "embargo_undated": false, + "security_sla": null, + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": "2025-08-05", + "builds_updated_at": "2025-07-31T05:52:55Z", + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [ + 152888, + 152890 + ], + "embargo_date": null, + "errata_id": 12341, + "fulltype": "Red Hat Security Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": "2025-08-05T00:00:00Z", + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 79, + "name": "Red Hat OpenShift Enterprise", + "short_name": "RHOSE" + } + } + }, + "idsfixed": [ + "2342463" + ], + "to_fetch": [], + "id_field": "id", + "id_prefix": "bz:", + "type": "bugs", + "bugs": [ + { + "bug": { + "id": 2342463, + "bug_status": "NEW", + "short_desc": "CVE-XXXX-XXXXX github.com/golang/glog: Vulnerability when creating log files in github.com/golang/glog", + "package_id": 1520, + "is_private": 0, + "last_updated": "2025-10-23T14:30:50Z", + "is_security": 1, + "alias": "CVE-XXXX-XXXXX", + "was_marked_on_qa": 0, + "priority": "high", + "bug_severity": "high", + "qa_whiteboard": "", + "keywords": "Security", + "issuetrackers": "", + "pm_score": 0, + "is_blocker": 0, + "is_exception": 0, + "flags": "requires_doc_text+", + "release_notes": "", + "reconciled_at": "2025-10-23T14:31:20Z", + "verified": "", + "has_security_group": false, + "internal_target_release": "", + "approved_release": "", + "zstream_target_release": "", + "product": "Security Response", + "sla_date": null, + "is_embargoed": false + } + } + ] + }, + "jira_issues": { + "errata": { + "rhsa": { + "id": 152887, + "revision": 3, + "fulladvisory": "RHSA-2025:12341-03", + "issue_date": "2025-08-05T03:58:42Z", + "update_date": "2025-08-05T03:58:42Z", + "release_date": null, + "synopsis": "Important: OpenShift Container Platform 4.19.7 bug fix and security update", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 0, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "Important", + "product_id": 79, + "is_brew": 1, + "status_updated_at": "2025-08-05T05:44:18Z", + "group_id": 1805, + "created_at": "2025-07-31T05:50:24Z", + "updated_at": "2025-10-23T14:31:20Z", + "respin_count": 1, + "old_advisory": "RHBA-2025:152887-01", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 139, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 923491, + "text_only": false, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2025-08-05T05:44:18Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": 4062, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [ + "docker" + ], + "embargo_undated": false, + "security_sla": null, + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": "2025-08-05", + "builds_updated_at": "2025-07-31T05:52:55Z", + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [ + 152888, + 152890 + ], + "embargo_date": null, + "errata_id": 12341, + "fulltype": "Red Hat Security Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": "2025-08-05T00:00:00Z", + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 79, + "name": "Red Hat OpenShift Enterprise", + "short_name": "RHOSE" + } + } + }, + "idsfixed": [ + "OCPBUGS-58842", + "OCPBUGS-58843", + "OCPBUGS-58844", + "OCPBUGS-58845", + "OCPBUGS-58849", + "OCPBUGS-59401", + "OCPBUGS-45731", + "OCPBUGS-54376", + "OCPBUGS-55238", + "OCPBUGS-55629", + "OCPBUGS-56280", + "OCPBUGS-57105", + "OCPBUGS-57956", + "OCPBUGS-58239", + "OCPBUGS-58331", + "OCPBUGS-58683", + "OCPBUGS-59133", + "OCPBUGS-59160", + "OCPBUGS-59199", + "OCPBUGS-59313", + "OCPBUGS-59326", + "OCPBUGS-59488", + "OCPBUGS-59530", + "OCPBUGS-59557", + "OCPBUGS-59584", + "OCPBUGS-59585", + "OCPBUGS-59618", + "OCPBUGS-59639", + "OCPBUGS-59720", + "OCPBUGS-59731", + "OCPBUGS-59741", + "OCPBUGS-59779", + "OCPBUGS-59799", + "OCPBUGS-59810", + "OCPBUGS-59888" + ], + "to_fetch": [], + "id_field": "key", + "id_prefix": "jira:", + "type": "jira_issues", + "jira_issues": [ + { + "jira_issue": { + "id": 4260826, + "id_jira": 16508508, + "key": "OCPBUGS-45731", + "summary": "ART requests updates to 4.19 image cluster-etcd-operator-container", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-07-30T00:39:46Z", + "labels": [ + "art:package:cluster-etcd-operator-container", + "art:reconciliation", + "pre-merge-tested" + ], + "priority": "Undefined", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": true, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:44:37Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4227817, + "id_jira": 16780039, + "key": "OCPBUGS-54376", + "summary": "openshift-frr-k8s controller container high CPU during scale testing of router advertisements", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-29T10:22:11Z", + "labels": [ + "SDN:OVNK:BGP" + ], + "priority": "Major", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-03T05:58:30Z", + "updated_at": "2025-08-05T05:44:39Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260825, + "id_jira": 16844212, + "key": "OCPBUGS-55238", + "summary": "New disruption monitoring reporting 3 bars of disruption during kube-apiserver progressing", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-30T19:38:06Z", + "labels": [], + "priority": "Undefined", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:44:40Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260824, + "id_jira": 16868076, + "key": "OCPBUGS-55629", + "summary": "[ci-watcher] verify-deps job is failing on all PRs due to mismatched go version", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-24T19:30:29Z", + "labels": [], + "priority": "Critical", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:44:42Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260823, + "id_jira": 16983342, + "key": "OCPBUGS-56280", + "summary": "Conflict in CreateProjectModal extension", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-29T03:07:34Z", + "labels": [], + "priority": "Critical", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:44:42Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260822, + "id_jira": 17035827, + "key": "OCPBUGS-57105", + "summary": "\"Configure\" button in AlertmanagerReceiversNotConfigured status errors out with \"navigate is not a function\"", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-28T02:50:25Z", + "labels": [], + "priority": "Undefined", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:44:44Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260821, + "id_jira": 17084490, + "key": "OCPBUGS-57956", + "summary": "Arbiter CEO Shared Informer Needs Revision", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-07-30T11:39:58Z", + "labels": [], + "priority": "Critical", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": true, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:44:45Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4227803, + "id_jira": 16888943, + "key": "OCPBUGS-58239", + "summary": "Add expansion-related hypershift sidecars/RBAC", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-08-04T10:49:31Z", + "labels": [], + "priority": "Normal", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-03T05:58:30Z", + "updated_at": "2025-08-05T05:44:47Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4256440, + "id_jira": 17114114, + "key": "OCPBUGS-58331", + "summary": "[release-4.19] console-telemetry-plugin: unable to track usage: Forbidden", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-28T11:01:14Z", + "labels": [ + "triaged" + ], + "priority": "Major", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-24T09:17:45Z", + "updated_at": "2025-08-05T05:44:47Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260820, + "id_jira": 17125166, + "key": "OCPBUGS-58683", + "summary": "HyperShift produces an error when providing an authentication OIDC client without a client secret", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-28T18:48:23Z", + "labels": [ + "triaged" + ], + "priority": "Major", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:44:50Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260765, + "id_jira": 17125799, + "key": "OCPBUGS-58842", + "summary": "CVE-XXXX-XXXXX openshift4/ose-agent-installer-api-server-rhel8: Vulnerability when creating log files in github.com/golang/glog [openshift-4.19]", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-07-28T14:49:33Z", + "labels": [ + "CVE-XXXX-XXXXX", + "Security", + "SecurityTracking", + "flaw:bz#2342463", + "flawuuid:32a153cb-4a9d-4917-8349-c857755949dc", + "pscomponent:openshift4/ose-agent-installer-api-server-rhel8", + "traiged" + ], + "priority": "Undefined", + "sla_date": "2025-07-29", + "release_notes_text": null, + "issue_type": "Vulnerability", + "is_private": true, + "created": null, + "created_at": "2025-07-31T06:58:05Z", + "updated_at": "2025-08-05T05:44:25Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260764, + "id_jira": 17125870, + "key": "OCPBUGS-58843", + "summary": "CVE-XXXX-XXXXX openshift4/ose-agent-installer-api-server-rhel9: Vulnerability when creating log files in github.com/golang/glog [openshift-4.19]", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-07-25T06:22:06Z", + "labels": [ + "CVE-XXXX-XXXXX", + "Security", + "SecurityTracking", + "flaw:bz#2342463", + "flawuuid:32a153cb-4a9d-4917-8349-c857755949dc", + "pscomponent:openshift4/ose-agent-installer-api-server-rhel9", + "triaged" + ], + "priority": "Undefined", + "sla_date": "2025-07-29", + "release_notes_text": null, + "issue_type": "Vulnerability", + "is_private": true, + "created": null, + "created_at": "2025-07-31T06:58:05Z", + "updated_at": "2025-08-05T05:44:28Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260763, + "id_jira": 17125871, + "key": "OCPBUGS-58844", + "summary": "CVE-XXXX-XXXXX openshift4/ose-agent-installer-node-agent-rhel8: Vulnerability when creating log files in github.com/golang/glog [openshift-4.19]", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-07-29T17:41:49Z", + "labels": [ + "CVE-XXXX-XXXXX", + "Security", + "SecurityTracking", + "flaw:bz#2342463", + "flawuuid:32a153cb-4a9d-4917-8349-c857755949dc", + "ocp-sustaining", + "pscomponent:openshift4/ose-agent-installer-node-agent-rhel8", + "triaged" + ], + "priority": "Undefined", + "sla_date": "2025-07-29", + "release_notes_text": null, + "issue_type": "Vulnerability", + "is_private": true, + "created": null, + "created_at": "2025-07-31T06:58:05Z", + "updated_at": "2025-08-05T05:44:31Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260762, + "id_jira": 17125946, + "key": "OCPBUGS-58845", + "summary": "CVE-XXXX-XXXXX openshift4/ose-agent-installer-node-agent-rhel9: Vulnerability when creating log files in github.com/golang/glog [openshift-4.19]", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-07-29T19:32:14Z", + "labels": [ + "CVE-XXXX-XXXXX", + "Security", + "SecurityTracking", + "flaw:bz#2342463", + "flawuuid:32a153cb-4a9d-4917-8349-c857755949dc", + "pscomponent:openshift4/ose-agent-installer-node-agent-rhel9", + "triaged" + ], + "priority": "Undefined", + "sla_date": "2025-07-29", + "release_notes_text": null, + "issue_type": "Vulnerability", + "is_private": true, + "created": null, + "created_at": "2025-07-31T06:58:05Z", + "updated_at": "2025-08-05T05:44:34Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260761, + "id_jira": 17125874, + "key": "OCPBUGS-58849", + "summary": "CVE-XXXX-XXXXX openshift4/ose-multus-admission-controller-rhel9: Vulnerability when creating log files in github.com/golang/glog [openshift-4.19]", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-07-29T03:08:55Z", + "labels": [ + "CVE-XXXX-XXXXX", + "Security", + "SecurityTracking", + "flaw:bz#2342463", + "flawuuid:32a153cb-4a9d-4917-8349-c857755949dc", + "pscomponent:openshift4/ose-multus-admission-controller-rhel9" + ], + "priority": "Undefined", + "sla_date": "2025-07-29", + "release_notes_text": null, + "issue_type": "Vulnerability", + "is_private": true, + "created": null, + "created_at": "2025-07-31T06:58:05Z", + "updated_at": "2025-08-05T05:44:35Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4256438, + "id_jira": 17129205, + "key": "OCPBUGS-59133", + "summary": "BMH stuck in deleting state while performing IBBF ", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-29T14:09:29Z", + "labels": [ + "ci-blocker", + "triaged" + ], + "priority": "Major", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-24T09:17:45Z", + "updated_at": "2025-08-05T05:44:50Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260819, + "id_jira": 17131645, + "key": "OCPBUGS-59160", + "summary": "Linuxptp doesn't seem considering all unitcast server list?", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-07-25T09:02:37Z", + "labels": [ + "telco-5g-ran" + ], + "priority": "Normal", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": true, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:44:52Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260818, + "id_jira": 17133663, + "key": "OCPBUGS-59199", + "summary": "[release-4.19] Deleted objects remain in favorites and cause 404 errors", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-08-04T06:48:28Z", + "labels": [ + "triaged" + ], + "priority": "Normal", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": true, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:44:52Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260817, + "id_jira": 17143719, + "key": "OCPBUGS-59313", + "summary": "[4.19] Missing endpoint slices for open ports the operator uses", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-28T15:38:43Z", + "labels": [ + "etcd-operator" + ], + "priority": "Normal", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:44:54Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260816, + "id_jira": 17145750, + "key": "OCPBUGS-59326", + "summary": "[release-4.19] PTP State does not recover after updating the GM ptpconfig", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-07-25T18:05:58Z", + "labels": [ + "Backport", + "KDDI", + "Samsung", + "ptp-operator", + "telco5g-prio", + "vDU" + ], + "priority": "Major", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": true, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:44:55Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260760, + "id_jira": 17149679, + "key": "OCPBUGS-59401", + "summary": "CVE-XXXX-XXXXX openshift4/ose-cloud-credential-operator: Vulnerability when creating log files in github.com/golang/glog [openshift-4.19]", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-07-28T15:38:47Z", + "labels": [ + "CVE-XXXX-XXXXX", + "Security", + "SecurityTracking", + "flaw:bz#2342463", + "flawuuid:32a153cb-4a9d-4917-8349-c857755949dc", + "pre-merge-tested", + "pscomponent:openshift4/ose-cloud-credential-operator" + ], + "priority": "Critical", + "sla_date": "2025-07-29", + "release_notes_text": null, + "issue_type": "Vulnerability", + "is_private": true, + "created": null, + "created_at": "2025-07-31T06:58:05Z", + "updated_at": "2025-08-05T05:44:37Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260815, + "id_jira": 17152220, + "key": "OCPBUGS-59488", + "summary": "openshift-console/download pods running on random nodes", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-30T00:39:54Z", + "labels": [], + "priority": "Undefined", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:44:57Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260814, + "id_jira": 17154802, + "key": "OCPBUGS-59530", + "summary": "[4.19][upgrade] OCP4.18.X - Stale SNATs/LRPs due to failed sync to add metadata after upgrade", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-09-13T14:50:43Z", + "labels": [ + "QE:Reproduced", + "SDN:Backport", + "SDN:OVNK:EgressIP", + "UpdateRecommendationsBlocked", + "UpgradeBlocker", + "cee.neXT", + "pre-merge-verified" + ], + "priority": "Critical", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-09-13T15:29:21Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4253032, + "id_jira": 17156300, + "key": "OCPBUGS-59557", + "summary": "[release-4.19] console plugins table lacks data-test attributes", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-28T02:54:35Z", + "labels": [], + "priority": "Normal", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-19T12:19:00Z", + "updated_at": "2025-08-05T05:45:00Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260813, + "id_jira": 17158804, + "key": "OCPBUGS-59584", + "summary": "[release-4.19] console-crontab-plugin has build warning", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-31T04:15:24Z", + "labels": [], + "priority": "Normal", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:45:00Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260812, + "id_jira": 17158806, + "key": "OCPBUGS-59585", + "summary": "[release-4.19] console-crontab-plugin integration tests fail in CI because of auth changes", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-29T10:54:14Z", + "labels": [], + "priority": "Normal", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:45:02Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260811, + "id_jira": 17161710, + "key": "OCPBUGS-59618", + "summary": "Console oidcClient with \"OIDC provider CA version not up to date in current deployment\" and \"status: Unknown\" can confuse users in both HCP and OCP BYO external OIDC env", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-30T10:30:55Z", + "labels": [], + "priority": "Undefined", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:45:02Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260810, + "id_jira": 17162714, + "key": "OCPBUGS-59639", + "summary": "[release-4.19] New get started message takes up too much space and 'no **resources found' message can not be shown completely on the page.", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-31T03:02:44Z", + "labels": [], + "priority": "Undefined", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:45:04Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260808, + "id_jira": 17166791, + "key": "OCPBUGS-59720", + "summary": "TestMCNPoolNameCustom should clean up resources properly", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-28T12:53:54Z", + "labels": [ + "mco-triaged" + ], + "priority": "Critical", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:45:04Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260807, + "id_jira": 17167664, + "key": "OCPBUGS-59731", + "summary": "OVE ISO: Add back NodeHealthCheck (NHR) and FenceAgentsRemediation (FAR) operators", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-28T15:07:07Z", + "labels": [ + "assisted-disconnected-ui" + ], + "priority": "Major", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:45:07Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260806, + "id_jira": 17169248, + "key": "OCPBUGS-59741", + "summary": "OVE UI fails to install when using OCP 4.19.4", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-28T13:04:06Z", + "labels": [], + "priority": "Undefined", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:45:07Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260805, + "id_jira": 17171511, + "key": "OCPBUGS-59779", + "summary": "oc-mirror \"hangs\" when the tar file is 0 bytes", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-30T03:08:07Z", + "labels": [ + "pre-merge-tested", + "pre-merge-verified", + "v2" + ], + "priority": "Minor", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:45:08Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260804, + "id_jira": 17172747, + "key": "OCPBUGS-59799", + "summary": "oc-mirror unable to mirror Helm Chart with aliased sub-chart dependencies", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-30T08:49:22Z", + "labels": [ + "reviewed", + "v1", + "v2", + "valid" + ], + "priority": "Normal", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:45:09Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260803, + "id_jira": 17173642, + "key": "OCPBUGS-59810", + "summary": "Default name is comprised of '-' on 'Add to favorites' page when language is Korean/Japanese/Chinese.", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-29T19:36:55Z", + "labels": [], + "priority": "Undefined", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:45:10Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4260802, + "id_jira": 17178923, + "key": "OCPBUGS-59888", + "summary": "OpenShift CAPZ is missing upstream bug fix kubernetes-sigs#5552.", + "status": "Closed", + "jira_security_level_id": null, + "updated": "2025-07-30T08:49:24Z", + "labels": [], + "priority": "Normal", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Bug", + "is_private": false, + "created": null, + "created_at": "2025-07-31T08:19:56Z", + "updated_at": "2025-08-05T05:45:10Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + } + ] + } +} diff --git a/src/test/resources/errata-responses/container/example-advisory-3/157751_builds.json b/src/test/resources/errata-responses/container/example-advisory-3/157751_builds.json new file mode 100644 index 0000000..a617471 --- /dev/null +++ b/src/test/resources/errata-responses/container/example-advisory-3/157751_builds.json @@ -0,0 +1,80 @@ +{ + "RHEL-9-JBEAP-8.0": { + "name": "RHEL-9-JBEAP-8.0", + "description": "Red Hat JBoss Enterprise Application Platform 8.0 for RHEL 9", + "builds": [ + { + "jboss-eap8-openjdk21-builder-openshift-container-1.0.1.GA-10.1767793526": { + "nvr": "jboss-eap8-openjdk21-builder-openshift-container-1.0.1.GA-10.1767793526", + "nevr": "jboss-eap8-openjdk21-builder-openshift-container-0:1.0.1.GA-10.1767793526", + "id": 3924690, + "is_module": false, + "variant_arch": { + "9Base-JBEAP-8.0": { + "multi": [ + { + "filename": "docker-image-sha256:2d4d2a16e4dc4737062706fb6fcae02770ef048d8d6b54a164b417f4ed6b953a.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:e2111f33e45222a8021cb29e1bb16bf6aea8911740fc2140954bacdc38240c9b.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:c9b0dfba8e632cf04bfbfce8e36936bf3bd1be5892b10a62b45bb2c539e9f1ce.ppc64le.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:9a992c3afe6b9c70db1c402ace99c9d5366f6e121e1b95f82421f3a54efd2e77.x86_64.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + }, + { + "jboss-eap8-openjdk21-runtime-openshift-container-1.0.1.GA-7.1767793530": { + "nvr": "jboss-eap8-openjdk21-runtime-openshift-container-1.0.1.GA-7.1767793530", + "nevr": "jboss-eap8-openjdk21-runtime-openshift-container-0:1.0.1.GA-7.1767793530", + "id": 3924674, + "is_module": false, + "variant_arch": { + "9Base-JBEAP-8.0": { + "multi": [ + { + "filename": "docker-image-sha256:a0be070f00074486d6918cb23a83a6f42454c831fe4a60c6045039eca55583bb.s390x.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:5a3e58b74766676c823299bbb02f609b6f114d387aa12eba213f0816cf18eace.aarch64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:2877da17a6c290f2edb8e8a79e119b04588a29999a46c27c669b2f7500cf83db.x86_64.tar.gz", + "is_signed": false + }, + { + "filename": "docker-image-sha256:193c2b9937b154a1b95ccddb7cc7b4d3a9cee1485977a5f1f10d3d764acda650.ppc64le.tar.gz", + "is_signed": false + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": false + } + } + ], + "sig_key": { + "name": "anonymized-key", + "keyid": "00000000" + }, + "container_sig_key": { + "name": "anonymized-key", + "keyid": "00000000" + } + } +} diff --git a/src/test/resources/errata-responses/container/example-advisory-3/157751_errata.json b/src/test/resources/errata-responses/container/example-advisory-3/157751_errata.json new file mode 100644 index 0000000..f6153f8 --- /dev/null +++ b/src/test/resources/errata-responses/container/example-advisory-3/157751_errata.json @@ -0,0 +1,437 @@ +{ + "who": { + "user": { + "id": 9999999, + "login_name": "anonymized-user@example.com", + "realname": "Anonymized User", + "user_organization_id": 999, + "enabled": 1, + "receives_mail": true, + "preferences": {}, + "email_address": "anonymized-user@example.com", + "account_name": "anonymized-user", + "type": "KerberosPrincipal" + }, + "kerberos_principal_owner": { + "name": "anonymized-service@example.com", + "description": "Anonymized service account" + } + }, + "params": { + "id": 157751 + }, + "errata": { + "rhba": { + "id": 157751, + "revision": 1, + "fulladvisory": "RHBA-2026:0359-01", + "issue_date": "2026-01-08T14:00:50Z", + "update_date": "2026-01-08T14:00:50Z", + "release_date": null, + "synopsis": "updated Red Hat JBoss Enterprise Application Platform 8.0 for RHEL 9 container images", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 1, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "None", + "product_id": 41, + "is_brew": 1, + "status_updated_at": "2026-01-08T14:04:39Z", + "group_id": 1671, + "created_at": "2026-01-07T15:03:51Z", + "updated_at": "2026-01-08T22:44:24Z", + "respin_count": 1, + "old_advisory": "RHBA-2026:157751-01", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 2, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 954400, + "text_only": false, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2026-01-08T14:04:39Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [ + "docker" + ], + "embargo_undated": false, + "security_sla": null, + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": null, + "builds_updated_at": "2026-01-07T15:03:52Z", + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 359, + "fulltype": "Red Hat Bug Fix Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": null, + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 41, + "name": "Red Hat JBoss Enterprise Application Platform", + "short_name": "JBEAP" + } + } + }, + "original_type": "RHBA", + "content": { + "content": { + "id": 155331, + "errata_id": 157751, + "topic": "Updated Red Hat JBoss Enterprise Application Platform 8.0 for RHEL 9 container images are now available", + "description": "The Red Hat JBoss Enterprise Application Platform 8.0 for RHEL 9 container images have been updated to address the following security advisory: RHSA-2026:0238 (see References)\n\nUsers of Red Hat JBoss Enterprise Application Platform 8.0 for RHEL 9 container images are advised to upgrade to these updated images, which contain backported patches to correct these security issues, fix these bugs and add these enhancements. Users of these images are also encouraged to rebuild all container images that depend on these images.\n\nYou can find images updated by this advisory in Red Hat Container Catalog (see References).", + "solution": "The Red Hat JBoss Enterprise Application Platform 8.0 for RHEL 9 container images provided by this update can be downloaded from the Red Hat Container Registry at registry.access.redhat.com. Installation instructions for your platform are available at Red Hat Container Catalog (see References).\n\nDockerfiles and scripts should be amended either to refer to this new image specifically, or to the latest image generally.", + "keywords": "", + "cve": "", + "crossref": "", + "reference": "https://access.redhat.com/errata/RHSA-2026:0238\nhttps://access.redhat.com/containers", + "how_to_test": null, + "doc_reviewer_id": 9999995, + "updated_at": "2026-01-08T09:54:43Z", + "revision_count": 1, + "doc_review_due_at": null, + "text_only_cpe": null, + "product_version_text": "", + "product_security_reviewer_id": null + } + }, + "diffs": {}, + "is_embargoed": false, + "bugs": { + "errata": { + "rhba": { + "id": 157751, + "revision": 1, + "fulladvisory": "RHBA-2026:0359-01", + "issue_date": "2026-01-08T14:00:50Z", + "update_date": "2026-01-08T14:00:50Z", + "release_date": null, + "synopsis": "updated Red Hat JBoss Enterprise Application Platform 8.0 for RHEL 9 container images", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 1, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "None", + "product_id": 41, + "is_brew": 1, + "status_updated_at": "2026-01-08T14:04:39Z", + "group_id": 1671, + "created_at": "2026-01-07T15:03:51Z", + "updated_at": "2026-01-08T22:44:24Z", + "respin_count": 1, + "old_advisory": "RHBA-2026:157751-01", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 2, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 954400, + "text_only": false, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2026-01-08T14:04:39Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [ + "docker" + ], + "embargo_undated": false, + "security_sla": null, + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": null, + "builds_updated_at": "2026-01-07T15:03:52Z", + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 359, + "fulltype": "Red Hat Bug Fix Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": null, + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 41, + "name": "Red Hat JBoss Enterprise Application Platform", + "short_name": "JBEAP" + } + } + }, + "idsfixed": [ + "2416904", + "2416907", + "2418711" + ], + "to_fetch": [], + "id_field": "id", + "id_prefix": "bz:", + "type": "bugs", + "bugs": [ + { + "bug": { + "id": 2416904, + "bug_status": "NEW", + "short_desc": "CVE-XXXX-XXXXX libpng: LIBPNG buffer overflow", + "package_id": 1520, + "is_private": 0, + "last_updated": "2026-01-08T22:44:12Z", + "is_security": 1, + "alias": "CVE-XXXX-XXXXX", + "was_marked_on_qa": 0, + "priority": "high", + "bug_severity": "high", + "qa_whiteboard": "", + "keywords": "Security", + "issuetrackers": "", + "pm_score": 0, + "is_blocker": 0, + "is_exception": 0, + "flags": "requires_doc_text?", + "release_notes": "", + "reconciled_at": "2026-01-08T22:44:24Z", + "verified": "", + "has_security_group": false, + "internal_target_release": "", + "approved_release": "", + "zstream_target_release": "", + "product": "Security Response", + "sla_date": null, + "is_embargoed": false + } + }, + { + "bug": { + "id": 2416907, + "bug_status": "NEW", + "short_desc": "CVE-XXXX-XXXXX libpng: LIBPNG heap buffer overflow", + "package_id": 1520, + "is_private": 0, + "last_updated": "2026-01-08T22:44:08Z", + "is_security": 1, + "alias": "CVE-XXXX-XXXXX", + "was_marked_on_qa": 0, + "priority": "high", + "bug_severity": "high", + "qa_whiteboard": "", + "keywords": "Security", + "issuetrackers": "", + "pm_score": 0, + "is_blocker": 0, + "is_exception": 0, + "flags": "requires_doc_text?", + "release_notes": "", + "reconciled_at": "2026-01-08T22:44:23Z", + "verified": "", + "has_security_group": false, + "internal_target_release": "", + "approved_release": "", + "zstream_target_release": "", + "product": "Security Response", + "sla_date": null, + "is_embargoed": false + } + }, + { + "bug": { + "id": 2418711, + "bug_status": "NEW", + "short_desc": "CVE-XXXX-XXXXX libpng: LIBPNG out-of-bounds read in png_image_read_composite", + "package_id": 1520, + "is_private": 0, + "last_updated": "2026-01-08T22:44:05Z", + "is_security": 1, + "alias": "CVE-XXXX-XXXXX", + "was_marked_on_qa": 0, + "priority": "high", + "bug_severity": "high", + "qa_whiteboard": "", + "keywords": "Security", + "issuetrackers": "", + "pm_score": 0, + "is_blocker": 0, + "is_exception": 0, + "flags": "requires_doc_text?", + "release_notes": "", + "reconciled_at": "2026-01-08T22:44:22Z", + "verified": "", + "has_security_group": false, + "internal_target_release": "", + "approved_release": "", + "zstream_target_release": "", + "product": "Security Response", + "sla_date": null, + "is_embargoed": false + } + } + ] + }, + "jira_issues": { + "errata": { + "rhba": { + "id": 157751, + "revision": 1, + "fulladvisory": "RHBA-2026:0359-01", + "issue_date": "2026-01-08T14:00:50Z", + "update_date": "2026-01-08T14:00:50Z", + "release_date": null, + "synopsis": "updated Red Hat JBoss Enterprise Application Platform 8.0 for RHEL 9 container images", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 1, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "None", + "product_id": 41, + "is_brew": 1, + "status_updated_at": "2026-01-08T14:04:39Z", + "group_id": 1671, + "created_at": "2026-01-07T15:03:51Z", + "updated_at": "2026-01-08T22:44:24Z", + "respin_count": 1, + "old_advisory": "RHBA-2026:157751-01", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 2, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 954400, + "text_only": false, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2026-01-08T14:04:39Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [ + "docker" + ], + "embargo_undated": false, + "security_sla": null, + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": null, + "builds_updated_at": "2026-01-07T15:03:52Z", + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 359, + "fulltype": "Red Hat Bug Fix Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": null, + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 41, + "name": "Red Hat JBoss Enterprise Application Platform", + "short_name": "JBEAP" + } + } + }, + "idsfixed": [], + "to_fetch": [], + "id_field": "key", + "id_prefix": "jira:", + "type": "jira_issues", + "jira_issues": [] + } +} diff --git a/src/test/resources/errata-responses/rpm/example-advisory-1/157548_builds.json b/src/test/resources/errata-responses/rpm/example-advisory-1/157548_builds.json new file mode 100644 index 0000000..b496d5a --- /dev/null +++ b/src/test/resources/errata-responses/rpm/example-advisory-1/157548_builds.json @@ -0,0 +1,90 @@ +{ + "RHEL-8.8.0.Z.E4S": { + "name": "RHEL-8.8.0.Z.E4S", + "description": "Red Hat Enterprise Linux 8.8 Update Services for SAP Solutions", + "builds": [ + { + "spice-client-win-8.10-3.el8_8.1": { + "nvr": "spice-client-win-8.10-3.el8_8.1", + "nevr": "spice-client-win-0:8.10-3.el8_8.1", + "id": 3918400, + "is_module": false, + "variant_arch": { + "AppStream-8.8.0.Z.E4S": { + "SRPMS": [ + { + "filename": "spice-client-win-8.10-3.el8_8.1.src.rpm", + "is_signed": true + } + ], + "noarch": [ + { + "filename": "spice-client-win-x64-8.10-3.el8_8.1.noarch.rpm", + "is_signed": true + }, + { + "filename": "spice-client-win-x86-8.10-3.el8_8.1.noarch.rpm", + "is_signed": true + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": true + } + } + ], + "sig_key": { + "name": "anonymized-key", + "keyid": "00000000" + }, + "container_sig_key": { + "name": "anonymized-key", + "keyid": "00000000" + } + }, + "RHEL-8.8.0.Z.TUS": { + "name": "RHEL-8.8.0.Z.TUS", + "description": "Red Hat Enterprise Linux 8.8 Telecommunications Update Service", + "builds": [ + { + "spice-client-win-8.10-3.el8_8.1": { + "nvr": "spice-client-win-8.10-3.el8_8.1", + "nevr": "spice-client-win-0:8.10-3.el8_8.1", + "id": 3918400, + "is_module": false, + "variant_arch": { + "AppStream-8.8.0.Z.TUS": { + "SRPMS": [ + { + "filename": "spice-client-win-8.10-3.el8_8.1.src.rpm", + "is_signed": true + } + ], + "noarch": [ + { + "filename": "spice-client-win-x64-8.10-3.el8_8.1.noarch.rpm", + "is_signed": true + }, + { + "filename": "spice-client-win-x86-8.10-3.el8_8.1.noarch.rpm", + "is_signed": true + } + ] + } + }, + "added_by": "anonymized-user@example.com", + "is_signed": true + } + } + ], + "sig_key": { + "name": "anonymized-key", + "keyid": "00000000" + }, + "container_sig_key": { + "name": "anonymized-key", + "keyid": "00000000" + } + } +} diff --git a/src/test/resources/errata-responses/rpm/example-advisory-1/157548_errata.json b/src/test/resources/errata-responses/rpm/example-advisory-1/157548_errata.json new file mode 100644 index 0000000..850a90d --- /dev/null +++ b/src/test/resources/errata-responses/rpm/example-advisory-1/157548_errata.json @@ -0,0 +1,597 @@ +{ + "who": { + "user": { + "id": 9999999, + "login_name": "anonymized-user@example.com", + "realname": "Anonymized User", + "user_organization_id": 999, + "enabled": 1, + "receives_mail": true, + "preferences": {}, + "email_address": "anonymized-user@example.com", + "account_name": "anonymized-user", + "type": "KerberosPrincipal" + }, + "kerberos_principal_owner": { + "name": "anonymized-service@example.com", + "description": "Anonymized service account" + } + }, + "params": { + "id": 157548 + }, + "errata": { + "rhsa": { + "id": 157548, + "revision": 5, + "fulladvisory": "RHSA-2026:0001-05", + "issue_date": "2026-01-05T00:37:50Z", + "update_date": "2026-01-05T00:37:50Z", + "release_date": null, + "synopsis": "Important: spice-client-win security update", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 0, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "Important", + "product_id": 16, + "is_brew": 1, + "status_updated_at": "2026-01-05T00:51:17Z", + "group_id": 2516, + "created_at": "2025-12-24T13:51:51Z", + "updated_at": "2026-01-05T18:05:00Z", + "respin_count": 0, + "old_advisory": "RHSA-2025:157548-05", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 122, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 953214, + "text_only": false, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2026-01-05T00:51:17Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [ + "rpm" + ], + "embargo_undated": false, + "security_sla": "2025-08-05T00:00:00Z", + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": null, + "builds_updated_at": "2025-12-24T13:52:07Z", + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 1, + "fulltype": "Red Hat Security Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": null, + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 16, + "name": "Red Hat Enterprise Linux", + "short_name": "RHEL" + } + } + }, + "original_type": "RHSA", + "content": { + "content": { + "id": 155128, + "errata_id": 157548, + "topic": "An update for spice-client-win is now available for Red Hat Enterprise Linux 8.8 Update Services for SAP Solutions and Red Hat Enterprise Linux 8.8 Telecommunications Update Service.\n\nRed Hat Product Security has rated this update as having a security impact of Important. A Common Vulnerability Scoring System (CVSS) base score, which gives a detailed severity rating, is available for each vulnerability from the CVE link(s) in the References section.", + "description": "Spice client MSI installers for Windows clients\n\nSecurity Fix(es):\n\n* sqlite: Integer Truncation in SQLite (CVE-XXXX-XXXXX)\n\n* libtiff: LibTIFF Use-After-Free Vulnerability (CVE-XXXX-XXXXX)\n\n* libtiff: Libtiff Write-What-Where (CVE-XXXX-XXXXX)\n\n* expat: libexpat in Expat allows attackers to trigger large dynamic memory allocations via a small document that is submitted for parsing (CVE-XXXX-XXXXX)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.", + "solution": "For details on how to apply this update, which includes the changes described in this advisory, refer to:\n\nhttps://access.redhat.com/articles/11258", + "keywords": "", + "cve": "CVE-XXXX-XXXXX CVE-XXXX-XXXXX CVE-XXXX-XXXXX CVE-XXXX-XXXXX", + "crossref": "", + "reference": "https://access.redhat.com/security/updates/classification/#important", + "how_to_test": null, + "doc_reviewer_id": 9999995, + "updated_at": "2025-12-29T19:00:24Z", + "revision_count": 1, + "doc_review_due_at": null, + "text_only_cpe": null, + "product_version_text": "", + "product_security_reviewer_id": null + } + }, + "diffs": {}, + "is_embargoed": false, + "bugs": { + "errata": { + "rhsa": { + "id": 157548, + "revision": 5, + "fulladvisory": "RHSA-2026:0001-05", + "issue_date": "2026-01-05T00:37:50Z", + "update_date": "2026-01-05T00:37:50Z", + "release_date": null, + "synopsis": "Important: spice-client-win security update", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 0, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "Important", + "product_id": 16, + "is_brew": 1, + "status_updated_at": "2026-01-05T00:51:17Z", + "group_id": 2516, + "created_at": "2025-12-24T13:51:51Z", + "updated_at": "2026-01-05T18:05:00Z", + "respin_count": 0, + "old_advisory": "RHSA-2025:157548-05", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 122, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 953214, + "text_only": false, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2026-01-05T00:51:17Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [ + "rpm" + ], + "embargo_undated": false, + "security_sla": "2025-08-05T00:00:00Z", + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": null, + "builds_updated_at": "2025-12-24T13:52:07Z", + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 1, + "fulltype": "Red Hat Security Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": null, + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 16, + "name": "Red Hat Enterprise Linux", + "short_name": "RHEL" + } + } + }, + "idsfixed": [ + "2380149", + "2383598", + "2392784", + "2395108" + ], + "to_fetch": [], + "id_field": "id", + "id_prefix": "bz:", + "type": "bugs", + "bugs": [ + { + "bug": { + "id": 2380149, + "bug_status": "NEW", + "short_desc": "CVE-XXXX-XXXXX sqlite: Integer Truncation in SQLite", + "package_id": 1520, + "is_private": 0, + "last_updated": "2026-01-05T18:04:49Z", + "is_security": 1, + "alias": "CVE-XXXX-XXXXX", + "was_marked_on_qa": 0, + "priority": "high", + "bug_severity": "high", + "qa_whiteboard": "", + "keywords": "Security", + "issuetrackers": "", + "pm_score": 0, + "is_blocker": 0, + "is_exception": 0, + "flags": "requires_doc_text+", + "release_notes": "", + "reconciled_at": "2026-01-05T18:04:58Z", + "verified": "", + "has_security_group": false, + "internal_target_release": "", + "approved_release": "", + "zstream_target_release": "", + "product": "Security Response", + "sla_date": null, + "is_embargoed": false + } + }, + { + "bug": { + "id": 2383598, + "bug_status": "NEW", + "short_desc": "CVE-XXXX-XXXXX libtiff: LibTIFF Use-After-Free Vulnerability", + "package_id": 1520, + "is_private": 0, + "last_updated": "2026-01-05T18:04:48Z", + "is_security": 1, + "alias": "CVE-XXXX-XXXXX", + "was_marked_on_qa": 0, + "priority": "high", + "bug_severity": "high", + "qa_whiteboard": "", + "keywords": "Security", + "issuetrackers": "", + "pm_score": 0, + "is_blocker": 0, + "is_exception": 0, + "flags": "requires_doc_text+", + "release_notes": "", + "reconciled_at": "2026-01-05T18:04:57Z", + "verified": "", + "has_security_group": false, + "internal_target_release": "", + "approved_release": "", + "zstream_target_release": "", + "product": "Security Response", + "sla_date": null, + "is_embargoed": false + } + }, + { + "bug": { + "id": 2392784, + "bug_status": "NEW", + "short_desc": "CVE-XXXX-XXXXX libtiff: Libtiff Write-What-Where", + "package_id": 1520, + "is_private": 0, + "last_updated": "2026-01-05T18:04:51Z", + "is_security": 1, + "alias": "CVE-XXXX-XXXXX", + "was_marked_on_qa": 0, + "priority": "high", + "bug_severity": "high", + "qa_whiteboard": "", + "keywords": "Security", + "issuetrackers": "", + "pm_score": 0, + "is_blocker": 0, + "is_exception": 0, + "flags": "requires_doc_text+", + "release_notes": "", + "reconciled_at": "2026-01-05T18:04:59Z", + "verified": "", + "has_security_group": false, + "internal_target_release": "", + "approved_release": "", + "zstream_target_release": "", + "product": "Security Response", + "sla_date": null, + "is_embargoed": false + } + }, + { + "bug": { + "id": 2395108, + "bug_status": "NEW", + "short_desc": "CVE-XXXX-XXXXX expat: libexpat in Expat allows attackers to trigger large dynamic memory allocations via a small document that is submitted for parsing", + "package_id": 1520, + "is_private": 0, + "last_updated": "2026-01-05T18:04:54Z", + "is_security": 1, + "alias": "CVE-XXXX-XXXXX", + "was_marked_on_qa": 0, + "priority": "high", + "bug_severity": "high", + "qa_whiteboard": "", + "keywords": "Security", + "issuetrackers": "", + "pm_score": 0, + "is_blocker": 0, + "is_exception": 0, + "flags": "requires_doc_text+", + "release_notes": "", + "reconciled_at": "2026-01-05T18:05:00Z", + "verified": "", + "has_security_group": false, + "internal_target_release": "", + "approved_release": "", + "zstream_target_release": "", + "product": "Security Response", + "sla_date": null, + "is_embargoed": false + } + } + ] + }, + "jira_issues": { + "errata": { + "rhsa": { + "id": 157548, + "revision": 5, + "fulladvisory": "RHSA-2026:0001-05", + "issue_date": "2026-01-05T00:37:50Z", + "update_date": "2026-01-05T00:37:50Z", + "release_date": null, + "synopsis": "Important: spice-client-win security update", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 0, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "Important", + "product_id": 16, + "is_brew": 1, + "status_updated_at": "2026-01-05T00:51:17Z", + "group_id": 2516, + "created_at": "2025-12-24T13:51:51Z", + "updated_at": "2026-01-05T18:05:00Z", + "respin_count": 0, + "old_advisory": "RHSA-2025:157548-05", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 122, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 953214, + "text_only": false, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2026-01-05T00:51:17Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [ + "rpm" + ], + "embargo_undated": false, + "security_sla": "2025-08-05T00:00:00Z", + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": null, + "builds_updated_at": "2025-12-24T13:52:07Z", + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 1, + "fulltype": "Red Hat Security Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": null, + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 16, + "name": "Red Hat Enterprise Linux", + "short_name": "RHEL" + } + } + }, + "idsfixed": [ + "RHEL-114624", + "RHEL-112539", + "RHEL-103829", + "RHEL-120237" + ], + "to_fetch": [], + "id_field": "key", + "id_prefix": "jira:", + "type": "jira_issues", + "jira_issues": [ + { + "jira_issue": { + "id": 4401341, + "id_jira": 17146321, + "key": "RHEL-103829", + "summary": "CVE-XXXX-XXXXX mingw-sqlite: Integer Truncation in SQLite [rhel-8.8.0.z]", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2026-01-05T00:47:50Z", + "labels": [ + "CVE-XXXX-XXXXX", + "Security", + "SecurityTracking", + "flaw:bz#2380149", + "flawuuid:f5bafa18-e7d3-4992-bcde-17a404f64dd5", + "pscomponent:mingw-sqlite" + ], + "priority": "Undefined", + "sla_date": "2025-08-05", + "release_notes_text": null, + "issue_type": "Vulnerability", + "is_private": true, + "created": null, + "created_at": "2025-11-26T10:17:16Z", + "updated_at": "2026-01-05T00:49:07Z", + "supports_next_planned_release_date": true, + "supports_release_date": true, + "supports_errata_link": true + } + }, + { + "jira_issue": { + "id": 4399208, + "id_jira": 17356982, + "key": "RHEL-112539", + "summary": "CVE-XXXX-XXXXX mingw-libtiff: Libtiff Write-What-Where [rhel-8.8.0.z]", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2026-01-05T00:47:45Z", + "labels": [ + "CVE-XXXX-XXXXX", + "Security", + "SecurityTracking", + "flaw:bz#2392784", + "flawuuid:16a3e790-5edf-4f3a-8b7f-2e70d00826c4", + "pscomponent:mingw-libtiff" + ], + "priority": "Undefined", + "sla_date": "2025-10-13", + "release_notes_text": null, + "issue_type": "Vulnerability", + "is_private": true, + "created": null, + "created_at": "2025-11-25T02:44:16Z", + "updated_at": "2026-01-05T00:47:48Z", + "supports_next_planned_release_date": true, + "supports_release_date": true, + "supports_errata_link": true + } + }, + { + "jira_issue": { + "id": 4399205, + "id_jira": 17389279, + "key": "RHEL-114624", + "summary": "CVE-XXXX-XXXXX mingw-expat: libexpat in Expat allows attackers to trigger large dynamic memory allocations via a small document that is submitted for parsing [rhel-8.8.0.z]", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2026-01-05T00:47:42Z", + "labels": [ + "CVE-XXXX-XXXXX", + "Security", + "SecurityTracking", + "flaw:bz#2395108", + "flawuuid:77b5b0a3-4431-4ed8-88f5-7fe3f30e3df8", + "pscomponent:mingw-expat" + ], + "priority": "Undefined", + "sla_date": "2025-10-13", + "release_notes_text": null, + "issue_type": "Vulnerability", + "is_private": true, + "created": null, + "created_at": "2025-11-25T02:42:15Z", + "updated_at": "2026-01-05T00:47:48Z", + "supports_next_planned_release_date": true, + "supports_release_date": true, + "supports_errata_link": true + } + }, + { + "jira_issue": { + "id": 4401393, + "id_jira": 17462647, + "key": "RHEL-120237", + "summary": "CVE-XXXX-XXXXX mingw-libtiff: LibTIFF Use-After-Free Vulnerability [rhel-8.8.0.z]", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2026-01-05T00:47:54Z", + "labels": [ + "CVE-XXXX-XXXXX", + "Security", + "SecurityTracking", + "TestOnly", + "flaw:bz#2383598", + "flawuuid:60f8f737-7c2d-46e2-b0fd-a5456e1e6e4b", + "pscomponent:mingw-libtiff" + ], + "priority": "Undefined", + "sla_date": "2025-11-06", + "release_notes_text": null, + "issue_type": "Vulnerability", + "is_private": true, + "created": null, + "created_at": "2025-11-26T12:06:09Z", + "updated_at": "2026-01-05T00:49:07Z", + "supports_next_planned_release_date": true, + "supports_release_date": true, + "supports_errata_link": true + } + } + ] + } +} diff --git a/src/test/resources/errata-responses/textonly/example-advisory-1/155577_builds.json b/src/test/resources/errata-responses/textonly/example-advisory-1/155577_builds.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/test/resources/errata-responses/textonly/example-advisory-1/155577_builds.json @@ -0,0 +1 @@ +{} diff --git a/src/test/resources/errata-responses/textonly/example-advisory-1/155577_errata.json b/src/test/resources/errata-responses/textonly/example-advisory-1/155577_errata.json new file mode 100644 index 0000000..3d60330 --- /dev/null +++ b/src/test/resources/errata-responses/textonly/example-advisory-1/155577_errata.json @@ -0,0 +1,393 @@ +{ + "who": { + "user": { + "id": 9999999, + "login_name": "anonymized-user@example.com", + "realname": "Anonymized User", + "user_organization_id": 999, + "enabled": 1, + "receives_mail": true, + "preferences": {}, + "email_address": "anonymized-user@example.com", + "account_name": "anonymized-user", + "type": "KerberosPrincipal" + }, + "kerberos_principal_owner": { + "name": "anonymized-service@example.com", + "description": "Anonymized service account" + } + }, + "params": { + "id": 155577 + }, + "errata": { + "rhsa": { + "id": 155577, + "revision": 2, + "fulladvisory": "RHSA-2025:20057-02", + "issue_date": "2025-11-10T20:46:14Z", + "update_date": "2025-11-10T20:46:14Z", + "release_date": null, + "synopsis": "Important: Red Hat JBoss Enterprise Application Platform 7.4.23 security update", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 1, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "Important", + "product_id": 41, + "is_brew": 1, + "status_updated_at": "2025-11-10T20:47:44Z", + "group_id": 649, + "created_at": "2025-10-28T12:56:21Z", + "updated_at": "2026-01-03T08:31:18Z", + "respin_count": 0, + "old_advisory": "RHSA-2025:155577-02", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 2, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 942540, + "text_only": true, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2025-11-10T20:47:44Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [], + "embargo_undated": false, + "security_sla": null, + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": null, + "builds_updated_at": null, + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 20057, + "fulltype": "Red Hat Security Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": null, + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 41, + "name": "Red Hat JBoss Enterprise Application Platform", + "short_name": "JBEAP" + } + } + }, + "original_type": "RHSA", + "content": { + "content": { + "id": 153157, + "errata_id": 155577, + "topic": "A security update is now available for Red Hat JBoss Enterprise Application Platform 7.4.\n\nRed Hat Product Security has rated this update as having a security impact of Important. A Common Vulnerability Scoring System (CVSS) base score, which gives a detailed severity rating, is available for each vulnerability from the CVE link(s) in the References section.", + "description": "Red Hat JBoss Enterprise Application Platform 7 is a platform for Java applications based on the WildFly application runtime.\n\nThis asynchronous patch is a security update for Red Hat JBoss Enterprise Application Platform 7.4.\n\nSecurity Fix(es):\n\n* com.google.protobuf/protobuf-java: StackOverflow vulnerability in Protocol Buffers (CVE-XXXX-XXXXX)\n\nA Red Hat Security Bulletin which addresses further details about this flaw is available in the References section.\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgements, and other related information, refer to the CVE page(s) listed in the References section.", + "solution": "Before applying the update, make sure all previously released errata relevant to your system have been applied. Also, back up your existing installation, including all applications, configuration files, databases and database settings. For details on how to apply this update, refer to:\nhttps://access.redhat.com/articles/11258", + "keywords": "", + "cve": "CVE-XXXX-XXXXX", + "crossref": "", + "reference": "https://access.redhat.com/security/updates/classification/#important\nhttps://docs.redhat.com/en/documentation/red_hat_jboss_enterprise_application_platform/7.4\nhttps://docs.redhat.com/en/documentation/red_hat_jboss_enterprise_application_platform/7.4/html-single/installation_guide/index", + "how_to_test": "{\r\n \"manifest\": {\r\n \"refs\": [\r\n {\r\n \"type\": \"purl\",\r\n \"uri\": \"pkg:generic/jboss-eap-7.4.23-runtime-maven-repository.zip\"\r\n }\r\n ]\r\n }\r\n}\r\n[INFO] Adding label mw_manifest_present\r\n", + "doc_reviewer_id": 9999995, + "updated_at": "2025-11-10T17:20:35Z", + "revision_count": 1, + "doc_review_due_at": null, + "text_only_cpe": "cpe:/a:redhat:jboss_enterprise_application_platform:7.4", + "product_version_text": "Red Hat JBoss Enterprise Application Platform 7", + "product_security_reviewer_id": null + } + }, + "diffs": {}, + "is_embargoed": false, + "bugs": { + "errata": { + "rhsa": { + "id": 155577, + "revision": 2, + "fulladvisory": "RHSA-2025:20057-02", + "issue_date": "2025-11-10T20:46:14Z", + "update_date": "2025-11-10T20:46:14Z", + "release_date": null, + "synopsis": "Important: Red Hat JBoss Enterprise Application Platform 7.4.23 security update", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 1, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "Important", + "product_id": 41, + "is_brew": 1, + "status_updated_at": "2025-11-10T20:47:44Z", + "group_id": 649, + "created_at": "2025-10-28T12:56:21Z", + "updated_at": "2026-01-03T08:31:18Z", + "respin_count": 0, + "old_advisory": "RHSA-2025:155577-02", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 2, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 942540, + "text_only": true, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2025-11-10T20:47:44Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [], + "embargo_undated": false, + "security_sla": null, + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": null, + "builds_updated_at": null, + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 20057, + "fulltype": "Red Hat Security Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": null, + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 41, + "name": "Red Hat JBoss Enterprise Application Platform", + "short_name": "JBEAP" + } + } + }, + "idsfixed": [ + "2313454" + ], + "to_fetch": [], + "id_field": "id", + "id_prefix": "bz:", + "type": "bugs", + "bugs": [ + { + "bug": { + "id": 2313454, + "bug_status": "NEW", + "short_desc": "CVE-XXXX-XXXXX protobuf: StackOverflow vulnerability in Protocol Buffers", + "package_id": 1520, + "is_private": 0, + "last_updated": "2026-01-03T08:29:19Z", + "is_security": 1, + "alias": "CVE-XXXX-XXXXX", + "was_marked_on_qa": 0, + "priority": "high", + "bug_severity": "high", + "qa_whiteboard": "", + "keywords": "Security", + "issuetrackers": "", + "pm_score": 0, + "is_blocker": 0, + "is_exception": 0, + "flags": "requires_doc_text+", + "release_notes": "", + "reconciled_at": "2026-01-03T08:31:18Z", + "verified": "", + "has_security_group": false, + "internal_target_release": "", + "approved_release": "", + "zstream_target_release": "", + "product": "Security Response", + "sla_date": null, + "is_embargoed": false + } + } + ] + }, + "jira_issues": { + "errata": { + "rhsa": { + "id": 155577, + "revision": 2, + "fulladvisory": "RHSA-2025:20057-02", + "issue_date": "2025-11-10T20:46:14Z", + "update_date": "2025-11-10T20:46:14Z", + "release_date": null, + "synopsis": "Important: Red Hat JBoss Enterprise Application Platform 7.4.23 security update", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 1, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "Important", + "product_id": 41, + "is_brew": 1, + "status_updated_at": "2025-11-10T20:47:44Z", + "group_id": 649, + "created_at": "2025-10-28T12:56:21Z", + "updated_at": "2026-01-03T08:31:18Z", + "respin_count": 0, + "old_advisory": "RHSA-2025:155577-02", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 2, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 942540, + "text_only": true, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2025-11-10T20:47:44Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [], + "embargo_undated": false, + "security_sla": null, + "cloned_from_id": null, + "is_followup": false, + "expected_publish_date": null, + "builds_updated_at": null, + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 20057, + "fulltype": "Red Hat Security Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": null, + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [], + "product": { + "id": 41, + "name": "Red Hat JBoss Enterprise Application Platform", + "short_name": "JBEAP" + } + } + }, + "idsfixed": [ + "JBEAP-31370" + ], + "to_fetch": [], + "id_field": "key", + "id_prefix": "jira:", + "type": "jira_issues", + "jira_issues": [ + { + "jira_issue": { + "id": 4376407, + "id_jira": 17514606, + "key": "JBEAP-31370", + "summary": "[PST](7.4.23 patch) CVE-XXXX-XXXXX com.google.protobuf/protobuf-java: StackOverflow vulnerability in Protocol Buffers", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-11-10T20:47:48Z", + "labels": [ + "CVE-XXXX-XXXXX" + ], + "priority": "Major", + "sla_date": null, + "release_notes_text": null, + "issue_type": "Support Patch", + "is_private": true, + "created": null, + "created_at": "2025-10-28T03:04:25Z", + "updated_at": "2025-11-10T20:48:43Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + } + ] + } +} diff --git a/src/test/resources/errata-responses/textonly/example-advisory-2/157587_builds.json b/src/test/resources/errata-responses/textonly/example-advisory-2/157587_builds.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/test/resources/errata-responses/textonly/example-advisory-2/157587_builds.json @@ -0,0 +1 @@ +{} diff --git a/src/test/resources/errata-responses/textonly/example-advisory-2/157587_errata.json b/src/test/resources/errata-responses/textonly/example-advisory-2/157587_errata.json new file mode 100644 index 0000000..3464383 --- /dev/null +++ b/src/test/resources/errata-responses/textonly/example-advisory-2/157587_errata.json @@ -0,0 +1,402 @@ +{ + "who": { + "user": { + "id": 9999999, + "login_name": "anonymized-user@example.com", + "realname": "Anonymized User", + "user_organization_id": 999, + "enabled": 1, + "receives_mail": true, + "preferences": {}, + "email_address": "anonymized-user@example.com", + "account_name": "anonymized-user", + "type": "KerberosPrincipal" + }, + "kerberos_principal_owner": { + "name": "anonymized-service@example.com", + "description": "Anonymized service account" + } + }, + "params": { + "id": 157587 + }, + "errata": { + "rhsa": { + "id": 157587, + "revision": 1, + "fulladvisory": "RHSA-2026:0131-01", + "issue_date": "2026-01-06T13:04:59Z", + "update_date": "2026-01-06T13:04:59Z", + "release_date": null, + "synopsis": "Important: Red Hat build of Quarkus 3.20.4.SP1 security update", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 1, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "Important", + "product_id": 153, + "is_brew": 1, + "status_updated_at": "2026-01-06T13:12:23Z", + "group_id": 1245, + "created_at": "2026-01-01T09:48:38Z", + "updated_at": "2026-01-06T13:14:41Z", + "respin_count": 0, + "old_advisory": "RHSA-2026:157587-01", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 2, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 953659, + "text_only": true, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2026-01-06T13:12:23Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [], + "embargo_undated": false, + "security_sla": "2026-01-12T00:00:00Z", + "cloned_from_id": 157518, + "is_followup": false, + "expected_publish_date": null, + "builds_updated_at": null, + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 131, + "fulltype": "Red Hat Security Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": null, + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [ + "mw_manifest_present" + ], + "product": { + "id": 153, + "name": "Red Hat build of Quarkus", + "short_name": "RHBQ" + } + } + }, + "original_type": "RHSA", + "content": { + "content": { + "id": 155167, + "errata_id": 157587, + "topic": "An update is now available for Red Hat build of Quarkus.\n\nRed Hat Product Security has rated this update as having a security impact of Important. A Common Vulnerability Scoring System (CVSS) base score, which gives a detailed severity rating, is available for each vulnerability. For more information, see the CVE links in the References section.", + "description": "This release of Red Hat build of Quarkus 3.20.4.SP1 includes the following CVE fixes:\n\n* lz4-java: lz4-java: Information Disclosure via Insufficient Output Buffer Clearing [quarkus-3.20] (CVE-XXXX-XXXXX)\n\n* lz4-java: lz4-java: Out-of-bounds memory operations lead to denial of service and information disclosure [quarkus-3.20] (CVE-XXXX-XXXXX)\n\nFor more information, see the release notes page listed in the References section.", + "solution": "Before applying this update, make sure all previously released errata\nrelevant to your system have been applied.\n\nFor details on how to apply this update, refer to:\n\nhttps://access.redhat.com/articles/11258", + "keywords": "", + "cve": "CVE-XXXX-XXXXX CVE-XXXX-XXXXX", + "crossref": "", + "reference": "https://access.redhat.com/security/updates/classification/#important\nhttps://access.redhat.com/products/quarkus/\nhttps://access.redhat.com/jbossnetwork/restricted/listSoftware.html?product=redhat.quarkus&downloadType=distributions&version=3.20.4.SP1\nhttps://docs.redhat.com/en/documentation/red_hat_build_of_quarkus/3.20", + "how_to_test": "{\n \"manifest\": {\n \"refs\": [\n {\n \"type\": \"purl\",\n \"uri\": \"pkg:maven/com.redhat.quarkus.platform/quarkus-bom@3.20.4.SP1-redhat-00001?repository_url=https://maven.repository.redhat.com/ga/&type=pom\"\n }\n ]\n }\n}", + "doc_reviewer_id": 9999995, + "updated_at": "2026-01-06T10:49:09Z", + "revision_count": 1, + "doc_review_due_at": null, + "text_only_cpe": "cpe:/a:redhat:quarkus:3.20::el8", + "product_version_text": "Red Hat build of Quarkus 3.20.4.SP1", + "product_security_reviewer_id": null + } + }, + "diffs": {}, + "is_embargoed": false, + "bugs": { + "errata": { + "rhsa": { + "id": 157587, + "revision": 1, + "fulladvisory": "RHSA-2026:0131-01", + "issue_date": "2026-01-06T13:04:59Z", + "update_date": "2026-01-06T13:04:59Z", + "release_date": null, + "synopsis": "Important: Red Hat build of Quarkus 3.20.4.SP1 security update", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 1, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "Important", + "product_id": 153, + "is_brew": 1, + "status_updated_at": "2026-01-06T13:12:23Z", + "group_id": 1245, + "created_at": "2026-01-01T09:48:38Z", + "updated_at": "2026-01-06T13:14:41Z", + "respin_count": 0, + "old_advisory": "RHSA-2026:157587-01", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 2, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 953659, + "text_only": true, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2026-01-06T13:12:23Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [], + "embargo_undated": false, + "security_sla": "2026-01-12T00:00:00Z", + "cloned_from_id": 157518, + "is_followup": false, + "expected_publish_date": null, + "builds_updated_at": null, + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 131, + "fulltype": "Red Hat Security Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": null, + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [ + "mw_manifest_present" + ], + "product": { + "id": 153, + "name": "Red Hat build of Quarkus", + "short_name": "RHBQ" + } + } + }, + "idsfixed": [], + "to_fetch": [], + "id_field": "id", + "id_prefix": "bz:", + "type": "bugs", + "bugs": [] + }, + "jira_issues": { + "errata": { + "rhsa": { + "id": 157587, + "revision": 1, + "fulladvisory": "RHSA-2026:0131-01", + "issue_date": "2026-01-06T13:04:59Z", + "update_date": "2026-01-06T13:04:59Z", + "release_date": null, + "synopsis": "Important: Red Hat build of Quarkus 3.20.4.SP1 security update", + "pushed": 0, + "published": 1, + "deleted": 0, + "qa_complete": 1, + "status": "SHIPPED_LIVE", + "resolution": "", + "reporter_id": 9999991, + "assigned_to_id": 9999992, + "old_delete_product": null, + "severity": "normal", + "priority": "normal", + "rhn_complete": 0, + "request": 0, + "doc_complete": 1, + "rhnqa": 1, + "closed": 1, + "contract": null, + "pushcount": 1, + "text_ready": 0, + "package_owner_id": 9999993, + "manager_id": 9999994, + "rhnqa_shadow": 0, + "published_shadow": 0, + "current_tps_run": null, + "filelist_locked": 0, + "filelist_changed": 0, + "sign_requested": 0, + "security_impact": "Important", + "product_id": 153, + "is_brew": 1, + "status_updated_at": "2026-01-06T13:12:23Z", + "group_id": 1245, + "created_at": "2026-01-01T09:48:38Z", + "updated_at": "2026-01-06T13:14:41Z", + "respin_count": 0, + "old_advisory": "RHSA-2026:157587-01", + "rating": 0, + "docs_responsibility_id": 1, + "quality_responsibility_id": 2, + "devel_responsibility_id": 3, + "is_valid": 1, + "current_state_index_id": 953659, + "text_only": true, + "publish_date_override": null, + "state_machine_rule_set_id": null, + "actual_ship_date": "2026-01-06T13:12:23Z", + "supports_multiple_product_destinations": false, + "security_approved": null, + "batch_id": null, + "is_batch_blocker": false, + "request_rcm_push_comment_id": null, + "content_types": [], + "embargo_undated": false, + "security_sla": "2026-01-12T00:00:00Z", + "cloned_from_id": 157518, + "is_followup": false, + "expected_publish_date": null, + "builds_updated_at": null, + "cve_mapping_validation_complete": null, + "prevent_auto_push_ready": false, + "suppress_push_request_jira": false, + "lower_grade_approved": false, + "blocking_advisories": [], + "dependent_advisories": [], + "embargo_date": null, + "errata_id": 131, + "fulltype": "Red Hat Security Advisory", + "is_operator_hotfix": false, + "is_operator_prerelease": false, + "publish_date": null, + "reboot_suggested": 0, + "skip_customer_notifications": false, + "labels": [ + "mw_manifest_present" + ], + "product": { + "id": 153, + "name": "Red Hat build of Quarkus", + "short_name": "RHBQ" + } + } + }, + "idsfixed": [ + "QUARKUS-6974", + "QUARKUS-6976" + ], + "to_fetch": [], + "id_field": "key", + "id_prefix": "jira:", + "type": "jira_issues", + "jira_issues": [ + { + "jira_issue": { + "id": 4423696, + "id_jira": 17666393, + "key": "QUARKUS-6974", + "summary": "CVE-XXXX-XXXXX lz4-java: lz4-java: Information Disclosure via Insufficient Output Buffer Clearing [quarkus-3.20]", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-12-29T14:00:02Z", + "labels": [ + "CVE-XXXX-XXXXX", + "Security", + "SecurityTracking", + "cve-ts", + "flaw:bz#2419500", + "flawuuid:74e769e6-895a-4924-976e-bdc395a64467", + "pscomponent:lz4-java" + ], + "priority": "Major", + "sla_date": "2026-01-12", + "release_notes_text": null, + "issue_type": "Vulnerability", + "is_private": true, + "created": null, + "created_at": "2026-01-01T11:12:25Z", + "updated_at": "2026-01-06T13:12:25Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + }, + { + "jira_issue": { + "id": 4423695, + "id_jira": 17666561, + "key": "QUARKUS-6976", + "summary": "CVE-XXXX-XXXXX lz4-java: lz4-java: Out-of-bounds memory operations lead to denial of service and information disclosure [quarkus-3.20]", + "status": "Closed", + "jira_security_level_id": 36, + "updated": "2025-12-29T14:00:54Z", + "labels": [ + "CVE-XXXX-XXXXX", + "Security", + "SecurityTracking", + "cve-ts", + "flaw:bz#2417718", + "flawuuid:6388e0ea-97ed-4b53-a7ae-259c07493089", + "pscomponent:lz4-java" + ], + "priority": "Major", + "sla_date": "2026-02-07", + "release_notes_text": null, + "issue_type": "Vulnerability", + "is_private": true, + "created": null, + "created_at": "2026-01-01T11:12:25Z", + "updated_at": "2026-01-06T13:12:26Z", + "supports_next_planned_release_date": false, + "supports_release_date": false, + "supports_errata_link": false + } + } + ] + } +}