Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

general refactoring #2

Merged
merged 1 commit into from
Feb 17, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
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
1 change: 0 additions & 1 deletion Test

This file was deleted.

24 changes: 24 additions & 0 deletions cmd/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package main

import (
"time"

"github.com/Azure/Kore/pkg/controller"
"github.com/Azure/Kore/pkg/kubernetes"
"github.com/Azure/Kore/pkg/signals"
log "github.com/Sirupsen/logrus"
)

func main() {
koreClient, kubeClient, err := kubernetes.GetClients()
if err != nil {
panic(err)
}

ctx := signals.Context()
controller.NewController(koreClient, kubeClient).Run(ctx)

shutdownDuration := 5 * time.Second
log.Infof("allowing %s for graceful shutdown to complete", shutdownDuration)
<-time.After(shutdownDuration)
}
22 changes: 0 additions & 22 deletions crd/scaledobject-crd-validation.yaml

This file was deleted.

11 changes: 0 additions & 11 deletions crd/scaledobject-crd.yaml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,4 @@ spec:
kind: ScaledObject
plural: scaledobjects
scope: Namespaced
subresources:
status: {}
---
File renamed without changes.
File renamed without changes.
85 changes: 0 additions & 85 deletions main.go

This file was deleted.

95 changes: 95 additions & 0 deletions pkg/controller/controller.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package controller

import (
"context"
"sync"

kore_v1alpha1 "github.com/Azure/Kore/pkg/apis/kesc/v1alpha1"
clientset "github.com/Azure/Kore/pkg/client/clientset/versioned"
koreinformer_v1alpha1 "github.com/Azure/Kore/pkg/client/informers/externalversions/kesc/v1alpha1"
log "github.com/Sirupsen/logrus"
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/cache"
)

type Controller interface {
Run(ctx context.Context)
}

type controller struct {
scaledObjectsInformer cache.SharedInformer
opsLock sync.Mutex
ctx context.Context
koreClient clientset.Interface
kubeClient kubernetes.Interface
}

func NewController(koreClient clientset.Interface, kubeClient kubernetes.Interface) Controller {
c := &controller{
koreClient: koreClient,
kubeClient: kubeClient,
scaledObjectsInformer: koreinformer_v1alpha1.NewScaledObjectInformer(
koreClient,
meta_v1.NamespaceAll,
0,
cache.Indexers{},
),
opsLock: sync.Mutex{},
}

c.scaledObjectsInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: c.syncScaledObject,
UpdateFunc: func(oldObj, newObj interface{}) {
new := newObj.(*kore_v1alpha1.ScaledObject)
old := oldObj.(*kore_v1alpha1.ScaledObject)
if new.ResourceVersion == old.ResourceVersion {
return
}

c.syncScaledObject(newObj)
},
DeleteFunc: c.syncDeletedScaledObject,
})

return c
}

//TODO: might need seperate method for updates to reconcile differences when removing/changing properties
func (c *controller) syncScaledObject(obj interface{}) {
c.opsLock.Lock()
defer c.opsLock.Unlock()

scaledObject := obj.(*kore_v1alpha1.ScaledObject)
deploymentName := scaledObject.Spec.DeploymentName
if deploymentName == "" {
log.Infof("Notified about ScaledObject with missing deployment name: %s", scaledObject.GetName())
return
}

deployment, err := c.kubeClient.AppsV1().Deployments(scaledObject.GetNamespace()).Get(deploymentName, meta_v1.GetOptions{})
if err != nil {
log.Errorf("Error getting deployment: %s", err)
return
}

log.Infof("Starting autoscalers for: %s. target deployment: %s", scaledObject.GetName(), deployment.GetName())
}

func (c *controller) syncDeletedScaledObject(obj interface{}) {
scaledObject := obj.(*kore_v1alpha1.ScaledObject)
log.Infof("Notified about deletion of ScaledObject: %s", scaledObject.GetName())
}

func (c *controller) Run(ctx context.Context) {
ctx, cancel := context.WithCancel(ctx)
defer cancel()
c.ctx = ctx
go func() {
<-ctx.Done()
log.Infof("Controller is shutting down")
}()
log.Infof("Controller is started")
c.scaledObjectsInformer.Run(ctx.Done())
cancel()
}
56 changes: 56 additions & 0 deletions pkg/kubernetes/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package kubernetes

import (
// Uncomment the following line to load the gcp plugin (only required to authenticate against GKE clusters).
// _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
clientset "github.com/Azure/Kore/pkg/client/clientset/versioned"
"github.com/kelseyhightower/envconfig"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)

const envconfigPrefix = "KUBE"

type config struct {
MasterURL string `envconfig:"MASTER"`
KubeConfigPath string `envconfig:"CONFIG"`
}

func Config() (*rest.Config, error) {
c := config{}
err := envconfig.Process(envconfigPrefix, &c)
if err != nil {
return nil, err
}
var cfg *rest.Config
if c.MasterURL == "" && c.KubeConfigPath == "" {
cfg, err = rest.InClusterConfig()
} else {
cfg, err = clientcmd.BuildConfigFromFlags(c.MasterURL, c.KubeConfigPath)
}
if err != nil {
return nil, err
}

return cfg, nil
}

func GetClients() (*clientset.Clientset, *kubernetes.Clientset, error) {
cfg, err := Config()
if err != nil {
return nil, nil, err
}

koreClient, err := clientset.NewForConfig(cfg)
if err != nil {
return nil, nil, err
}

kubeClient, err := kubernetes.NewForConfig(cfg)
if err != nil {
return nil, nil, err
}

return koreClient, kubeClient, nil
}
40 changes: 0 additions & 40 deletions pkg/signals/signal.go

This file was deleted.

23 changes: 0 additions & 23 deletions pkg/signals/signal_posix.go

This file was deleted.

20 changes: 0 additions & 20 deletions pkg/signals/signal_windows.go

This file was deleted.

Loading