From 1b9be2e0c11528b615f46c81e4bb54c89fe6d8aa Mon Sep 17 00:00:00 2001 From: Daniel Shubin Date: Tue, 16 Jul 2024 17:40:46 +0000 Subject: [PATCH] [PLAT-12733] Kubernetes overrides in v2 api Summary: Implemented kubernetes overrides v2 api Test Plan: unit tests Reviewers: sneelakantan, #yba-api-review Reviewed By: sneelakantan, #yba-api-review Subscribers: yugaware Differential Revision: https://phorge.dev.yugabyte.com/D36636 --- .../controllers/UniverseApiControllerImp.java | 31 ++++++---- .../UniverseUpgradesManagementHandler.java | 58 +++++++++++-------- .../UniverseDefinitionTaskParamsMapper.java | 10 ++++ ...seEditKubernetesOverridesParamsMapper.java | 19 ++++++ .../UniverseKubernetesOverridesReq.yaml | 5 ++ .../components/schemas/ClusterNodeSpec.yaml | 2 +- .../UniverseEditKubernetesOverrides.yaml | 19 ++++++ .../main/resources/openapi/paths/_index.yaml | 58 +++++++++++++++++++ .../resources/openapi/paths/universe.yaml | 58 +++++++++++++++++++ .../v2/UniverseApiControllerUpgradeTest.java | 29 +++++++++- 10 files changed, 249 insertions(+), 40 deletions(-) create mode 100644 managed/src/main/java/api/v2/mappers/UniverseEditKubernetesOverridesParamsMapper.java create mode 100644 managed/src/main/resources/openapi/components/requestBodies/UniverseKubernetesOverridesReq.yaml create mode 100644 managed/src/main/resources/openapi/components/schemas/UniverseEditKubernetesOverrides.yaml diff --git a/managed/src/main/java/api/v2/controllers/UniverseApiControllerImp.java b/managed/src/main/java/api/v2/controllers/UniverseApiControllerImp.java index eeacfa4f1392..2502809742c8 100644 --- a/managed/src/main/java/api/v2/controllers/UniverseApiControllerImp.java +++ b/managed/src/main/java/api/v2/controllers/UniverseApiControllerImp.java @@ -10,6 +10,7 @@ import api.v2.models.UniverseDeleteSpec; import api.v2.models.UniverseEditEncryptionInTransit; import api.v2.models.UniverseEditGFlags; +import api.v2.models.UniverseEditKubernetesOverrides; import api.v2.models.UniverseEditSpec; import api.v2.models.UniverseRestart; import api.v2.models.UniverseRollbackUpgradeReq; @@ -64,7 +65,7 @@ public YBATask deleteCluster( public YBATask editGFlags( Request request, UUID cUUID, UUID uniUUID, UniverseEditGFlags universeEditGFlags) throws Exception { - return universeUpgradeHandler.editGFlags(request, cUUID, uniUUID, universeEditGFlags); + return universeUpgradeHandler.editGFlags(cUUID, uniUUID, universeEditGFlags); } @Override @@ -78,66 +79,72 @@ public YBATask deleteUniverse( public YBATask startSoftwareUpgrade( Request request, UUID cUUID, UUID uniUUID, UniverseSoftwareUpgradeStart uniUpgrade) throws Exception { - return universeUpgradeHandler.startSoftwareUpgrade(request, cUUID, uniUUID, uniUpgrade); + return universeUpgradeHandler.startSoftwareUpgrade(cUUID, uniUUID, uniUpgrade); } @Override public YBATask finalizeSoftwareUpgrade( Request request, UUID cUUID, UUID uniUUID, UniverseSoftwareUpgradeFinalize finalizeInfo) throws Exception { - return universeUpgradeHandler.finalizeSoftwareUpgrade(request, cUUID, uniUUID, finalizeInfo); + return universeUpgradeHandler.finalizeSoftwareUpgrade(cUUID, uniUUID, finalizeInfo); } @Override public UniverseSoftwareUpgradeFinalizeInfo getFinalizeSoftwareUpgradeInfo( Request request, UUID cUUID, UUID uniUUID) throws Exception { - return universeUpgradeHandler.getSoftwareUpgradeFinalizeInfo(request, cUUID, uniUUID); + return universeUpgradeHandler.getSoftwareUpgradeFinalizeInfo(cUUID, uniUUID); } @Override public YBATask startThirdPartySoftwareUpgrade( Request request, UUID cUUID, UUID uniUUID, UniverseThirdPartySoftwareUpgradeStart uniUpgrade) throws Exception { - return universeUpgradeHandler.startThirdPartySoftwareUpgrade( - request, cUUID, uniUUID, uniUpgrade); + return universeUpgradeHandler.startThirdPartySoftwareUpgrade(cUUID, uniUUID, uniUpgrade); } @Override public YBATask rollbackSoftwareUpgrade( Request request, UUID cUUID, UUID uniUUID, UniverseRollbackUpgradeReq req) throws Exception { - return universeUpgradeHandler.rollbackSoftwareUpgrade(request, cUUID, uniUUID, req); + return universeUpgradeHandler.rollbackSoftwareUpgrade(cUUID, uniUUID, req); } @Override public UniverseSoftwareUpgradePrecheckResp precheckSoftwareUpgrade( Request request, UUID cUUID, UUID uniUUID, UniverseSoftwareUpgradePrecheckReq req) throws Exception { - return universeUpgradeHandler.precheckSoftwareUpgrade(request, cUUID, uniUUID, req); + return universeUpgradeHandler.precheckSoftwareUpgrade(cUUID, uniUUID, req); } @Override public YBATask restartUniverse( Request request, UUID cUUID, UUID uniUUID, UniverseRestart uniUpgrade) throws Exception { - return universeUpgradeHandler.restartUniverse(request, cUUID, uniUUID, uniUpgrade); + return universeUpgradeHandler.restartUniverse(cUUID, uniUUID, uniUpgrade); } @Override public YBATask systemdEnable( Request request, UUID cUUID, UUID uniUUID, UniverseSystemdEnableStart systemd) throws Exception { - return universeUpgradeHandler.systemdEnable(request, cUUID, uniUUID, systemd); + return universeUpgradeHandler.systemdEnable(cUUID, uniUUID, systemd); } @Override public YBATask encryptionInTransitToggle( Request request, UUID cUUID, UUID uniUUID, UniverseEditEncryptionInTransit spec) throws Exception { - return universeUpgradeHandler.tlsToggle(request, cUUID, uniUUID, spec); + return universeUpgradeHandler.tlsToggle(cUUID, uniUUID, spec); } @Override public YBATask encryptionInTransitCertRotate( Request request, UUID cUUID, UUID uniUUID, UniverseCertRotateSpec spec) throws Exception { - return universeUpgradeHandler.certRotate(request, cUUID, uniUUID, spec); + return universeUpgradeHandler.certRotate(cUUID, uniUUID, spec); + } + + @Override + public YBATask editKubernetesOverrides( + Request request, UUID cUUID, UUID uniUUID, UniverseEditKubernetesOverrides spec) + throws Exception { + return universeUpgradeHandler.editKubernetesOverrides(cUUID, uniUUID, spec); } } diff --git a/managed/src/main/java/api/v2/handlers/UniverseUpgradesManagementHandler.java b/managed/src/main/java/api/v2/handlers/UniverseUpgradesManagementHandler.java index b1c5884640f3..1b0c6121bf69 100644 --- a/managed/src/main/java/api/v2/handlers/UniverseUpgradesManagementHandler.java +++ b/managed/src/main/java/api/v2/handlers/UniverseUpgradesManagementHandler.java @@ -6,6 +6,7 @@ import api.v2.mappers.UniverseCertsRotateParamsMapper; import api.v2.mappers.UniverseDefinitionTaskParamsMapper; import api.v2.mappers.UniverseEditGFlagsMapper; +import api.v2.mappers.UniverseEditKubernetesOverridesParamsMapper; import api.v2.mappers.UniverseRestartParamsMapper; import api.v2.mappers.UniverseRollbackUpgradeMapper; import api.v2.mappers.UniverseSoftwareFinalizeMapper; @@ -18,6 +19,7 @@ import api.v2.models.UniverseCertRotateSpec; import api.v2.models.UniverseEditEncryptionInTransit; import api.v2.models.UniverseEditGFlags; +import api.v2.models.UniverseEditKubernetesOverrides; import api.v2.models.UniverseRestart; import api.v2.models.UniverseRollbackUpgradeReq; import api.v2.models.UniverseSoftwareUpgradeFinalize; @@ -42,6 +44,7 @@ import com.yugabyte.yw.forms.CertsRotateParams; import com.yugabyte.yw.forms.FinalizeUpgradeParams; import com.yugabyte.yw.forms.GFlagsUpgradeParams; +import com.yugabyte.yw.forms.KubernetesOverridesUpgradeParams; import com.yugabyte.yw.forms.RestartTaskParams; import com.yugabyte.yw.forms.RollbackUpgradeParams; import com.yugabyte.yw.forms.SoftwareUpgradeParams; @@ -57,7 +60,6 @@ import com.yugabyte.yw.models.extended.SoftwareUpgradeInfoResponse; import java.util.UUID; import lombok.extern.slf4j.Slf4j; -import play.mvc.Http; @Singleton @Slf4j @@ -66,8 +68,7 @@ public class UniverseUpgradesManagementHandler extends ApiControllerUtils { @Inject public Commissioner commissioner; @Inject private RuntimeConfGetter confGetter; - public YBATask editGFlags( - Http.Request request, UUID cUUID, UUID uniUUID, UniverseEditGFlags editGFlags) + public YBATask editGFlags(UUID cUUID, UUID uniUUID, UniverseEditGFlags editGFlags) throws JsonProcessingException { log.info("Starting v2 edit GFlags with {}", editGFlags); @@ -96,7 +97,7 @@ public YBATask editGFlags( } public YBATask startSoftwareUpgrade( - Http.Request request, UUID cUUID, UUID uniUUID, UniverseSoftwareUpgradeStart upgradeStart) + UUID cUUID, UUID uniUUID, UniverseSoftwareUpgradeStart upgradeStart) throws JsonProcessingException { Customer customer = Customer.getOrBadRequest(cUUID); Universe universe = Universe.getOrBadRequest(uniUUID, customer); @@ -122,7 +123,7 @@ public YBATask startSoftwareUpgrade( } public YBATask finalizeSoftwareUpgrade( - Http.Request request, UUID cUUID, UUID uniUUID, UniverseSoftwareUpgradeFinalize upgradeStart) + UUID cUUID, UUID uniUUID, UniverseSoftwareUpgradeFinalize upgradeStart) throws JsonProcessingException { Customer customer = Customer.getOrBadRequest(cUUID); Universe universe = Universe.getOrBadRequest(uniUUID, customer); @@ -141,7 +142,7 @@ public YBATask finalizeSoftwareUpgrade( } public UniverseSoftwareUpgradeFinalizeInfo getSoftwareUpgradeFinalizeInfo( - Http.Request request, UUID cUUID, UUID uniUUID) { + UUID cUUID, UUID uniUUID) { Customer customer = Customer.getOrBadRequest(cUUID); Universe.getOrBadRequest(uniUUID, customer); @@ -153,10 +154,7 @@ public UniverseSoftwareUpgradeFinalizeInfo getSoftwareUpgradeFinalizeInfo( } public YBATask startThirdPartySoftwareUpgrade( - Http.Request request, - UUID cUUID, - UUID uniUUID, - UniverseThirdPartySoftwareUpgradeStart upgradeStart) + UUID cUUID, UUID uniUUID, UniverseThirdPartySoftwareUpgradeStart upgradeStart) throws JsonProcessingException { Customer customer = Customer.getOrBadRequest(cUUID); Universe universe = Universe.getOrBadRequest(uniUUID, customer); @@ -176,8 +174,7 @@ public YBATask startThirdPartySoftwareUpgrade( return ybaTask; } - public YBATask rollbackSoftwareUpgrade( - Http.Request request, UUID cUUID, UUID uniUUID, UniverseRollbackUpgradeReq req) + public YBATask rollbackSoftwareUpgrade(UUID cUUID, UUID uniUUID, UniverseRollbackUpgradeReq req) throws Exception { Customer customer = Customer.getOrBadRequest(cUUID); Universe universe = Universe.getOrBadRequest(uniUUID, customer); @@ -195,11 +192,7 @@ public YBATask rollbackSoftwareUpgrade( } public UniverseSoftwareUpgradePrecheckResp precheckSoftwareUpgrade( - Http.Request request, - UUID cUUID, - UUID uniUUID, - UniverseSoftwareUpgradePrecheckReq precheckReq) - throws Exception { + UUID cUUID, UUID uniUUID, UniverseSoftwareUpgradePrecheckReq precheckReq) throws Exception { if (confGetter.getGlobalConf(GlobalConfKeys.enableReleasesRedesign)) { Release.getByVersionOrBadRequest(precheckReq.getYbSoftwareVersion()); } @@ -210,8 +203,7 @@ public UniverseSoftwareUpgradePrecheckResp precheckSoftwareUpgrade( v1Resp); } - public YBATask restartUniverse( - Http.Request request, UUID cUUID, UUID uniUUID, UniverseRestart uniRestart) + public YBATask restartUniverse(UUID cUUID, UUID uniUUID, UniverseRestart uniRestart) throws JsonProcessingException { Customer customer = Customer.getOrBadRequest(cUUID); Universe universe = Universe.getOrBadRequest(uniUUID, customer); @@ -250,8 +242,7 @@ public YBATask restartUniverse( return ybaTask; } - public YBATask systemdEnable( - Http.Request request, UUID cUUID, UUID uniUUID, UniverseSystemdEnableStart systemd) + public YBATask systemdEnable(UUID cUUID, UUID uniUUID, UniverseSystemdEnableStart systemd) throws JsonProcessingException { Customer customer = Customer.getOrBadRequest(cUUID); Universe universe = Universe.getOrBadRequest(uniUUID, customer); @@ -271,8 +262,7 @@ public YBATask systemdEnable( return ybaTask; } - public YBATask tlsToggle( - Http.Request request, UUID cUUID, UUID uniUUID, UniverseEditEncryptionInTransit spec) + public YBATask tlsToggle(UUID cUUID, UUID uniUUID, UniverseEditEncryptionInTransit spec) throws JsonProcessingException { Customer customer = Customer.getOrBadRequest(cUUID); @@ -289,8 +279,7 @@ public YBATask tlsToggle( return ybaTask; } - public YBATask certRotate( - Http.Request request, UUID cUUID, UUID uniUUID, UniverseCertRotateSpec spec) + public YBATask certRotate(UUID cUUID, UUID uniUUID, UniverseCertRotateSpec spec) throws JsonProcessingException { Customer customer = Customer.getOrBadRequest(cUUID); @@ -306,4 +295,23 @@ public YBATask certRotate( log.info("Started cert rotate task {}", mapper.writeValueAsString(ybaTask)); return ybaTask; } + + public YBATask editKubernetesOverrides( + UUID cUUID, UUID uniUUID, UniverseEditKubernetesOverrides spec) + throws JsonProcessingException { + Customer customer = Customer.getOrBadRequest(cUUID); + Universe universe = Universe.getOrBadRequest(uniUUID, customer); + + KubernetesOverridesUpgradeParams v1Params = + UniverseDefinitionTaskParamsMapper.INSTANCE.toKubernetesOverridesUpgradeParams( + universe.getUniverseDetails()); + v1Params = + UniverseEditKubernetesOverridesParamsMapper.INSTANCE.copyToV1KubernetesOverridesParams( + spec, v1Params); + + UUID taskUUID = v1Handler.upgradeKubernetesOverrides(v1Params, customer, universe); + YBATask ybaTask = new YBATask().taskUuid(taskUUID).resourceUuid(uniUUID); + log.info("Started kubernetes overrides upgrade task {}", mapper.writeValueAsString(ybaTask)); + return ybaTask; + } } diff --git a/managed/src/main/java/api/v2/mappers/UniverseDefinitionTaskParamsMapper.java b/managed/src/main/java/api/v2/mappers/UniverseDefinitionTaskParamsMapper.java index 247f3ff6ca70..9924a632b815 100644 --- a/managed/src/main/java/api/v2/mappers/UniverseDefinitionTaskParamsMapper.java +++ b/managed/src/main/java/api/v2/mappers/UniverseDefinitionTaskParamsMapper.java @@ -19,6 +19,7 @@ import com.yugabyte.yw.forms.FinalizeUpgradeParams; import com.yugabyte.yw.forms.GFlagsUpgradeParams; import com.yugabyte.yw.forms.KubernetesGFlagsUpgradeParams; +import com.yugabyte.yw.forms.KubernetesOverridesUpgradeParams; import com.yugabyte.yw.forms.RestartTaskParams; import com.yugabyte.yw.forms.RollbackUpgradeParams; import com.yugabyte.yw.forms.SoftwareUpgradeParams; @@ -154,6 +155,15 @@ public ThirdpartySoftwareUpgradeParams toThirdpartySoftwareUpgradeParams( @Mapping(target = "nonPrimaryClusters", ignore = true) public CertsRotateParams toCertsRotateParams(UniverseDefinitionTaskParams source); + @Mapping(target = "existingLBs", ignore = true) + @Mapping(target = "primaryCluster", ignore = true) + @Mapping(target = "TServers", ignore = true) + @Mapping(target = "readOnlyClusters", ignore = true) + @Mapping(target = "addOnClusters", ignore = true) + @Mapping(target = "nonPrimaryClusters", ignore = true) + public KubernetesOverridesUpgradeParams toKubernetesOverridesUpgradeParams( + UniverseDefinitionTaskParams source); + @Mapping(target = "spec", source = ".") UniverseCreateSpec toV2UniverseCreateSpec(UniverseDefinitionTaskParams v1UniverseTaskParams); diff --git a/managed/src/main/java/api/v2/mappers/UniverseEditKubernetesOverridesParamsMapper.java b/managed/src/main/java/api/v2/mappers/UniverseEditKubernetesOverridesParamsMapper.java new file mode 100644 index 000000000000..4dbcff77b135 --- /dev/null +++ b/managed/src/main/java/api/v2/mappers/UniverseEditKubernetesOverridesParamsMapper.java @@ -0,0 +1,19 @@ +package api.v2.mappers; + +import api.v2.models.UniverseEditKubernetesOverrides; +import com.yugabyte.yw.forms.KubernetesOverridesUpgradeParams; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.factory.Mappers; + +@Mapper(config = CentralConfig.class) +public interface UniverseEditKubernetesOverridesParamsMapper { + UniverseEditKubernetesOverridesParamsMapper INSTANCE = + Mappers.getMapper(UniverseEditKubernetesOverridesParamsMapper.class); + + @Mapping(source = "overrides", target = "universeOverrides") + KubernetesOverridesUpgradeParams copyToV1KubernetesOverridesParams( + UniverseEditKubernetesOverrides source, + @MappingTarget KubernetesOverridesUpgradeParams target); +} diff --git a/managed/src/main/resources/openapi/components/requestBodies/UniverseKubernetesOverridesReq.yaml b/managed/src/main/resources/openapi/components/requestBodies/UniverseKubernetesOverridesReq.yaml new file mode 100644 index 000000000000..4bd04d84f00e --- /dev/null +++ b/managed/src/main/resources/openapi/components/requestBodies/UniverseKubernetesOverridesReq.yaml @@ -0,0 +1,5 @@ +required: true +content: + application/json: + schema: + $ref: "../schemas/UniverseEditKubernetesOverrides.yaml" diff --git a/managed/src/main/resources/openapi/components/schemas/ClusterNodeSpec.yaml b/managed/src/main/resources/openapi/components/schemas/ClusterNodeSpec.yaml index 377542b54f7b..a17ff0c7703b 100644 --- a/managed/src/main/resources/openapi/components/schemas/ClusterNodeSpec.yaml +++ b/managed/src/main/resources/openapi/components/schemas/ClusterNodeSpec.yaml @@ -11,6 +11,6 @@ allOf: description: Used only for a k8s Universe. Required for k8s Universe if instance_type is not specified. Sets custom cpu and memory requests/limits for tserver pods of a cluster. $ref: "./K8SNodeResourceSpec.yaml" az_node_spec: - description: Granular node settings overridden per Availability Zone idetified by AZ uuid. + description: Granular node settings overridden per Availability Zone identified by AZ uuid. additionalProperties: $ref: "./AvailabilityZoneNodeSpec.yaml" diff --git a/managed/src/main/resources/openapi/components/schemas/UniverseEditKubernetesOverrides.yaml b/managed/src/main/resources/openapi/components/schemas/UniverseEditKubernetesOverrides.yaml new file mode 100644 index 000000000000..671deadf289a --- /dev/null +++ b/managed/src/main/resources/openapi/components/schemas/UniverseEditKubernetesOverrides.yaml @@ -0,0 +1,19 @@ +title: UniverseEditKubernetesOverrides +description: | + UniverseEditKubernetesOverrides + + Update all kubernetes overrides on the universe. Part of UniverseKubernetesOverridesReq +type: object +properties: + overrides: + description: Global kubernetes overrides to apply across the entire universe. + type: string + example: |- + tserver: + podLabels: + env: test + az_overrides: + description: Granular kubernetes overrides per Availability Zone identified by AZ uuid. + example: 'az_uuid: "tserver:\n podLabels:\n env: test"' + additionalProperties: + type: string diff --git a/managed/src/main/resources/openapi/paths/_index.yaml b/managed/src/main/resources/openapi/paths/_index.yaml index 0dcf4f7351c3..2f175501ee24 100644 --- a/managed/src/main/resources/openapi/paths/_index.yaml +++ b/managed/src/main/resources/openapi/paths/_index.yaml @@ -938,3 +938,61 @@ checkOnlyPermission: false x-yba-api-since: 2024.2.0.0 x-yba-api-visibility: preview +'/customers/{cUUID}/universes/{uniUUID}/kubernetes-overrides': + parameters: + - name: cUUID + in: path + description: Customer UUID + schema: + type: string + format: uuid + explode: false + style: simple + required: true + - name: uniUUID + in: path + description: Universe UUID + schema: + type: string + format: uuid + explode: false + style: simple + required: true + post: + operationId: editKubernetesOverrides + summary: Edit Kubernetes Helm Overrides + description: | + Update the kubernetes helm override values. This can be used to add custom settings to + kubernetes resources managed by YugabyteDB Anywhere. These override values can apply globally + to a universe or per AZ. + + See https://github.com/yugabyte/charts/blob/master/stable/yugabyte/values.yaml for possible + override options. + tags: + - Universe + requestBody: + $ref: "../components/requestBodies/UniverseKubernetesOverridesReq.yaml" + responses: + '202': + $ref: "../components/responses/YBATaskResp.yaml" + '400': + description: Invalid input + '500': + description: Server error + security: + - apiKeyAuth: [] + x-yba-api-audit: + auditTargetType: Universe + auditTargetId: uniUUID.toString() + auditActionType: UpgradeKubernetesOverrides + taskUuid: obj.getTaskUuid() + x-yba-api-authz: + - requiredPermission: + resourceType: universe + action: UPDATE + resourceLocation: + path: universes + sourceType: endpoint + checkOnlyPermission: false + x-yba-api-since: 2024.2.0.0 + x-yba-api-visibility: preview diff --git a/managed/src/main/resources/openapi/paths/universe.yaml b/managed/src/main/resources/openapi/paths/universe.yaml index 9693e0056b78..9d0c7ff5745d 100644 --- a/managed/src/main/resources/openapi/paths/universe.yaml +++ b/managed/src/main/resources/openapi/paths/universe.yaml @@ -821,3 +821,61 @@ checkOnlyPermission: false x-yba-api-since: 2024.2.0.0 x-yba-api-visibility: preview +'/customers/{cUUID}/universes/{uniUUID}/kubernetes-overrides': + parameters: + - name: cUUID + in: path + description: Customer UUID + schema: + type: string + format: uuid + explode: false + style: simple + required: true + - name: uniUUID + in: path + description: Universe UUID + schema: + type: string + format: uuid + explode: false + style: simple + required: true + post: + operationId: editKubernetesOverrides + summary: Edit Kubernetes Helm Overrides + description: | + Update the kubernetes helm override values. This can be used to add custom settings to + kubernetes resources managed by YugabyteDB Anywhere. These override values can apply globally + to a universe or per AZ. + + See https://github.com/yugabyte/charts/blob/master/stable/yugabyte/values.yaml for possible + override options. + tags: + - Universe + requestBody: + $ref: "../components/requestBodies/UniverseKubernetesOverridesReq.yaml" + responses: + '202': + $ref: "../components/responses/YBATaskResp.yaml" + '400': + description: Invalid input + '500': + description: Server error + security: + - apiKeyAuth: [] + x-yba-api-audit: + auditTargetType: Universe + auditTargetId: uniUUID.toString() + auditActionType: UpgradeKubernetesOverrides + taskUuid: obj.getTaskUuid() + x-yba-api-authz: + - requiredPermission: + resourceType: universe + action: UPDATE + resourceLocation: + path: universes + sourceType: endpoint + checkOnlyPermission: false + x-yba-api-since: 2024.2.0.0 + x-yba-api-visibility: preview diff --git a/managed/src/test/java/com/yugabyte/yw/api/v2/UniverseApiControllerUpgradeTest.java b/managed/src/test/java/com/yugabyte/yw/api/v2/UniverseApiControllerUpgradeTest.java index 85eb73522fec..d52d3fb047c8 100644 --- a/managed/src/test/java/com/yugabyte/yw/api/v2/UniverseApiControllerUpgradeTest.java +++ b/managed/src/test/java/com/yugabyte/yw/api/v2/UniverseApiControllerUpgradeTest.java @@ -20,6 +20,7 @@ import com.yugabyte.yba.v2.client.api.UniverseApi; import com.yugabyte.yba.v2.client.models.UniverseCertRotateSpec; import com.yugabyte.yba.v2.client.models.UniverseEditEncryptionInTransit; +import com.yugabyte.yba.v2.client.models.UniverseEditKubernetesOverrides; import com.yugabyte.yba.v2.client.models.UniverseRollbackUpgradeReq; import com.yugabyte.yba.v2.client.models.UniverseSoftwareFinalizeImpactedXCluster; import com.yugabyte.yba.v2.client.models.UniverseSoftwareUpgradeFinalize; @@ -36,6 +37,7 @@ import com.yugabyte.yw.controllers.handlers.UpgradeUniverseHandler; import com.yugabyte.yw.forms.CertsRotateParams; import com.yugabyte.yw.forms.FinalizeUpgradeParams; +import com.yugabyte.yw.forms.KubernetesOverridesUpgradeParams; import com.yugabyte.yw.forms.RollbackUpgradeParams; import com.yugabyte.yw.forms.SoftwareUpgradeParams; import com.yugabyte.yw.forms.SystemdUpgradeParams; @@ -50,6 +52,8 @@ import com.yugabyte.yw.models.extended.FinalizeUpgradeInfoResponse; import com.yugabyte.yw.models.extended.SoftwareUpgradeInfoResponse; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import java.util.UUID; import org.junit.Before; import org.junit.Test; @@ -379,11 +383,9 @@ public void testV2CertRotation() throws ApiException { .thenReturn(taskUUID); UniverseCertRotateSpec req = new UniverseCertRotateSpec(); req.setRollingUpgrade(true); - ; UUID clientCert = UUID.randomUUID(); UUID nodeCert = UUID.randomUUID(); req.setRootCa(nodeCert); - ; req.setClientRootCa(clientCert); YBATask resp = apiClient.encryptionInTransitCertRotate( @@ -397,4 +399,27 @@ public void testV2CertRotation() throws ApiException { assertEquals(nodeCert, params.rootCA); assertFalse(params.rootAndClientRootCASame); } + + @Test + public void testV2KubernetesOverrides() throws ApiException { + UUID taskUUID = UUID.randomUUID(); + when(mockUpgradeUniverseHandler.upgradeKubernetesOverrides(any(), eq(customer), eq(universe))) + .thenReturn(taskUUID); + UniverseEditKubernetesOverrides req = new UniverseEditKubernetesOverrides(); + req.setOverrides("my_overrides"); + Map azOverrides = new HashMap(); + azOverrides.put("az1", "az1_overrides"); + req.setAzOverrides(azOverrides); + YBATask resp = + apiClient.editKubernetesOverrides(customer.getUuid(), universe.getUniverseUUID(), req); + ArgumentCaptor captor = + ArgumentCaptor.forClass(KubernetesOverridesUpgradeParams.class); + verify(mockUpgradeUniverseHandler) + .upgradeKubernetesOverrides(captor.capture(), eq(customer), eq(universe)); + KubernetesOverridesUpgradeParams params = captor.getValue(); + assertEquals(taskUUID, resp.getTaskUuid()); + assertEquals("my_overrides", params.universeOverrides); + assertTrue(params.azOverrides.containsKey("az1")); + assertEquals("az1_overrides", params.azOverrides.get("az1")); + } }