Skip to content

Commit

Permalink
unify kluster specs
Browse files Browse the repository at this point in the history
This commit unifies the kluster specs used by the apiserver and the CRD.
  • Loading branch information
databus23 committed Nov 10, 2017
1 parent 46198c0 commit 6ffe0f4
Show file tree
Hide file tree
Showing 52 changed files with 1,597 additions and 1,359 deletions.
5 changes: 3 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ pkg/api/rest/operations/kubernikus_api.go: swagger.yml
ifneq (,$(wildcard $(SWAGGER_BIN)))
$(SWAGGER_BIN) generate server --name kubernikus --target pkg/api --model-package models \
--server-package rest --flag-strategy pflag --principal models.Principal --exclude-main
sed -e's/^package.*/package spec/' pkg/api/rest/embedded_spec.go > pkg/api/spec/embedded_spec.go
rm pkg/api/rest/embedded_spec.go
else
$(warning WARNING: $(SWAGGER_BIN) missing. Run `make bootstrap` to fix.)
endif
Expand All @@ -73,8 +75,7 @@ endif
swagger-generate:
make -B pkg/api/rest/operations/kubernikus_api.go

# --existing-models github.com/sapcc/kubernikus/pkg/api/models seems not to work in our case
pkg/client/kubernikus_generated/kubernikus_client.go: swagger.yml
pkg/api/client/kubernikus_client.go: swagger.yml
ifneq (,$(wildcard $(SWAGGER_BIN)))
$(SWAGGER_BIN) generate client --name kubernikus --target pkg/api --client-package client \
--existing-models github.com/sapcc/kubernikus/pkg/api/models \
Expand Down
4 changes: 2 additions & 2 deletions cmd/apiserver/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,19 @@ import (
"log"
"os"

loads "github.com/go-openapi/loads"
"github.com/spf13/pflag"

"github.com/sapcc/kubernikus/pkg/api/rest"
"github.com/sapcc/kubernikus/pkg/api/rest/operations"
"github.com/sapcc/kubernikus/pkg/api/spec"
)

// This file was generated by the swagger tool.
// Make sure not to overwrite this file after you generated it because all your edits would be lost!

