Commit 2c0b9210 authored by Vasilis Katopodis's avatar Vasilis Katopodis
Browse files

feat: read serviceId from the top level of registry requests

parent 16dd07a7
Loading
Loading
Loading
Loading
Loading
+2 −0
Changes for src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/KafkaRequestPayload.java: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -17,5 +17,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
public interface KafkaRequestPayload {
    String getType();

    String getServiceId();

    String toStringAsJson();
}
+1 −0
Changes for src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/KubeConfigRequest.java: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ public class KubeConfigRequest implements KafkaRequestPayload {
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String type;

    private String serviceId;
    private JsonNode serviceOperationRequest;
    private String kubernetesServiceID;
    private List<String> secretNames;
+1 −0
Changes for src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/RegistryURLRequest.java: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ public class RegistryURLRequest implements KafkaRequestPayload {
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String type;

    private String serviceId;
    private JsonNode serviceOrderRequest;
    private String url;
    private String schedulerNamespace;
+18 −13
Changes for src/main/java/org/etsi/osl/hypo/registry/service/RegistryService.java: 18 added lines, 13 removed lines.
Original line number Diff line number Diff line
@@ -5,8 +5,6 @@ import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstan
import static org.etsi.osl.hypo.registry.config.ApplicationProperties.REGISTRY_ORGANIZATION_GET_CREDENTIALS_RESULT;
import static org.etsi.osl.hypo.registry.config.ApplicationProperties.UNKNOWN;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.MissingNode;
import io.smallrye.mutiny.Uni;
import io.smallrye.reactive.messaging.kafka.api.IncomingKafkaRecordMetadata;
import jakarta.enterprise.context.ApplicationScoped;
@@ -77,6 +75,8 @@ public class RegistryService {
    // Vault key for fetching Kubernetes configuration data.
    public static final String KUBE_CONFIG_KEY = "kubeConfig";
    private static final String SCHEDULER_NAMESPACE_KEY = "schedulerNamespace";
    static final String MISSING_SERVICE_ID_MESSAGE =
            "Invalid request: missing required top-level field 'serviceId'";
    public static final String S_WITH_ERROR_MESSAGE_S = " %s with error message: %s";

    private final VaultService vaultService;
@@ -122,7 +122,7 @@ public class RegistryService {
    public PackageRegistrySecretResponseMessage getPackageRegistrySecretResponseMessage(
            RegistryURLRequest request, String keycloakTokenStr) {

        String serviceID = serviceIdOf(request);
        String serviceID = requireServiceId(request);
        logger.infof("Processing package registry secret request for ServiceID: %s", serviceID);

        String rawUrl = request.getUrl();
@@ -169,7 +169,7 @@ public class RegistryService {
    public KubeConfigResponseMessage getDeploymentKubeConfigResponseMessage(
            KubeConfigRequest request, String keycloakTokenStr) {

        String serviceID = serviceIdOf(request);
        String serviceID = requireServiceId(request);
        logger.infof("Processing deployment kubeconfig request for ServiceID: %s", serviceID);

        String group = tokenService.getGroup(keycloakTokenStr);
@@ -217,7 +217,7 @@ public class RegistryService {
    private KubeConfigResponseMessage activationOrTermination(
            KubeConfigRequest request, String vaultToken, String group) {

        String serviceID = serviceIdOf(request);
        String serviceID = requireServiceId(request);
        logger.infof(
                "Processing activation/termination kubeconfig request for ServiceID: %s", serviceID);

@@ -1044,6 +1044,8 @@ public class RegistryService {
        String type = payload.getType();

        logger.debugf("Dispatching payload type '%s' to RegistryService routing", type);
        // Fail before any auth or Vault work when the request cannot be tied to a service.
        requireServiceId(payload);

        switch (type) {
            case "parsing":
@@ -1108,15 +1110,18 @@ public class RegistryService {
        return serviceId;
    }

    private static String requireServiceId(KafkaRequestPayload payload) {
        String serviceId = serviceIdOf(payload);
        if (serviceId == null) {
            throw new IllegalArgumentException(MISSING_SERVICE_ID_MESSAGE);
        }
        return serviceId;
    }

    private static String serviceIdOf(KafkaRequestPayload payload) {
        JsonNode serviceId = MissingNode.getInstance();
        if (payload instanceof RegistryURLRequest request && request.getServiceOrderRequest() != null) {
            serviceId = request.getServiceOrderRequest().at("/serviceOrder/serviceId");
        } else if (payload instanceof KubeConfigRequest request
                && request.getServiceOperationRequest() != null) {
            serviceId = request.getServiceOperationRequest().at("/serviceId");
        }
        return serviceId.isValueNode() && !serviceId.isNull() ? serviceId.asText() : null;
        return payload != null && StringUtils.isNotBlank(payload.getServiceId())
                ? payload.getServiceId()
                : null;
    }

    private Headers extractKafkaHeaders(Message<?> message) {
+2 −1
Changes for src/test/java/org/etsi/osl/hypo/registry/kafka/incoming/RegistrySecretsKafkaListenerTest.java: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -282,10 +282,11 @@ public class RegistrySecretsKafkaListenerTest {
    void shouldDeserializeRegistryURLRequestFromJson() throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        String json =
                "{\"type\":\"parsing\",\"serviceOrderRequest\":{\"serviceOrder\":{\"serviceId\":\"123\"}},\"url\":\"myrepo\"}";
                "{\"type\":\"parsing\",\"serviceId\":\"123\",\"serviceOrderRequest\":{\"serviceOrder\":{\"serviceId\":\"123\"}},\"url\":\"myrepo\"}";
        KafkaRequestPayload payload = mapper.readValue(json, KafkaRequestPayload.class);
        assertThat(payload).isInstanceOf(RegistryURLRequest.class);
        assertThat(payload.getType()).isNotBlank().isEqualTo("parsing");
        assertThat(payload.getServiceId()).isEqualTo("123");
    }

    @Test
Loading