Skip to content
40 changes: 39 additions & 1 deletion cyclops-ctrl/internal/controller/helm.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"github.com/cyclops-ui/cyclops/cyclops-ctrl/internal/integrations/helm"
"github.com/cyclops-ui/cyclops/cyclops-ctrl/internal/mapper"
"github.com/cyclops-ui/cyclops/cyclops-ctrl/internal/models"
"github.com/cyclops-ui/cyclops/cyclops-ctrl/internal/models/dto"
helm2 "github.com/cyclops-ui/cyclops/cyclops-ctrl/internal/models/helm"
"github.com/cyclops-ui/cyclops/cyclops-ctrl/internal/telemetry"
Expand Down Expand Up @@ -163,7 +164,7 @@ func (h *Helm) GetReleaseSchema(ctx *gin.Context) {

rootField := mapper.HelmSchemaToFields("", *root, root.Definitions, nil)

ctx.JSON(http.StatusOK, rootField)
ctx.JSON(http.StatusOK, models.Template{RootField: rootField})
}

func (h *Helm) GetReleaseValues(ctx *gin.Context) {
Expand Down Expand Up @@ -191,3 +192,40 @@ func (h *Helm) GetReleaseValues(ctx *gin.Context) {

ctx.JSON(http.StatusOK, values)
}

func (h *Helm) MigrateHelmRelease(ctx *gin.Context) {
ctx.Header("Access-Control-Allow-Origin", "*")

var req dto.Module
if err := ctx.BindJSON(&req); err != nil {
ctx.JSON(http.StatusBadRequest, dto.NewError("Error binding values", err.Error()))
return
}

module, err := mapper.RequestToModule(req)
if err != nil {
ctx.JSON(http.StatusInternalServerError, dto.NewError("Error mapping module", err.Error()))
return
}

//if len(m.moduleTargetNamespace) > 0 {
// module.Spec.TargetNamespace = m.moduleTargetNamespace
//}

h.telemetryClient.ReleaseMigration()

err = h.kubernetesClient.CreateModule(module)
if err != nil {
fmt.Println(err)
ctx.JSON(http.StatusInternalServerError, dto.NewError("Error creating module", err.Error()))
return
}

if err := h.kubernetesClient.DeleteReleaseSecret(req.Name, req.Namespace); err != nil {
fmt.Println(err)
ctx.JSON(http.StatusInternalServerError, dto.NewError("Error creating module", err.Error()))
return
}

ctx.Status(http.StatusCreated)
}
1 change: 1 addition & 0 deletions cyclops-ctrl/internal/handler/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ func (h *Handler) Start() error {
h.router.GET("/helm/releases/:namespace/:name/resources", helmController.GetReleaseResources)
h.router.GET("/helm/releases/:namespace/:name/fields", helmController.GetReleaseSchema)
h.router.GET("/helm/releases/:namespace/:name/values", helmController.GetReleaseValues)
h.router.POST("/helm/releases/:namespace/:name/migrate", helmController.MigrateHelmRelease)
// endregion

h.router.Use(h.options)
Expand Down
13 changes: 13 additions & 0 deletions cyclops-ctrl/internal/telemetry/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ type Client interface {
ModuleReconciliation()
InstanceStart()
ReleaseUpdate()
ReleaseMigration()
TemplateCreation()
TemplateEdit()
}
Expand Down Expand Up @@ -101,6 +102,16 @@ func (c EnqueueClient) ReleaseUpdate() {
})
}

func (c EnqueueClient) ReleaseMigration() {
_ = c.client.Enqueue(posthog.Capture{
Event: "helm-release-migration",
DistinctId: c.distinctID,
Properties: map[string]interface{}{
"version": c.version,
},
})
}

func (c EnqueueClient) TemplateCreation() {
_ = c.client.Enqueue(posthog.Capture{
Event: "template-creation",
Expand Down Expand Up @@ -134,6 +145,8 @@ func (c MockClient) ModuleCreation() {

func (c MockClient) ReleaseUpdate() {}

func (c MockClient) ReleaseMigration() {}

func (c MockClient) TemplateCreation() {}

func (c MockClient) TemplateEdit() {}
Expand Down
2 changes: 1 addition & 1 deletion cyclops-ctrl/mocks/ITemplateRepo.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions cyclops-ctrl/pkg/cluster/k8sclient/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,4 +108,5 @@ type IKubernetesClient interface {
DeleteTemplateStore(name string) error
GetResourcesForRelease(release string) ([]dto.Resource, error)
GetWorkloadsForRelease(name string) ([]dto.Resource, error)
DeleteReleaseSecret(releaseName, releaseNamespace string) error
}
21 changes: 21 additions & 0 deletions cyclops-ctrl/pkg/cluster/k8sclient/helm.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,3 +161,24 @@ func (k *KubernetesClient) GetWorkloadsForRelease(releaseName string) ([]dto.Res

return out, nil
}

func (k *KubernetesClient) DeleteReleaseSecret(releaseName, releaseNamespace string) error {
secrets, err := k.clientset.CoreV1().Secrets(releaseNamespace).List(context.Background(), metav1.ListOptions{
LabelSelector: labels.Set(map[string]string{
"name": releaseName,
"owner": "helm",
}).String(),
FieldSelector: "type=helm.sh/release.v1",
})
if err != nil {
return err
}

for _, secret := range secrets.Items {
if err := k.clientset.CoreV1().Secrets(releaseNamespace).Delete(context.Background(), secret.Name, metav1.DeleteOptions{}); err != nil {
return err
}
}

return nil
}
73 changes: 60 additions & 13 deletions cyclops-ctrl/pkg/mocks/IKubernetesClient.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading