Skip to content

Commit

Permalink
Adopt to the latest changes on master
Browse files Browse the repository at this point in the history
  • Loading branch information
mumoshu committed Nov 25, 2019
1 parent b5e6d0b commit f6e3c5c
Show file tree
Hide file tree
Showing 17 changed files with 283 additions and 364 deletions.
2 changes: 1 addition & 1 deletion charts/grafana/templates/deployment.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apiVersion: apps/v1beta2
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ template "grafana.fullname" . }}
Expand Down
30 changes: 19 additions & 11 deletions cmd/flagger/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,6 @@ import (
"time"

"github.com/Masterminds/semver"
clientset "github.com/weaveworks/flagger/pkg/client/clientset/versioned"
informers "github.com/weaveworks/flagger/pkg/client/informers/externalversions"
"github.com/weaveworks/flagger/pkg/controller"
"github.com/weaveworks/flagger/pkg/logger"
"github.com/weaveworks/flagger/pkg/metrics"
"github.com/weaveworks/flagger/pkg/notifier"
"github.com/weaveworks/flagger/pkg/router"
"github.com/weaveworks/flagger/pkg/server"
"github.com/weaveworks/flagger/pkg/signals"
"github.com/weaveworks/flagger/pkg/version"
"go.uber.org/zap"
"k8s.io/apimachinery/pkg/util/uuid"
"k8s.io/client-go/kubernetes"
Expand All @@ -30,6 +20,18 @@ import (
"k8s.io/client-go/tools/leaderelection/resourcelock"
"k8s.io/client-go/transport"
_ "k8s.io/code-generator/cmd/client-gen/generators"

"github.com/weaveworks/flagger/pkg/canary"
clientset "github.com/weaveworks/flagger/pkg/client/clientset/versioned"
informers "github.com/weaveworks/flagger/pkg/client/informers/externalversions"
"github.com/weaveworks/flagger/pkg/controller"
"github.com/weaveworks/flagger/pkg/logger"
"github.com/weaveworks/flagger/pkg/metrics"
"github.com/weaveworks/flagger/pkg/notifier"
"github.com/weaveworks/flagger/pkg/router"
"github.com/weaveworks/flagger/pkg/server"
"github.com/weaveworks/flagger/pkg/signals"
"github.com/weaveworks/flagger/pkg/version"
)

var (
Expand Down Expand Up @@ -178,6 +180,12 @@ func main() {
go server.ListenAndServe(port, 3*time.Second, logger, stopCh)

routerFactory := router.NewFactory(cfg, kubeClient, flaggerClient, ingressAnnotationsPrefix, logger, meshClient)
configTracker := canary.ConfigTracker{
Logger: logger,
KubeClient: kubeClient,
FlaggerClient: flaggerClient,
}
canaryFactory := canary.NewFactory(kubeClient, flaggerClient, configTracker, labels, logger)

c := controller.NewController(
kubeClient,
Expand All @@ -187,11 +195,11 @@ func main() {
controlLoopInterval,
logger,
notifierClient,
canaryFactory,
routerFactory,
observerFactory,
meshProvider,
version.VERSION,
labels,
)

flaggerInformerFactory.Start(stopCh)
Expand Down
100 changes: 13 additions & 87 deletions pkg/canary/controller.go
Original file line number Diff line number Diff line change
@@ -1,95 +1,21 @@
package canary

import (
"fmt"

"github.com/mitchellh/hashstructure"
"github.com/weaveworks/flagger/pkg/apis/flagger/v1alpha3"
clientset "github.com/weaveworks/flagger/pkg/client/clientset/versioned"
"go.uber.org/zap"
"k8s.io/client-go/kubernetes"
)

type Controller interface {
Initialize(cd *v1alpha3.Canary, skipLivenessChecks bool) (label string, ports map[string]int32, err error)
Promote(cd *v1alpha3.Canary) error
HasTargetChanged(cd *v1alpha3.Canary) (bool, error)
HasConfigChanged(cd *v1alpha3.Canary) (bool, error)
Scale(cd *v1alpha3.Canary, replicas int32) error
ScaleUp(cd *v1alpha3.Canary) error
MakeStatusConditions(canaryStatus v1alpha3.CanaryStatus,
phase v1alpha3.CanaryPhase) (bool, []v1alpha3.CanaryCondition)
SyncStatus(cd *v1alpha3.Canary, status v1alpha3.CanaryStatus) error
SetStatusFailedChecks(cd *v1alpha3.Canary, val int) error
SetStatusWeight(cd *v1alpha3.Canary, val int) error
SetStatusIterations(cd *v1alpha3.Canary, val int) error
SetStatusPhase(cd *v1alpha3.Canary, phase v1alpha3.CanaryPhase) error
IsPrimaryReady(cd *v1alpha3.Canary) (bool, error)
IsCanaryReady(cd *v1alpha3.Canary) (bool, error)
}

type VersionKind string

func NewVersionKind(ver, kind string) VersionKind {
return VersionKind(fmt.Sprintf("%s/%s", ver, kind))
}

var (
VersionKindDeployment = NewVersionKind("apps/v1", "Deployment")
VersionKindService = NewVersionKind("core/v1", "Service")
)

func NewController(kubeClient kubernetes.Interface, flaggerClient clientset.Interface, logger *zap.SugaredLogger,
labels []string) Controller {
return &multiController{
controllersByVersionKind: map[VersionKind]Controller{
VersionKindDeployment: newDeploymentController(kubeClient, flaggerClient, logger, labels),
VersionKindService: newServiceController(kubeClient, flaggerClient, logger),
},
}
}

func newDeploymentController(kubeClient kubernetes.Interface, flaggerClient clientset.Interface, logger *zap.SugaredLogger,
labels []string) Controller {
return &DeploymentController{
Logger: logger,
KubeClient: kubeClient,
FlaggerClient: flaggerClient,
Labels: labels,
ConfigTracker: ConfigTracker{
Logger: logger,
KubeClient: kubeClient,
FlaggerClient: flaggerClient,
},
}
}

func newServiceController(kubeClient kubernetes.Interface, flaggerClient clientset.Interface, logger *zap.SugaredLogger) Controller {
return &ServiceController{
Logger: logger,
KubeClient: kubeClient,
FlaggerClient: flaggerClient,
}
}

func hasSpecChanged(cd *v1alpha3.Canary, spec interface{}) (bool, error) {
if cd.Status.LastAppliedSpec == "" {
return true, nil
}

newHash, err := hashstructure.Hash(spec, nil)
if err != nil {
return false, fmt.Errorf("hash error %v", err)
}

// do not trigger a canary deployment on manual rollback
if cd.Status.LastPromotedSpec == fmt.Sprintf("%d", newHash) {
return false, nil
}

if cd.Status.LastAppliedSpec != fmt.Sprintf("%d", newHash) {
return true, nil
}

return false, nil
IsPrimaryReady(canary *v1alpha3.Canary) (bool, error)
IsCanaryReady(canary *v1alpha3.Canary) (bool, error)
SyncStatus(canary *v1alpha3.Canary, status v1alpha3.CanaryStatus) error
SetStatusFailedChecks(canary *v1alpha3.Canary, val int) error
SetStatusWeight(canary *v1alpha3.Canary, val int) error
SetStatusIterations(canary *v1alpha3.Canary, val int) error
SetStatusPhase(canary *v1alpha3.Canary, phase v1alpha3.CanaryPhase) error
Initialize(canary *v1alpha3.Canary, skipLivenessChecks bool) (label string, ports map[string]int32, err error)
Promote(canary *v1alpha3.Canary) error
HasTargetChanged(canary *v1alpha3.Canary) (bool, error)
HaveDependenciesChanged(canary *v1alpha3.Canary) (bool, error)
Scale(canary *v1alpha3.Canary, replicas int32) error
ScaleFromZero(canary *v1alpha3.Canary) error
}
Loading

0 comments on commit f6e3c5c

Please sign in to comment.