From 1d97fba933db4b6e7f9c85b9a6ad524ca2771a63 Mon Sep 17 00:00:00 2001 From: Roman Romanov Date: Wed, 28 Jan 2026 16:44:33 +0500 Subject: [PATCH 1/2] feat: support CLOUD_PUBLIC_HOST from CloudPassport and related classes for monitoring URL configuration --- .../java/org/qubership/colly/CloudPassportLoader.java | 4 ++-- .../src/main/java/org/qubership/colly/CollyStorage.java | 1 + .../src/main/java/org/qubership/colly/DtoMapper.java | 1 + .../org/qubership/colly/cloudpassport/CloudPassport.java | 2 +- .../qubership/colly/cloudpassport/envgen/CloudData.java | 2 ++ .../main/java/org/qubership/colly/db/data/Cluster.java | 1 + .../org/qubership/colly/dto/InternalClusterInfoDto.java | 6 ++++++ .../test/java/org/qubership/InventoryServiceRestTest.java | 8 ++++++++ .../java/org/qubership/colly/CloudPassportLoaderTest.java | 8 +++++--- .../test-cluster/cloud-passport/test-cluster.yml | 1 + .../unreachable-cluster/cloud-passport/passport.yml | 1 + 11 files changed, 29 insertions(+), 6 deletions(-) diff --git a/envgene-inventory-service/src/main/java/org/qubership/colly/CloudPassportLoader.java b/envgene-inventory-service/src/main/java/org/qubership/colly/CloudPassportLoader.java index dac9d17a..f59d3d0e 100644 --- a/envgene-inventory-service/src/main/java/org/qubership/colly/CloudPassportLoader.java +++ b/envgene-inventory-service/src/main/java/org/qubership/colly/CloudPassportLoader.java @@ -144,7 +144,7 @@ private CloudPassport processYamlFilesInClusterFolder(GitInfo gitInfo, Path clou monitoringUri = monitoringUri.replace("${MONITORING_NAMESPACE}", cse.monitoringNamespace()); } } else if (cse.monitoringNamespace() != null && MONITORING_TYPE_VICTORIA_DB.equals(cse.monitoringType())) { - monitoringUri = "http://vmsingle-k8s." + cse.monitoringNamespace() + ":8429"; + monitoringUri = "https://vmsingle-" + cse.monitoringNamespace() + "." + cloud.cloudPublicHost(); } } Log.info("Monitoring URI: " + monitoringUri); @@ -156,7 +156,7 @@ private CloudPassport processYamlFilesInClusterFolder(GitInfo gitInfo, Path clou String dbaasUrl = null; if (cloudPassportData.dbaas() != null) dbaasUrl = cloudPassportData.dbaas().apiDBaaSAddress(); Log.info("Cloud DBaaS URL: " + dbaasUrl); - return new CloudPassport(clusterName, token, cloudApiHost, environments, monitoringUri, gitInfo, + return new CloudPassport(clusterName, token, cloudApiHost, cloud.cloudPublicHost(), environments, monitoringUri, gitInfo, cloud.cloudDashboardUrl(), dbaasUrl, cloud.cloudCmdbUrl(), argoUrl); } diff --git a/envgene-inventory-service/src/main/java/org/qubership/colly/CollyStorage.java b/envgene-inventory-service/src/main/java/org/qubership/colly/CollyStorage.java index 4bf040ea..da7f7e6d 100644 --- a/envgene-inventory-service/src/main/java/org/qubership/colly/CollyStorage.java +++ b/envgene-inventory-service/src/main/java/org/qubership/colly/CollyStorage.java @@ -74,6 +74,7 @@ private void saveDataToCache(CloudPassport cloudPassport) { } cluster.setToken(cloudPassport.token()); cluster.setCloudApiHost(cloudPassport.cloudApiHost()); + cluster.setCloudPublicHost(cloudPassport.cloudPublicHost()); cluster.setMonitoringUrl(cloudPassport.monitoringUrl()); cluster.setGitInfo(cloudPassport.gitInfo()); cluster.setDashboardUrl(cloudPassport.dashboardUrl()); diff --git a/envgene-inventory-service/src/main/java/org/qubership/colly/DtoMapper.java b/envgene-inventory-service/src/main/java/org/qubership/colly/DtoMapper.java index 51db3797..ccf30abc 100644 --- a/envgene-inventory-service/src/main/java/org/qubership/colly/DtoMapper.java +++ b/envgene-inventory-service/src/main/java/org/qubership/colly/DtoMapper.java @@ -43,6 +43,7 @@ public InternalClusterInfoDto toDto(Cluster cluster) { cluster.getName(), cluster.getToken(), cluster.getCloudApiHost(), + cluster.getCloudPublicHost(), toLightDtos(cluster.getEnvironments()), cluster.getMonitoringUrl() ); diff --git a/envgene-inventory-service/src/main/java/org/qubership/colly/cloudpassport/CloudPassport.java b/envgene-inventory-service/src/main/java/org/qubership/colly/cloudpassport/CloudPassport.java index bbd9598c..65f15472 100644 --- a/envgene-inventory-service/src/main/java/org/qubership/colly/cloudpassport/CloudPassport.java +++ b/envgene-inventory-service/src/main/java/org/qubership/colly/cloudpassport/CloudPassport.java @@ -2,7 +2,7 @@ import java.util.Set; -public record CloudPassport(String name, String token, String cloudApiHost, +public record CloudPassport(String name, String token, String cloudApiHost, String cloudPublicHost, Set environments, String monitoringUrl, GitInfo gitInfo, String dashboardUrl, String dbaasUrl, String deployerUrl, String argoUrl) { } diff --git a/envgene-inventory-service/src/main/java/org/qubership/colly/cloudpassport/envgen/CloudData.java b/envgene-inventory-service/src/main/java/org/qubership/colly/cloudpassport/envgen/CloudData.java index 01eb68c8..7abe4854 100644 --- a/envgene-inventory-service/src/main/java/org/qubership/colly/cloudpassport/envgen/CloudData.java +++ b/envgene-inventory-service/src/main/java/org/qubership/colly/cloudpassport/envgen/CloudData.java @@ -11,6 +11,8 @@ public record CloudData( String cloudApiPort, @JsonProperty("CLOUD_DEPLOY_TOKEN") String cloudDeployToken, + @JsonProperty("CLOUD_PUBLIC_HOST") + String cloudPublicHost, @JsonProperty("CLOUD_PROTOCOL") String cloudProtocol, @JsonProperty("CLOUD_DASHBOARD_URL") diff --git a/envgene-inventory-service/src/main/java/org/qubership/colly/db/data/Cluster.java b/envgene-inventory-service/src/main/java/org/qubership/colly/db/data/Cluster.java index d7f146f2..d541ea0b 100644 --- a/envgene-inventory-service/src/main/java/org/qubership/colly/db/data/Cluster.java +++ b/envgene-inventory-service/src/main/java/org/qubership/colly/db/data/Cluster.java @@ -16,6 +16,7 @@ public class Cluster { private String name; private String token; private String cloudApiHost; + private String cloudPublicHost; private String monitoringUrl; @Builder.Default private List environments = new ArrayList<>(); diff --git a/envgene-inventory-service/src/main/java/org/qubership/colly/dto/InternalClusterInfoDto.java b/envgene-inventory-service/src/main/java/org/qubership/colly/dto/InternalClusterInfoDto.java index 0a541cf2..03377cd2 100644 --- a/envgene-inventory-service/src/main/java/org/qubership/colly/dto/InternalClusterInfoDto.java +++ b/envgene-inventory-service/src/main/java/org/qubership/colly/dto/InternalClusterInfoDto.java @@ -33,6 +33,12 @@ public record InternalClusterInfoDto( required = true ) String cloudApiHost, + @Schema( + description = "Postfix for all ingresses in cloud", + examples = "gr7.eu-west-1.eks.amazonaws.com", + required = true + ) + String cloudPublicHost, @Schema( description = "List of environments deployed on this cluster", diff --git a/envgene-inventory-service/src/test/java/org/qubership/InventoryServiceRestTest.java b/envgene-inventory-service/src/test/java/org/qubership/InventoryServiceRestTest.java index 90e09229..180be5f8 100644 --- a/envgene-inventory-service/src/test/java/org/qubership/InventoryServiceRestTest.java +++ b/envgene-inventory-service/src/test/java/org/qubership/InventoryServiceRestTest.java @@ -82,6 +82,14 @@ void get_cluster_internal_infos() { .then() .statusCode(200) .body("name", contains("test-cluster", "unreachable-cluster")) + .body(".", hasItem( + allOf( + hasEntry("name", "test-cluster"), + hasEntry("token", "some_token_for_test_cluster"), + hasEntry("cloudApiHost", "https://1E4A399FCB54F505BBA05320EADF0DB3.gr7.eu-west-1.eks.amazonaws.com:443"), + hasEntry("cloudPublicHost", "gr7.eu-west-1.eks.amazonaws.com"), + hasEntry("monitoringUrl", "http://localhost:8428") + ))) .body("environments.flatten()", containsInAnyOrder( hasEntry("name", "env-test"), hasEntry("name", "env-metadata-test"), diff --git a/envgene-inventory-service/src/test/java/org/qubership/colly/CloudPassportLoaderTest.java b/envgene-inventory-service/src/test/java/org/qubership/colly/CloudPassportLoaderTest.java index 7804c92d..7adb59db 100644 --- a/envgene-inventory-service/src/test/java/org/qubership/colly/CloudPassportLoaderTest.java +++ b/envgene-inventory-service/src/test/java/org/qubership/colly/CloudPassportLoaderTest.java @@ -41,6 +41,7 @@ class CloudPassportLoaderTest { private static final CloudPassport TEST_CLUSTER = new CloudPassport("test-cluster", "some_token_for_test_cluster", "https://1E4A399FCB54F505BBA05320EADF0DB3.gr7.eu-west-1.eks.amazonaws.com:443", + "gr7.eu-west-1.eks.amazonaws.com", Set.of(new CloudPassportEnvironment( "env-test", "some env for tests", @@ -78,6 +79,7 @@ class CloudPassportLoaderTest { private static final CloudPassport UNREACHABLE_CLUSTER = new CloudPassport("unreachable-cluster", "1234567890", "https://some.unreachable.url:8443", + "unreachable.url", Set.of(new CloudPassportEnvironment( "env-1", "some env for tests", @@ -92,7 +94,7 @@ class CloudPassportLoaderTest { null, List.of(), List.of())), - "http://vmsingle-k8s.victoria:8429", + "https://vmsingle-victoria.unreachable.url", new GitInfo(new InstanceRepository("gitrepo_with_unreachable_cluster", "main", "43", "mb"), "target/test-cloud-passport-folder/2", "2"), null, null, @@ -179,7 +181,7 @@ void test_read_cloud_passport_data(@TempDir Path tempDir) throws IOException { @Test void testParseTokenFromCredsFile_validYaml(@TempDir Path tempDir) throws IOException { - CloudData cloud = new CloudData(null, null, "tokenKey", + CloudData cloud = new CloudData(null, null, "tokenKey", null, null, null, null); CloudPassportData passportData = new CloudPassportData(cloud, null, null, null); @@ -197,7 +199,7 @@ void testParseTokenFromCredsFile_validYaml(@TempDir Path tempDir) throws IOExcep @Test void testParseTokenFromCredsFile_missingSecretThrows(@TempDir Path tempDir) throws IOException { - CloudData cloud = new CloudData(null, null, "missingKey", + CloudData cloud = new CloudData(null, null, "missingKey", null, null, null, null); CloudPassportData passportData = new CloudPassportData(cloud, null, null, null); diff --git a/envgene-inventory-service/src/test/resources/gitrepo_with_cloudpassports/test-cluster/cloud-passport/test-cluster.yml b/envgene-inventory-service/src/test/resources/gitrepo_with_cloudpassports/test-cluster/cloud-passport/test-cluster.yml index f6ceb243..fa8ee943 100644 --- a/envgene-inventory-service/src/test/resources/gitrepo_with_cloudpassports/test-cluster/cloud-passport/test-cluster.yml +++ b/envgene-inventory-service/src/test/resources/gitrepo_with_cloudpassports/test-cluster/cloud-passport/test-cluster.yml @@ -7,6 +7,7 @@ cloud: CLOUD_API_HOST: 1E4A399FCB54F505BBA05320EADF0DB3.gr7.eu-west-1.eks.amazonaws.com CLOUD_API_PORT: "443" CLOUD_DEPLOY_TOKEN: cloud-deploy-sa-token + CLOUD_PUBLIC_HOST: gr7.eu-west-1.eks.amazonaws.com CLOUD_PROTOCOL: https PRODUCTION_MODE: "false" SOME_UI_URL: https://som-ui.my-cluster.com diff --git a/envgene-inventory-service/src/test/resources/gitrepo_with_unreachable_cluster/unreachable-cluster/cloud-passport/passport.yml b/envgene-inventory-service/src/test/resources/gitrepo_with_unreachable_cluster/unreachable-cluster/cloud-passport/passport.yml index e910b23c..f0805c10 100644 --- a/envgene-inventory-service/src/test/resources/gitrepo_with_unreachable_cluster/unreachable-cluster/cloud-passport/passport.yml +++ b/envgene-inventory-service/src/test/resources/gitrepo_with_unreachable_cluster/unreachable-cluster/cloud-passport/passport.yml @@ -4,6 +4,7 @@ cloud: CLOUD_API_HOST: some.unreachable.url CLOUD_API_PORT: "8443" CLOUD_DEPLOY_TOKEN: cloud-deploy-sa-token + CLOUD_PUBLIC_HOST: unreachable.url CLOUD_PROTOCOL: https cse: MONITORING_TYPE: VictoriaDB From 845043a6bfa8539c7c7e67db730bb8bf53ea1a61 Mon Sep 17 00:00:00 2001 From: Roman Romanov Date: Wed, 28 Jan 2026 16:54:37 +0500 Subject: [PATCH 2/2] feat: improve tests --- .../java/org/qubership/InventoryServiceRestTest.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/envgene-inventory-service/src/test/java/org/qubership/InventoryServiceRestTest.java b/envgene-inventory-service/src/test/java/org/qubership/InventoryServiceRestTest.java index 180be5f8..ed00303b 100644 --- a/envgene-inventory-service/src/test/java/org/qubership/InventoryServiceRestTest.java +++ b/envgene-inventory-service/src/test/java/org/qubership/InventoryServiceRestTest.java @@ -81,14 +81,20 @@ void get_cluster_internal_infos() { .when().get("/colly/v2/inventory-service/internal/cluster-infos") .then() .statusCode(200) - .body("name", contains("test-cluster", "unreachable-cluster")) - .body(".", hasItem( + .body(".", containsInAnyOrder( allOf( hasEntry("name", "test-cluster"), hasEntry("token", "some_token_for_test_cluster"), hasEntry("cloudApiHost", "https://1E4A399FCB54F505BBA05320EADF0DB3.gr7.eu-west-1.eks.amazonaws.com:443"), hasEntry("cloudPublicHost", "gr7.eu-west-1.eks.amazonaws.com"), hasEntry("monitoringUrl", "http://localhost:8428") + ), + allOf( + hasEntry("name", "unreachable-cluster"), + hasEntry("token", "1234567890"), + hasEntry("cloudApiHost", "https://some.unreachable.url:8443"), + hasEntry("cloudPublicHost", "unreachable.url"), + hasEntry("monitoringUrl", "https://vmsingle-victoria.unreachable.url") ))) .body("environments.flatten()", containsInAnyOrder( hasEntry("name", "env-test"),