diff --git a/bin/main/jenkins/kubernetes_helm_install_pipeline.xml b/bin/main/jenkins/kubernetes_helm_install_pipeline.xml index a785a7d..6f5d64a 100644 --- a/bin/main/jenkins/kubernetes_helm_install_pipeline.xml +++ b/bin/main/jenkins/kubernetes_helm_install_pipeline.xml @@ -1,6 +1,5 @@ - - + false @@ -8,45 +7,38 @@ - CB_TUMBLEBUG_SWAGGER_URI - CB-Tumblebug Swagger API URI - http://localhost:1323/tumblebug + CB_TUMBLEBUG_URI + Tumblebug API URL + http://13.125.199.35:1323/tumblebug true NAMESPACE - Namespace + Namespace ID ns01 true - MCIS_NAME - MCIS Name - mcis-01 - true - - - CLOUD_CONNECTION_NAME - Cloud Connection Name - aws-conn-01 + CLUSTERNAME + K8s Cluster Name + cluster01 true - HELM_RELEASE_NAME - Helm Release Name - my-release + TUMBLEBUG_USER + Tumblebug User ID + default true + + TUMBLEBUG_PASSWORD + Tumblebug User Password + default + - HELM_CHART_NAME - Helm Chart Name - bitnami/nginx - true - - - HELM_CHART_VERSION - Helm Chart Version - latest + HELM_CHARTS + Helm Charts to Install (comma-separated) + nginx,grafana true @@ -55,107 +47,126 @@ true diff --git a/src/main/java/kr/co/mcmp/ape/cbtumblebug/api/CbtumblebugRestApi.java b/src/main/java/kr/co/mcmp/ape/cbtumblebug/api/CbtumblebugRestApi.java index 41793ea..ee01768 100644 --- a/src/main/java/kr/co/mcmp/ape/cbtumblebug/api/CbtumblebugRestApi.java +++ b/src/main/java/kr/co/mcmp/ape/cbtumblebug/api/CbtumblebugRestApi.java @@ -13,6 +13,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; +import kr.co.mcmp.ape.cbtumblebug.dto.K8sClusterDto; +import kr.co.mcmp.ape.cbtumblebug.dto.K8sClusterResponse; import kr.co.mcmp.ape.cbtumblebug.dto.MciDto; import kr.co.mcmp.ape.cbtumblebug.dto.MciResponse; import kr.co.mcmp.ape.cbtumblebug.dto.NamespaceDto; @@ -54,15 +56,16 @@ private String createApiUrl(String endpoint) { return String.format("http://%s:%s%s", cbtumblebugUrl, cbtumblebugPort, endpoint); } - public boolean checkTumblebug(){ - log.info("check Tumblebug is ready"); - String apiUrl = createApiUrl("/readyz"); + public boolean checkTumblebug() { + log.info("Checking if Tumblebug is ready"); + String apiUrl = createApiUrl("/tumblebug/readyz"); HttpHeaders headers = createCommonHeaders(); try { ResponseEntity response = restClient.request(apiUrl, headers, null, HttpMethod.GET, new ParameterizedTypeReference() {}); + log.info("Tumblebug readyz response: {}", response.getBody()); return response.getStatusCode().is2xxSuccessful(); } catch (Exception e) { - log.error("Tumblebug connection fail", e); + log.error("Tumblebug connection failed", e); return false; } } @@ -95,24 +98,48 @@ public List getMcisByNamespace(String namespace) { }); } - public String getK8sClusterInfo(){ - log.info("Fetching all K8sClusterInfo"); - return executeWithConnectionCheck("getK8sClusterInfo", () ->{ - String apiUrl = createApiUrl("/k8sClusterInfo"); + // public String getK8sClusterInfo(){ + // log.info("Fetching all K8sClusterInfo"); + // return executeWithConnectionCheck("getK8sClusterInfo", () ->{ + // String apiUrl = createApiUrl("/k8sClusterInfo"); + // HttpHeaders headers = createCommonHeaders(); + // ResponseEntity response = restClient.request(apiUrl, headers, headers, HttpMethod.GET, new ParameterizedTypeReference() {}); + // return response.getBody() != null ? response.getBody() : null; + // }); + // } + + public List getAllK8sClusters(String namespace){ + log.info("Fetching K8s Clusters by namespace: {}", namespace); + return executeWithConnectionCheck("getK8sClustersByNamespace", () -> { + String apiUrl = createApiUrl(String.format("/tumblebug/ns/%s/k8scluster", namespace)); HttpHeaders headers = createCommonHeaders(); - ResponseEntity response = restClient.request(apiUrl, headers, headers, HttpMethod.GET, new ParameterizedTypeReference() {}); - return response.getBody() != null ? response.getBody() : null; + ResponseEntity response = restClient.request( + apiUrl, + headers, + null, + HttpMethod.GET, + new ParameterizedTypeReference() {} + ); + return response.getBody() != null ? response.getBody().getK8sClusterInfo() : Collections.emptyList(); }); } - public String getK8sClusterByNamespace(String namespace){ - log.info("Fetching k8sCluster Info by namespace :{}", namespace); - return executeWithConnectionCheck("getK8sClusterByNamespace", () ->{ - String apiUrl = createApiUrl(String.format("/ns/%s/k8scluster", namespace)); + public K8sClusterDto getK8sClusterByName(String namespace, String clusterName){ + log.info("Fetching K8s Cluster by name: {} in namespace: {}", clusterName, namespace); + return executeWithConnectionCheck("getK8sClusterByName", () -> { + String apiUrl = createApiUrl(String.format("/tumblebug/ns/%s/k8scluster/%s", namespace, clusterName)); HttpHeaders headers = createCommonHeaders(); - ResponseEntity response = restClient.request(apiUrl, headers, null, HttpMethod.GET, new ParameterizedTypeReference() {}); - return response.getBody() != null ? response.getBody() : null; + ResponseEntity response = restClient.request( + apiUrl, + headers, + null, + HttpMethod.GET, + new ParameterizedTypeReference() {} + ); + return response.getBody(); }); } + + } diff --git a/src/main/java/kr/co/mcmp/ape/cbtumblebug/controller/CbtumblebugController.java b/src/main/java/kr/co/mcmp/ape/cbtumblebug/controller/CbtumblebugController.java index 600022d..d659d20 100644 --- a/src/main/java/kr/co/mcmp/ape/cbtumblebug/controller/CbtumblebugController.java +++ b/src/main/java/kr/co/mcmp/ape/cbtumblebug/controller/CbtumblebugController.java @@ -10,6 +10,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import kr.co.mcmp.ape.cbtumblebug.dto.K8sClusterDto; import kr.co.mcmp.ape.cbtumblebug.dto.MciDto; import kr.co.mcmp.ape.cbtumblebug.dto.NamespaceDto; import kr.co.mcmp.ape.cbtumblebug.service.CbtumblebugService; @@ -31,23 +32,27 @@ public List getAllNamespaces() { return cbtumblebugService.getAllNamespaces(); } - @GetMapping("/ns/{nsId}/mcis") + @GetMapping("/ns/{nsId}/mci") @Operation(summary = "특정 네임스페이스의 MCIS 조회", description = "지정된 네임스페이스에 속한 모든 MCIS를 조회합니다.") - public List getMCISByNamespace(@Parameter(description = "네임스페이스 ID", required = true) + public List getMicsByNamespace(@Parameter(description = "네임스페이스 ID", required = true) @PathVariable String nsId) { return cbtumblebugService.getMcisByNamespace(nsId); } - @GetMapping("/k8sCluster/info") - @Operation(summary = "k8sCluster 정보 조회", description = "등록된 모든 K8s Cluster의 정보를 조회합니다.") - public String getAllK8sClusterInfo() { - return cbtumblebugService.getK8sClusterInfo(); - } + // @GetMapping("/k8sCluster/info") + // @Operation(summary = "k8sCluster 정보 조회", description = "등록된 모든 K8s Cluster의 정보를 조회합니다.") + // public String getAllK8sClusterInfo() { + // return cbtumblebugService.getK8sClusterInfo(); + // } @GetMapping("/ns/{nsId}/k8scluster") - public String getK8sCluster(@PathVariable String nsId) { - return cbtumblebugService.getK8sClusterByNamespace(nsId); + public List getK8sCluster(@PathVariable String nsId) { + return cbtumblebugService.getAllK8sClusters(nsId); + } + + @GetMapping("/ns/{nsId}/k8scluster/{clusterName}") + public K8sClusterDto getK8sClusterByName(@PathVariable String nsId, @PathVariable String clusterName) { + return cbtumblebugService.getK8sClusterByName(nsId, clusterName); } - } diff --git a/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/K8sClusterDto.java b/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/K8sClusterDto.java new file mode 100644 index 0000000..0144406 --- /dev/null +++ b/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/K8sClusterDto.java @@ -0,0 +1,25 @@ +package kr.co.mcmp.ape.cbtumblebug.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class K8sClusterDto { + private String id; + private String name; + private String connectionName; + private String status; + private String version; + private AccessInfo accessInfo; + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class AccessInfo { + private String endpoint; + private String kubeconfig; + } +} \ No newline at end of file diff --git a/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/K8sClusterResponse.java b/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/K8sClusterResponse.java new file mode 100644 index 0000000..4be853d --- /dev/null +++ b/src/main/java/kr/co/mcmp/ape/cbtumblebug/dto/K8sClusterResponse.java @@ -0,0 +1,14 @@ +package kr.co.mcmp.ape.cbtumblebug.dto; + +import java.util.List; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class K8sClusterResponse { + private List k8sClusterInfo; +} \ No newline at end of file diff --git a/src/main/java/kr/co/mcmp/ape/cbtumblebug/service/CbtumblebugService.java b/src/main/java/kr/co/mcmp/ape/cbtumblebug/service/CbtumblebugService.java index 8d078f0..b75f9c4 100644 --- a/src/main/java/kr/co/mcmp/ape/cbtumblebug/service/CbtumblebugService.java +++ b/src/main/java/kr/co/mcmp/ape/cbtumblebug/service/CbtumblebugService.java @@ -2,6 +2,7 @@ import java.util.List; +import kr.co.mcmp.ape.cbtumblebug.dto.K8sClusterDto; import kr.co.mcmp.ape.cbtumblebug.dto.MciDto; import kr.co.mcmp.ape.cbtumblebug.dto.NamespaceDto; @@ -12,7 +13,9 @@ public interface CbtumblebugService { List getMcisByNamespace(String namespace); - String getK8sClusterInfo(); + // String getK8sClusterInfo(); - String getK8sClusterByNamespace(String namespace); + List getAllK8sClusters(String namespace); + + K8sClusterDto getK8sClusterByName(String namespace, String clusterName); } diff --git a/src/main/java/kr/co/mcmp/ape/cbtumblebug/service/CbtumblebugServiceImpl.java b/src/main/java/kr/co/mcmp/ape/cbtumblebug/service/CbtumblebugServiceImpl.java index 07b298b..164568c 100644 --- a/src/main/java/kr/co/mcmp/ape/cbtumblebug/service/CbtumblebugServiceImpl.java +++ b/src/main/java/kr/co/mcmp/ape/cbtumblebug/service/CbtumblebugServiceImpl.java @@ -5,6 +5,7 @@ import org.springframework.stereotype.Service; import kr.co.mcmp.ape.cbtumblebug.api.CbtumblebugRestApi; +import kr.co.mcmp.ape.cbtumblebug.dto.K8sClusterDto; import kr.co.mcmp.ape.cbtumblebug.dto.MciDto; import kr.co.mcmp.ape.cbtumblebug.dto.NamespaceDto; import lombok.RequiredArgsConstructor; @@ -25,14 +26,19 @@ public List getMcisByNamespace(String namespace) { return api.getMcisByNamespace(namespace); } + // @Override + // public String getK8sClusterInfo() { + // return api.getK8sClusterInfo(); + // } + @Override - public String getK8sClusterInfo() { - return api.getK8sClusterInfo(); + public List getAllK8sClusters(String namespace) { + return api.getAllK8sClusters(namespace); } @Override - public String getK8sClusterByNamespace(String namespace) { - return api.getK8sClusterByNamespace(namespace); + public K8sClusterDto getK8sClusterByName(String namespace, String clusterName) { + return api.getK8sClusterByName(namespace, clusterName); } } diff --git a/src/main/java/kr/co/mcmp/ape/controller/AppProvEngineController.java b/src/main/java/kr/co/mcmp/ape/controller/AppProvEngineController.java index c2ac0a7..d8f8678 100644 --- a/src/main/java/kr/co/mcmp/ape/controller/AppProvEngineController.java +++ b/src/main/java/kr/co/mcmp/ape/controller/AppProvEngineController.java @@ -2,6 +2,7 @@ import java.util.List; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -46,11 +47,11 @@ public ResponseWrapper triggerVmInstall(@RequestBody JenkinsJobDto.VmApp return triggerJenkinsJob(jobDto); } - // @PostMapping("/vm/uninstall") - // @Operation(summary = "Uninstall VM Application", description = "VM에서 애플리케이션을 제거하기 위해 Jenkins 작업을 트리거합니다.") - // public ResponseWrapper triggerVmUninstall(@RequestBody JenkinsJobDto.VmApplicationUninstall jobDto) { - // return triggerJenkinsJob(jobDto); - // } + @PostMapping("/vm/uninstall") + @Operation(summary = "Uninstall VM Application", description = "VM에서 애플리케이션을 제거하기 위해 Jenkins 작업을 트리거합니다.") + public ResponseWrapper triggerVmUninstall(@RequestBody JenkinsJobDto.VmApplicationUninstall jobDto) { + return triggerJenkinsJob(jobDto); + } // @PostMapping("/helm/install") // @Operation(summary = "Install Kubernetes Helm Chart", description = "Kubernetes에 Helm 차트를 설치하기 위해 Jenkins 작업을 트리거합니다.") @@ -83,25 +84,6 @@ private ResponseWrapper triggerJenkinsJob(JenkinsJobDto jobDto) { // } // } - @GetMapping("/ns") - @Operation(summary = "모든 네임스페이스 조회", description = "시스템에 등록된 모든 네임스페이스를 조회합니다.") - public List getAllNamespaces() { - // return appProvEngineService.getAllNamespaces(); - return null; - } - - @GetMapping("/ns/{nsId}/mcis") - @Operation(summary = "특정 네임스페이스의 MCIS 조회", description = "지정된 네임스페이스에 속한 모든 MCIS를 조회합니다.") - public List getMCISByNamespace(@Parameter(description = "네임스페이스 ID", required = true) - @PathVariable String nsId) { - // return appProvEngineService.getMcisByNamespace(nsId); - return null; - } - @GetMapping("/readyz") - @Operation(summary="", description="") - public boolean checkReadyz(){ - return true; - } } diff --git a/src/main/java/kr/co/mcmp/ape/dto/reqDto/JenkinsJobDto.java b/src/main/java/kr/co/mcmp/ape/dto/reqDto/JenkinsJobDto.java index 3ed26fd..169e997 100644 --- a/src/main/java/kr/co/mcmp/ape/dto/reqDto/JenkinsJobDto.java +++ b/src/main/java/kr/co/mcmp/ape/dto/reqDto/JenkinsJobDto.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -39,7 +40,7 @@ public Map> convertToJenkinsParams() { @Setter @Schema(description = "VM 애플리케이션 설치 작업") public static class VmApplicationInstall extends JenkinsJobDto { - @Schema(description = "설치할 애플리케이션 목록", example = "[\"nginx\", \"mysql\"]") + @Schema(description = "설치할 애플리케이션 목록", example = "[\"nginx\", \"tomcat9\", \"mariadb-server\", \"mariadb-server\", \"redis-server\", \"grafana\", \"prometheus\"]") private List applications; @Override @@ -56,4 +57,52 @@ public Map> convertToSpecificParams() { return params; } } + @Getter + @Setter + @Schema(description = "VM 애플리케이션 삭제 작업") + public static class VmApplicationUninstall extends JenkinsJobDto { + @Schema(description = "설치할 애플리케이션 목록", example = "[\"nginx\", \"tomcat9\", \"mariadb-server\", \"mariadb-server\", \"redis-server\", \"grafana\", \"prometheus\"]") + private List applications; + + @Override + @JsonIgnore + @Schema(hidden = true) + public String getJobName() { + return "vm_application_uninstall"; + } + + @Override + public Map> convertToSpecificParams() { + Map> params = new HashMap<>(); + params.put("APPLICATIONS", List.of(String.join(",", this.applications))); + return params; + } + } + + @Getter + @Setter + @Schema(description = "Helm 차트 설치 작업") + public static class HelmChartInstall extends JenkinsJobDto { + @Schema(description = "K8s 클러스터 이름", example = "cluster01", required = true) + private String clusterName; + + @Schema(description = "설치할 Helm 차트 목록", example = "[\"nginx\", \"grafana\"]") + private List helmCharts; + + @Override + @JsonIgnore + @Schema(hidden = true) + public String getJobName() { + return "helm_application_install"; + } + + @Override + public Map> convertToSpecificParams() { + Map> params = new HashMap<>(); + params.put("CLUSTERNAME", List.of(this.clusterName)); + params.put("HELM_CHARTS", List.of(String.join(",", this.helmCharts))); + return params; + } + } + } \ No newline at end of file diff --git a/src/main/java/kr/co/mcmp/ape/service/AppProvEngineService.java b/src/main/java/kr/co/mcmp/ape/service/AppProvEngineService.java index e483092..f8ce1c4 100644 --- a/src/main/java/kr/co/mcmp/ape/service/AppProvEngineService.java +++ b/src/main/java/kr/co/mcmp/ape/service/AppProvEngineService.java @@ -2,10 +2,13 @@ import java.util.List; +import kr.co.mcmp.ape.cbtumblebug.dto.MciDto; +import kr.co.mcmp.ape.cbtumblebug.dto.NamespaceDto; import kr.co.mcmp.ape.dto.reqDto.JenkinsJobDto; import kr.co.mcmp.ape.dto.resDto.ApeLogResDto; import kr.co.mcmp.oss.dto.OssDto; import kr.co.mcmp.oss.dto.OssTypeDto; +import kr.co.mcmp.oss.entity.Oss; public interface AppProvEngineService { @@ -15,4 +18,6 @@ public interface AppProvEngineService { String triggerJenkinsJob(JenkinsJobDto dto); + OssDto getJenkinsOss(); + } diff --git a/src/main/java/kr/co/mcmp/ape/service/AppProvEngineServiceImpl.java b/src/main/java/kr/co/mcmp/ape/service/AppProvEngineServiceImpl.java index 3f3f277..4fbc2e9 100644 --- a/src/main/java/kr/co/mcmp/ape/service/AppProvEngineServiceImpl.java +++ b/src/main/java/kr/co/mcmp/ape/service/AppProvEngineServiceImpl.java @@ -64,7 +64,7 @@ public List getApeLog(String jobName) { return fetchLogs(jenkinsOss, jobName); } - private OssDto getJenkinsOss() { + public OssDto getJenkinsOss() { return ossService.getOssListNotDecryptPassword("JENKINS").stream() .findFirst() .orElseThrow(() -> new IllegalStateException("Jenkins OSS 정보를 찾을 수 없습니다.")); @@ -126,4 +126,5 @@ private String makeTumblebugUri(String url, String port){ StringBuilder builder = new StringBuilder(); return builder.append("http://").append(url).append(":").append(port).append("/tumblebug").toString(); } + } diff --git a/src/main/java/kr/co/mcmp/ape/service/jenkins/service/JenkinsService.java b/src/main/java/kr/co/mcmp/ape/service/jenkins/service/JenkinsService.java index 2aace30..a5814cb 100644 --- a/src/main/java/kr/co/mcmp/ape/service/jenkins/service/JenkinsService.java +++ b/src/main/java/kr/co/mcmp/ape/service/jenkins/service/JenkinsService.java @@ -56,9 +56,9 @@ public class JenkinsService { private static final String PIPELINE_XML_PATH = "/flow-definition/definition/script"; private static final List PIPELINE_XML_FILE_PATHS = Arrays.asList( - "jenkins/vm_application_install_pipeline.xml" - // "jenkins/vm_application_uninstall_pipeline.xml", - // "jenkins/kubernetes_helm_install_pipeline.xml", + "jenkins/vm_application_install_pipeline.xml", + "jenkins/vm_application_uninstall_pipeline.xml", + "jenkins/kubernetes_helm_install_pipeline.xml" // "jenkins/kubernetes_helm_uninstall_pipeline.xml" ); diff --git a/src/main/java/kr/co/mcmp/applicationmanager/controller/ApplicationManagerController.java b/src/main/java/kr/co/mcmp/applicationmanager/controller/ApplicationManagerController.java new file mode 100644 index 0000000..234d3f6 --- /dev/null +++ b/src/main/java/kr/co/mcmp/applicationmanager/controller/ApplicationManagerController.java @@ -0,0 +1,36 @@ +package kr.co.mcmp.applicationmanager.controller; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.v3.oas.annotations.Operation; +import kr.co.mcmp.ape.cbtumblebug.api.CbtumblebugRestApi; +import kr.co.mcmp.ape.service.AppProvEngineService; +import kr.co.mcmp.applicationmanager.dto.ReadyzResponse; +import kr.co.mcmp.oss.dto.OssDto; +import lombok.RequiredArgsConstructor; + +@RestController +@RequiredArgsConstructor +public class ApplicationManagerController { + + private final AppProvEngineService appProvEngineService; + + private final CbtumblebugRestApi cbtumblebugRestApi; + + @GetMapping("/readyz") + @Operation(summary="Check Application-Manager is ready", description="") + public ResponseEntity checkReadyz(){ + OssDto jenkinsOss = appProvEngineService.getJenkinsOss(); + boolean checkTumblebug = cbtumblebugRestApi.checkTumblebug(); + if(jenkinsOss != null && checkTumblebug){ + return ResponseEntity.ok(new ReadyzResponse("application-manager is ready")); + }else{ + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).body(new ReadyzResponse("application-manager is not ready")); + } + + } + +} diff --git a/src/main/java/kr/co/mcmp/applicationmanager/dto/ReadyzResponse.java b/src/main/java/kr/co/mcmp/applicationmanager/dto/ReadyzResponse.java new file mode 100644 index 0000000..16edd7c --- /dev/null +++ b/src/main/java/kr/co/mcmp/applicationmanager/dto/ReadyzResponse.java @@ -0,0 +1,13 @@ +package kr.co.mcmp.applicationmanager.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +public class ReadyzResponse { + + private String message; +} diff --git a/src/main/resources/jenkins/kubernetes_helm_install_pipeline.xml b/src/main/resources/jenkins/kubernetes_helm_install_pipeline.xml index a785a7d..6f5d64a 100644 --- a/src/main/resources/jenkins/kubernetes_helm_install_pipeline.xml +++ b/src/main/resources/jenkins/kubernetes_helm_install_pipeline.xml @@ -1,6 +1,5 @@ - - + false @@ -8,45 +7,38 @@ - CB_TUMBLEBUG_SWAGGER_URI - CB-Tumblebug Swagger API URI - http://localhost:1323/tumblebug + CB_TUMBLEBUG_URI + Tumblebug API URL + http://13.125.199.35:1323/tumblebug true NAMESPACE - Namespace + Namespace ID ns01 true - MCIS_NAME - MCIS Name - mcis-01 - true - - - CLOUD_CONNECTION_NAME - Cloud Connection Name - aws-conn-01 + CLUSTERNAME + K8s Cluster Name + cluster01 true - HELM_RELEASE_NAME - Helm Release Name - my-release + TUMBLEBUG_USER + Tumblebug User ID + default true + + TUMBLEBUG_PASSWORD + Tumblebug User Password + default + - HELM_CHART_NAME - Helm Chart Name - bitnami/nginx - true - - - HELM_CHART_VERSION - Helm Chart Version - latest + HELM_CHARTS + Helm Charts to Install (comma-separated) + nginx,grafana true @@ -55,107 +47,126 @@ true