Skip to content

Commit

Permalink
A Smorgasbord of Fixes (#42)
Browse files Browse the repository at this point in the history
Add the correct roles to the openstack projects, use the correct CP
version, ensure clusters tied to controller managers are deleted before
we trigger the deletion of manager in order to clean up resources.
  • Loading branch information
spjmurray authored Apr 11, 2024
1 parent ed7e925 commit 857c6f2
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 4 deletions.
4 changes: 2 additions & 2 deletions charts/unikorn/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description: A Helm chart for deploying Unikorn

type: application

version: v0.2.2
appVersion: v0.2.2
version: v0.2.3
appVersion: v0.2.3

icon: https://raw.githubusercontent.com/unikorn-cloud/unikorn/main/icons/default.png
2 changes: 1 addition & 1 deletion pkg/providers/openstack/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,6 @@ func projectTags(cluster *unikornv1.KubernetesCluster) []string {
OrganizationTag + "=" + cluster.Labels[constants.OrganizationLabel],
ProjectTag + "=" + cluster.Labels[constants.ProjectLabel],
ClusterTag + "=" + cluster.Name,
ClusterUUIDTag + "=" + string(cluster.UID),
}

return tags
Expand Down Expand Up @@ -367,6 +366,7 @@ func roleNameToID(roles []roles.Role, name string) (string, error) {
// TODO: make this configurable, this is just a default.
func (p *Provider) getRequiredRoles() []string {
defaultRoles := []string{
"_member_",
"member",
"load-balancer_member",
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,6 @@ func (p *Provisioner) Values(ctx context.Context, version *string) (interface{},

// TODO: generate types from the Helm values schema.
values := map[string]interface{}{
"version": string(*cluster.Spec.Version),
"openstack": openstackValues,
"cluster": map[string]interface{}{
"taints": []interface{}{
Expand All @@ -242,6 +241,7 @@ func (p *Provisioner) Values(ctx context.Context, version *string) (interface{},
"serverMetadata": serverMetadata,
},
"controlPlane": map[string]interface{}{
"version": string(*cluster.Spec.Version),
"replicas": *cluster.Spec.ControlPlane.Replicas,
"machine": p.generateMachineHelmValues(&cluster.Spec.ControlPlane.MachineGeneric, nil),
},
Expand Down
40 changes: 40 additions & 0 deletions pkg/provisioners/managers/clustermanager/provisioner.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package clustermanager

import (
"context"
"slices"

"github.com/prometheus/client_golang/prometheus"

Expand Down Expand Up @@ -157,6 +158,45 @@ func (p *Provisioner) Provision(ctx context.Context) error {

// Deprovision implements the Provision interface.
func (p *Provisioner) Deprovision(ctx context.Context) error {
log := log.FromContext(ctx)

// When deleting a manager, you need to also delete any managed clusters
// first to free up compute resources from the provider, so block until
// this is done.
cli := coreclient.StaticClientFromContext(ctx)

var clusters unikornv1.KubernetesClusterList

if err := cli.List(ctx, &clusters, &client.ListOptions{Namespace: p.clusterManager.Namespace}); err != nil {
return err
}

clusters.Items = slices.DeleteFunc(clusters.Items, func(cluster unikornv1.KubernetesCluster) bool {
return cluster.Spec.ClusterManager != p.clusterManager.Name
})

if len(clusters.Items) != 0 {
log.Info("cluster manager has managed clusters, yielding")

for i := range clusters.Items {
cluster := &clusters.Items[i]

if cluster.DeletionTimestamp != nil {
log.Info("awaiting cluster deletion", "cluster", cluster.Name)

continue
}

log.Info("triggering cluster deletion", "cluster", cluster.Name)

if err := cli.Delete(ctx, cluster); err != nil {
return err
}
}

return provisioners.ErrYield
}

// Remove the control plane.
if err := p.getClusterManagerProvisioner().Deprovision(ctx); err != nil {
return err
Expand Down

0 comments on commit 857c6f2

Please sign in to comment.