func main() {

swaggerSpec, err := loads.Analyzed(rest.SwaggerJSON, "")
swaggerSpec, err := spec.Spec()
if err != nil {
log.Fatalln(err)
}
Expand Down
8 changes: 4 additions & 4 deletions pkg/api/client/operations/create_cluster_parameters.go

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

4 changes: 2 additions & 2 deletions pkg/api/client/operations/create_cluster_responses.go

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

4 changes: 2 additions & 2 deletions pkg/api/client/operations/get_cluster_info_responses.go

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

2 changes: 1 addition & 1 deletion pkg/api/client/operations/list_clusters_responses.go

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

4 changes: 2 additions & 2 deletions pkg/api/client/operations/show_cluster_responses.go

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

8 changes: 4 additions & 4 deletions pkg/api/client/operations/update_cluster_parameters.go

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

4 changes: 2 additions & 2 deletions pkg/api/client/operations/update_cluster_responses.go

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

33 changes: 10 additions & 23 deletions pkg/api/handlers/create_cluster.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
package handlers

import (
"fmt"

"github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/validate"
"github.com/golang/glog"
"github.com/sapcc/kubernikus/pkg/api"
"github.com/sapcc/kubernikus/pkg/api/models"
"github.com/sapcc/kubernikus/pkg/api/rest/operations"
"github.com/sapcc/kubernikus/pkg/apis/kubernikus"
"github.com/sapcc/kubernikus/pkg/apis/kubernikus/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
Expand All @@ -24,34 +21,24 @@ type createCluster struct {
}

func (d *createCluster) Handle(params operations.CreateClusterParams, principal *models.Principal) middleware.Responder {
name := *params.Body.Name
name := params.Body.Name
spec := params.Body.Spec

if err := validate.UniqueItems("name", "body", params.Body.Spec.NodePools); err != nil {
return NewErrorResponse(&operations.CreateClusterDefault{}, int(err.Code()), err.Error())
}

var nodePools []v1.NodePool
if params.Body.Spec.NodePools != nil {
nodePools = []v1.NodePool{}
for i, _ := range params.Body.Spec.NodePools {
nodePools = append(nodePools, v1.NodePool{
Name: *params.Body.Spec.NodePools[i].Name,
Size: int(*params.Body.Spec.NodePools[i].Size),
Flavor: *params.Body.Spec.NodePools[i].Flavor,
Image: "coreos-stable-amd64",
})
spec.Name = name
for i, pool := range spec.NodePools {
//Set default image
if pool.Image == "" {
spec.NodePools[i].Image = DEFAULT_IMAGE
}
}

kluster, err := kubernikus.NewKlusterFactory().KlusterFor(v1.KlusterSpec{
Name: name,
ServiceCIDR: params.Body.Spec.ServiceCIDR,
ClusterCIDR: params.Body.Spec.ClusterCIDR,
NodePools: nodePools,
})
kluster, err := kubernikus.NewKlusterFactory().KlusterFor(spec)

kluster.ObjectMeta = metav1.ObjectMeta{
Name: fmt.Sprintf("%s-%s", name, principal.Account),
Name: qualifiedName(name, principal.Account),
Labels: map[string]string{"account": principal.Account},
Annotations: map[string]string{"creator": principal.Name},
}
Expand All @@ -65,5 +52,5 @@ func (d *createCluster) Handle(params operations.CreateClusterParams, principal
return NewErrorResponse(&operations.CreateClusterDefault{}, 500, err.Error())
}

return operations.NewCreateClusterCreated().WithPayload(clusterModelFromCRD(kluster))
return operations.NewCreateClusterCreated().WithPayload(klusterFromCRD(kluster))
}
6 changes: 3 additions & 3 deletions pkg/api/handlers/get_cluster_info.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ type getClusterInfo struct {
}

func (d *getClusterInfo) Handle(params operations.GetClusterInfoParams, principal *models.Principal) middleware.Responder {
info := &models.ClusterInfo{
info := &models.KlusterInfo{
SetupCommand: createSetupCommand(principal),
Binaries: []*models.ClusterInfoBinariesItems0{
Binaries: []models.Binaries{
{
Name: "kubernikusctl",
Links: []*models.ClusterInfoBinariesItems0LinksItems0{
Links: []models.Link{
{
Platform: "darwin",
Link: "static/binaries/darwin/amd64/kubernikusctl",
Expand Down
4 changes: 2 additions & 2 deletions pkg/api/handlers/list_clusters.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ func (d *listClusters) Handle(params operations.ListClustersParams, principal *m
return NewErrorResponse(&operations.ListClustersDefault{}, 500, err.Error())
}

clusters := make([]*models.Cluster, 0, len(klusterList.Items))
clusters := make([]*models.Kluster, 0, len(klusterList.Items))
for _, kluster := range klusterList.Items {
clusters = append(clusters, clusterModelFromCRD(&kluster))
clusters = append(clusters, klusterFromCRD(&kluster))
}
return operations.NewListClustersOK().WithPayload(clusters)
}
2 changes: 1 addition & 1 deletion pkg/api/handlers/show_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,5 @@ func (d *showCluster) Handle(params operations.ShowClusterParams, principal *mod
return NewErrorResponse(&operations.ShowClusterDefault{}, 500, err.Error())
}

return operations.NewShowClusterOK().WithPayload(clusterModelFromCRD(kluster))
return operations.NewShowClusterOK().WithPayload(klusterFromCRD(kluster))
}
4 changes: 2 additions & 2 deletions pkg/api/handlers/terminate_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ func (d *terminateCluster) Handle(params operations.TerminateClusterParams, prin
}

_, err = editCluster(kluster, principal, params.Name, func(kluster *v1.Kluster) {
kluster.Status.Kluster.State = v1.KlusterTerminating
kluster.Status.Kluster.Message = "Cluster terminating"
kluster.Status.Phase = models.KlusterPhaseTerminating
kluster.Status.Message = "Cluster terminating"
})
if err != nil {
return NewErrorResponse(&operations.TerminateClusterDefault{}, 500, err.Error())
Expand Down
51 changes: 8 additions & 43 deletions pkg/api/handlers/update_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,56 +21,21 @@ type updateCluster struct {
func (d *updateCluster) Handle(params operations.UpdateClusterParams, principal *models.Principal) middleware.Responder {

kluster, err := editCluster(d.Kubernikus.Kubernikus().Klusters(d.Namespace), principal, params.Name, func(kluster *v1.Kluster) {
// Update Sizes
for j, _ := range params.Body.Spec.NodePools {
isNewPool := true

for i, _ := range kluster.Spec.NodePools {
if *params.Body.Spec.NodePools[j].Name == kluster.Spec.NodePools[i].Name {
kluster.Spec.NodePools[i].Size = int(*params.Body.Spec.NodePools[j].Size)
isNewPool = false
}
}

if isNewPool {
kluster.Spec.NodePools = append(kluster.Spec.NodePools, v1.NodePool{
Name: *params.Body.Spec.NodePools[j].Name,
Size: int(*params.Body.Spec.NodePools[j].Size),
Flavor: *params.Body.Spec.NodePools[j].Flavor,
Image: "coreos-stable-amd64",
})

kluster.Status.NodePools = append(kluster.Status.NodePools, v1.NodePoolInfo{
Name: *params.Body.Spec.NodePools[j].Name,
Size: int(*params.Body.Spec.NodePools[j].Size),
Running: 0,
Healthy: 0,
Schedulable: 0,
})
nodePools := params.Body.Spec.NodePools
//set default image
for i, pool := range nodePools {
if pool.Image == "" {
nodePools[i].Image = DEFAULT_IMAGE
}
}

for i, _ := range kluster.Spec.NodePools {
isDeleted := true
for j, _ := range params.Body.Spec.NodePools {
if *params.Body.Spec.NodePools[j].Name == kluster.Spec.NodePools[i].Name {
isDeleted = false
break
}
}
if isDeleted {
// wtf? I want my ruby back...
kluster.Spec.NodePools[i] = kluster.Spec.NodePools[len(kluster.Spec.NodePools)-1]
kluster.Spec.NodePools = kluster.Spec.NodePools[:len(kluster.Spec.NodePools)-1]
}
}

// Update nodepool
kluster.Spec.NodePools = nodePools
})
if err != nil {
if apierrors.IsNotFound(err) {
return NewErrorResponse(&operations.UpdateClusterDefault{}, 404, "Not found")
}
return NewErrorResponse(&operations.UpdateClusterDefault{}, 500, err.Error())
}
return operations.NewUpdateClusterOK().WithPayload(clusterModelFromCRD(kluster))
return operations.NewUpdateClusterOK().WithPayload(klusterFromCRD(kluster))
}
Loading

0 comments on commit 6ffe0f4

Please sign in to comment.