Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions pkg/client/openstack/project/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/availabilityzones"
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs"
"github.com/gophercloud/gophercloud/openstack/compute/v2/flavors"
"github.com/gophercloud/gophercloud/openstack/identity/v3/projects"
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers"
securitygroups "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups"
"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
Expand All @@ -17,6 +18,7 @@ import (

type ProjectClient interface {
GetMetadata() (*models.OpenstackMetadata, error)
GetProjectTags() ([]string, error)
}

type projectClient struct {
Expand Down Expand Up @@ -70,6 +72,14 @@ func (c *projectClient) GetMetadata() (metadata *models.OpenstackMetadata, err e
return metadata, nil
}

func (c *projectClient) GetProjectTags() ([]string, error) {
project, err := projects.Get(c.IdentityClient, c.projectID).Extract()
if err != nil {
return nil, err
}
return project.Tags, nil
}

func (c *projectClient) getRouters() ([]*models.Router, error) {
result := []*models.Router{}

Expand Down
15 changes: 15 additions & 0 deletions pkg/client/openstack/project/logging.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package project

import (
"fmt"
"time"

"github.com/go-kit/kit/log"
Expand Down Expand Up @@ -29,3 +30,17 @@ func (c LoggingClient) GetMetadata() (metadata *models.OpenstackMetadata, err er

return c.Client.GetMetadata()
}

func (c LoggingClient) GetProjectTags() (tags []string, err error) {
defer func(begin time.Time) {
c.Logger.Log(
"msg", "fetched project tags",
"tags", fmt.Sprintf("%v", tags),
"took", time.Since(begin),
"v", 2,
"err", err,
)
}(time.Now())

return c.Client.GetProjectTags()
}
33 changes: 33 additions & 0 deletions pkg/controller/ground.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ const (

UpgradeEnableAnnotation = "kubernikus.cloud.sap/upgrade"
SeedReconcileLabelKey = "kubernikus.cloud.sap/seed-reconcile"

ShardingEnabledProjectTag = "sharding_enabled"
)

type GroundControl struct {
Expand Down Expand Up @@ -230,6 +232,16 @@ func (op *GroundControl) handler(key string) error {
return nil
}

if disabled, err := op.isShardingDisabledInProject(kluster); err != nil || !disabled {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we rework this to isShardingEnabled to avoid the double negation

if err != nil {
op.Recorder.Eventf(kluster, api_v1.EventTypeWarning, FailedCreate, "Cluster creation failed. Could not examine project tags: %s", err)
return err
}
msg := "Cluster creation failed. VCenter sharding must be disabled for project."
op.Recorder.Eventf(kluster, api_v1.EventTypeWarning, FailedCreate, msg)
return fmt.Errorf("Cluster creation failed. VCenter sharding must be disabled for project.")
}

op.Logger.Log(
"msg", "creating kluster",
"kluster", kluster.GetName(),
Expand Down Expand Up @@ -898,6 +910,27 @@ func (op *GroundControl) requiresKubernikusInfo(kluster *v1.Kluster) bool {
return kluster.Status.Apiserver == "" || kluster.Status.Wormhole == "" || kluster.Spec.Version == "" || (swag.BoolValue(kluster.Spec.Dashboard) && kluster.Status.Dashboard == "")
}

func (op *GroundControl) isShardingDisabledInProject(kluster *v1.Kluster) (bool, error) {
client, err := op.Factories.Openstack.ProjectAdminClientFor(kluster.Account())
if err != nil {
return false, err
}

tags, err := client.GetProjectTags()
if err != nil {
return false, err
}

for _, tag := range tags {
if tag == ShardingEnabledProjectTag {
return false, nil
}

}

return true, nil
}

func (op *GroundControl) discoverKubernikusInfo(kluster *v1.Kluster) error {
op.Logger.Log(
"msg", "discovering KubernikusInfo",
Expand Down