Skip to content

Commit

Permalink
Fix steps (#576)
Browse files Browse the repository at this point in the history
* fix: add one more step to coordinate with cli

* fix: update swag

* fix: lint

* fix: lint
  • Loading branch information
jokestax authored Feb 9, 2025
1 parent 5c3f3c0 commit a271c5c
Show file tree
Hide file tree
Showing 13 changed files with 139 additions and 722 deletions.
3 changes: 3 additions & 0 deletions docs/docs.go
Original file line number Diff line number Diff line change
Expand Up @@ -1190,6 +1190,9 @@ const docTemplate = `{
"description": "Container Registry and Secrets",
"type": "boolean"
},
"final_check": {
"type": "boolean"
},
"git_auth": {
"$ref": "#/definitions/types.GitAuth"
},
Expand Down
3 changes: 3 additions & 0 deletions docs/swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -1184,6 +1184,9 @@
"description": "Container Registry and Secrets",
"type": "boolean"
},
"final_check": {
"type": "boolean"
},
"git_auth": {
"$ref": "#/definitions/types.GitAuth"
},
Expand Down
2 changes: 2 additions & 0 deletions docs/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ definitions:
ecr:
description: Container Registry and Secrets
type: boolean
final_check:
type: boolean
git_auth:
$ref: '#/definitions/types.GitAuth'
git_host:
Expand Down
106 changes: 106 additions & 0 deletions internal/controller/final_check.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package controller

import (
"fmt"

"github.com/konstructio/kubefirst-api/internal/constants"
"github.com/konstructio/kubefirst-api/internal/k8s"
"github.com/konstructio/kubefirst-api/internal/secrets"
"github.com/konstructio/kubefirst-api/internal/services"
log "github.com/rs/zerolog/log"
)

func (clctrl *ClusterController) FinalCheck() error {
// Wait for last sync wave app transition to Running
log.Info().Msg("waiting for final sync wave Deployment to transition to Running")
crossplaneDeployment, err := k8s.ReturnDeploymentObject(
clctrl.Kcfg.Clientset,
"app.kubernetes.io/instance",
"crossplane",
"crossplane-system",
3600,
)
if err != nil {
clctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error finding crossplane Deployment: %w", err)
}

log.Info().Msg("waiting on dns, tls certificates from letsencrypt and remaining sync waves.\n this may take up to 60 minutes but regularly completes in under 20 minutes")
_, err = k8s.WaitForDeploymentReady(clctrl.Kcfg.Clientset, crossplaneDeployment, 3600)
if err != nil {
clctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error waiting for crossplane deployment to enter Ready state: %w", err)
}

// * export and import cluster
if err := clctrl.ExportClusterRecord(); err != nil {
log.Error().Msgf("Error exporting cluster record: %s", err)
return fmt.Errorf("error exporting cluster record: %w", err)
}
clctrl.Cluster.Status = constants.ClusterStatusProvisioned
clctrl.Cluster.InProgress = false

if err := secrets.UpdateCluster(clctrl.KubernetesClient, clctrl.Cluster); err != nil {
return fmt.Errorf("error updating cluster status: %w", err)
}

log.Info().Msg("cluster creation complete")

// Create default service entries
cl, err := secrets.GetCluster(clctrl.KubernetesClient, clctrl.ClusterName)
if err != nil {
log.Error().Msgf("error getting cluster %s: %s", clctrl.ClusterName, err)
clctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error getting cluster %s: %w", clctrl.ClusterName, err)
}

if err := services.AddDefaultServices(cl); err != nil {
log.Error().Msgf("error adding default service entries for cluster %s: %s", cl.ClusterName, err)
clctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error adding default service entries for cluster %s: %w", cl.ClusterName, err)
}

if clctrl.InstallKubefirstPro {
log.Info().Msg("waiting for kubefirst-pro-api Deployment to transition to Running")
kubefirstProAPI, err := k8s.ReturnDeploymentObject(
clctrl.Kcfg.Clientset,
"app.kubernetes.io/name",
"kubefirst-pro-api",
"kubefirst",
1200,
)
if err != nil {
clctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error finding kubefirst-pro-api Deployment: %w", err)
}

_, err = k8s.WaitForDeploymentReady(clctrl.Kcfg.Clientset, kubefirstProAPI, 300)
if err != nil {
clctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error waiting for kubefirst-pro-api deployment to enter Ready state: %w", err)
}
}

// Wait for last sync wave app transition to Running
log.Info().Msg("waiting for final sync wave Deployment to transition to Running")
argocdDeployment, err := k8s.ReturnDeploymentObject(
clctrl.Kcfg.Clientset,
"app.kubernetes.io/name",
"argocd-server",
"argocd",
3600,
)
if err != nil {
clctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error finding argocd Deployment: %w", err)
}
_, err = k8s.WaitForDeploymentReady(clctrl.Kcfg.Clientset, argocdDeployment, 3600)
if err != nil {
clctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error waiting for argocd deployment to enter Ready state: %w", err)
}

clctrl.Cluster.FinalCheck = true
log.Info().Msg("cluster creation complete")
return nil
}
1 change: 1 addition & 0 deletions pkg/types/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ type Cluster struct {
VaultInitializedCheck bool `bson:"vault_initialized_check" json:"vault_initialized_check"`
VaultTerraformApplyCheck bool `bson:"vault_terraform_apply_check" json:"vault_terraform_apply_check"`
UsersTerraformApplyCheck bool `bson:"users_terraform_apply_check" json:"users_terraform_apply_check"`
FinalCheck bool `bson:"final_check" json:"final_check"`
WorkloadClusters []WorkloadCluster `bson:"workload_clusters,omitempty" json:"workload_clusters,omitempty"`
}

Expand Down
63 changes: 3 additions & 60 deletions providers/akamai/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import (
"github.com/konstructio/kubefirst-api/internal/controller"
"github.com/konstructio/kubefirst-api/internal/k8s"
"github.com/konstructio/kubefirst-api/internal/secrets"
"github.com/konstructio/kubefirst-api/internal/services"
"github.com/konstructio/kubefirst-api/internal/ssl"
pkgtypes "github.com/konstructio/kubefirst-api/pkg/types"
log "github.com/rs/zerolog/log"
Expand Down Expand Up @@ -235,67 +234,11 @@ func CreateAkamaiCluster(definition *pkgtypes.ClusterDefinition) error {
return fmt.Errorf("error updating cluster status after provisioning: %w", err)
}

log.Info().Msg("cluster creation complete")

// Create default service entries
cl, err := secrets.GetCluster(ctrl.KubernetesClient, ctrl.ClusterName)
if err != nil {
log.Error().Msgf("error getting cluster %s: %s", ctrl.ClusterName, err)
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error getting cluster %s: %w", ctrl.ClusterName, err)
}

err = services.AddDefaultServices(cl)
if err != nil {
log.Error().Msgf("error adding default service entries for cluster %s: %s", cl.ClusterName, err)
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error adding default service entries for cluster %s: %w", cl.ClusterName, err)
}

if ctrl.InstallKubefirstPro {
log.Info().Msg("waiting for kubefirst-pro-api Deployment to transition to Running")
kubefirstProAPI, err := k8s.ReturnDeploymentObject(
kcfg.Clientset,
"app.kubernetes.io/name",
"kubefirst-pro-api",
"kubefirst",
1200,
)
if err != nil {
log.Error().Msgf("error finding kubefirst-pro-api Deployment: %s", err)
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error finding kubefirst-pro-api Deployment: %w", err)
}

_, err = k8s.WaitForDeploymentReady(kcfg.Clientset, kubefirstProAPI, 300)
if err != nil {
log.Error().Msgf("error waiting for kubefirst-pro-api to transition to Running: %s", err)
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error waiting for kubefirst-pro-api to transition to Running: %w", err)
}
}

// Wait for last sync wave app transition to Running
log.Info().Msg("waiting for final sync wave Deployment to transition to Running")
argocdDeployment, err := k8s.ReturnDeploymentObject(
kcfg.Clientset,
"app.kubernetes.io/name",
"argocd-server",
"argocd",
3600,
)
if err != nil {
log.Error().Msgf("error finding argocd Deployment: %s", err)
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error finding argocd Deployment: %w", err)
}
_, err = k8s.WaitForDeploymentReady(kcfg.Clientset, argocdDeployment, 3600)
if err != nil {
log.Error().Msgf("error waiting for argocd deployment to enter Ready state: %s", err)
if err := ctrl.FinalCheck(); err != nil {
log.Error().Msgf("error doing final check: %s", err)
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error waiting for argocd deployment to enter Ready state: %w", err)
return fmt.Errorf("error doing final check: %w", err)
}

log.Info().Msg("cluster creation complete")
return nil
}
92 changes: 3 additions & 89 deletions providers/aws/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,9 @@ import (

awsext "github.com/konstructio/kubefirst-api/extensions/aws"
awsinternal "github.com/konstructio/kubefirst-api/internal/aws"
"github.com/konstructio/kubefirst-api/internal/constants"
"github.com/konstructio/kubefirst-api/internal/controller"
"github.com/konstructio/kubefirst-api/internal/k8s"
"github.com/konstructio/kubefirst-api/internal/secrets"
"github.com/konstructio/kubefirst-api/internal/services"
pkgtypes "github.com/konstructio/kubefirst-api/pkg/types"
log "github.com/rs/zerolog/log"
)
Expand Down Expand Up @@ -201,95 +199,11 @@ func CreateAWSCluster(definition *pkgtypes.ClusterDefinition) error {
return fmt.Errorf("error running users terraform: %w", err)
}

// Wait for last sync wave app transition to Running
log.Info().Msg("waiting for final sync wave Deployment to transition to Running")
crossplaneDeployment, err := k8s.ReturnDeploymentObject(
ctrl.Kcfg.Clientset,
"app.kubernetes.io/instance",
"crossplane",
"crossplane-system",
3600,
)
if err != nil {
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error finding crossplane Deployment: %w", err)
}

log.Info().Msg("waiting on dns, tls certificates from letsencrypt and remaining sync waves.\n this may take up to 60 minutes but regularly completes in under 20 minutes")
_, err = k8s.WaitForDeploymentReady(ctrl.Kcfg.Clientset, crossplaneDeployment, 3600)
if err != nil {
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error waiting for crossplane deployment to enter Ready state: %w", err)
}

// * export and import cluster
if err := ctrl.ExportClusterRecord(); err != nil {
log.Error().Msgf("Error exporting cluster record: %s", err)
return fmt.Errorf("error exporting cluster record: %w", err)
}
ctrl.Cluster.Status = constants.ClusterStatusProvisioned
ctrl.Cluster.InProgress = false

if err := secrets.UpdateCluster(ctrl.KubernetesClient, ctrl.Cluster); err != nil {
return fmt.Errorf("error updating cluster status: %w", err)
}

log.Info().Msg("cluster creation complete")

// Create default service entries
cl, err := secrets.GetCluster(ctrl.KubernetesClient, ctrl.ClusterName)
if err != nil {
log.Error().Msgf("error getting cluster %s: %s", ctrl.ClusterName, err)
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error getting cluster %s: %w", ctrl.ClusterName, err)
}

if err := services.AddDefaultServices(cl); err != nil {
log.Error().Msgf("error adding default service entries for cluster %s: %s", cl.ClusterName, err)
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error adding default service entries for cluster %s: %w", cl.ClusterName, err)
}

if ctrl.InstallKubefirstPro {
log.Info().Msg("waiting for kubefirst-pro-api Deployment to transition to Running")
kubefirstProAPI, err := k8s.ReturnDeploymentObject(
ctrl.Kcfg.Clientset,
"app.kubernetes.io/name",
"kubefirst-pro-api",
"kubefirst",
1200,
)
if err != nil {
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error finding kubefirst-pro-api Deployment: %w", err)
}

_, err = k8s.WaitForDeploymentReady(ctrl.Kcfg.Clientset, kubefirstProAPI, 300)
if err != nil {
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error waiting for kubefirst-pro-api deployment to enter Ready state: %w", err)
}
}

// Wait for last sync wave app transition to Running
log.Info().Msg("waiting for final sync wave Deployment to transition to Running")
argocdDeployment, err := k8s.ReturnDeploymentObject(
ctrl.Kcfg.Clientset,
"app.kubernetes.io/name",
"argocd-server",
"argocd",
3600,
)
if err != nil {
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error finding argocd Deployment: %w", err)
}
_, err = k8s.WaitForDeploymentReady(ctrl.Kcfg.Clientset, argocdDeployment, 3600)
if err != nil {
if err := ctrl.FinalCheck(); err != nil {
log.Error().Msgf("error doing final check: %s", err)
ctrl.UpdateClusterOnError(err.Error())
return fmt.Errorf("error waiting for argocd deployment to enter Ready state: %w", err)
return fmt.Errorf("error doing final check: %w", err)
}

log.Info().Msg("cluster creation complete")
return nil
}
Loading

0 comments on commit a271c5c

Please sign in to comment.