mirror of
https://github.com/fluxcd/flagger.git
synced 2026-04-15 06:57:34 +00:00
Change mesh providers based on cmd flag
This commit is contained in:
@@ -134,6 +134,7 @@ func main() {
|
||||
metricsServer,
|
||||
logger,
|
||||
slack,
|
||||
meshProvider,
|
||||
)
|
||||
|
||||
flaggerInformerFactory.Start(stopCh)
|
||||
|
||||
@@ -44,6 +44,7 @@ type Controller struct {
|
||||
observer CanaryObserver
|
||||
recorder CanaryRecorder
|
||||
notifier *notifier.Slack
|
||||
meshProvider string
|
||||
}
|
||||
|
||||
func NewController(
|
||||
@@ -55,6 +56,7 @@ func NewController(
|
||||
metricServer string,
|
||||
logger *zap.SugaredLogger,
|
||||
notifier *notifier.Slack,
|
||||
meshProvider string,
|
||||
|
||||
) *Controller {
|
||||
logger.Debug("Creating event broadcaster")
|
||||
@@ -100,6 +102,7 @@ func NewController(
|
||||
observer: observer,
|
||||
recorder: recorder,
|
||||
notifier: notifier,
|
||||
meshProvider: meshProvider,
|
||||
}
|
||||
|
||||
flaggerInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
|
||||
|
||||
@@ -96,12 +96,11 @@ func (c *Controller) advanceCanary(name string, namespace string, skipLivenessCh
|
||||
}
|
||||
|
||||
// init routers
|
||||
rf := router.NewFactory(c.kubeClient, c.flaggerClient, c.logger, c.istioClient)
|
||||
var meshRouter router.Interface
|
||||
meshRouter = rf.IstioRouter()
|
||||
routerFactory := router.NewFactory(c.kubeClient, c.flaggerClient, c.logger, c.istioClient)
|
||||
meshRouter := routerFactory.MeshRouter(c.meshProvider)
|
||||
|
||||
// create ClusterIP services and virtual service if needed
|
||||
if err := rf.KubernetesRouter().Sync(cd); err != nil {
|
||||
if err := routerFactory.KubernetesRouter().Sync(cd); err != nil {
|
||||
c.recordEventWarningf(cd, "%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@ import (
|
||||
"k8s.io/client-go/kubernetes"
|
||||
)
|
||||
|
||||
// AppmeshRouter is managing AppMesh virtual services
|
||||
type AppmeshRouter struct {
|
||||
// AppMeshRouter is managing AppMesh virtual services
|
||||
type AppMeshRouter struct {
|
||||
kubeClient kubernetes.Interface
|
||||
appmeshClient clientset.Interface
|
||||
flaggerClient clientset.Interface
|
||||
@@ -23,7 +23,7 @@ type AppmeshRouter struct {
|
||||
}
|
||||
|
||||
// Sync creates or updates App Mesh virtual nodes and virtual services
|
||||
func (ar *AppmeshRouter) Sync(canary *flaggerv1.Canary) error {
|
||||
func (ar *AppMeshRouter) Sync(canary *flaggerv1.Canary) error {
|
||||
if canary.Spec.Service.MeshName == "" {
|
||||
return fmt.Errorf("mesh name cannot be empty")
|
||||
}
|
||||
@@ -67,7 +67,7 @@ func (ar *AppmeshRouter) Sync(canary *flaggerv1.Canary) error {
|
||||
|
||||
// syncVirtualNode creates or updates a virtual node
|
||||
// the virtual node naming format is name-role-namespace
|
||||
func (ar *AppmeshRouter) syncVirtualNode(canary *flaggerv1.Canary, name string, host string) error {
|
||||
func (ar *AppMeshRouter) syncVirtualNode(canary *flaggerv1.Canary, name string, host string) error {
|
||||
backends := []appmeshv1alpha1.Backend{}
|
||||
for _, b := range canary.Spec.Service.Backends {
|
||||
backend := appmeshv1alpha1.Backend{
|
||||
@@ -145,7 +145,7 @@ func (ar *AppmeshRouter) syncVirtualNode(canary *flaggerv1.Canary, name string,
|
||||
}
|
||||
|
||||
// syncVirtualService creates or updates a virtual service
|
||||
func (ar *AppmeshRouter) syncVirtualService(canary *flaggerv1.Canary, name string) error {
|
||||
func (ar *AppMeshRouter) syncVirtualService(canary *flaggerv1.Canary, name string) error {
|
||||
targetName := canary.Spec.TargetRef.Name
|
||||
canaryVirtualNode := fmt.Sprintf("%s-canary-%s", targetName, canary.Namespace)
|
||||
primaryVirtualNode := fmt.Sprintf("%s-primary-%s", targetName, canary.Namespace)
|
||||
@@ -238,7 +238,7 @@ func (ar *AppmeshRouter) syncVirtualService(canary *flaggerv1.Canary, name strin
|
||||
}
|
||||
|
||||
// GetRoutes returns the destinations weight for primary and canary
|
||||
func (ar *AppmeshRouter) GetRoutes(canary *flaggerv1.Canary) (
|
||||
func (ar *AppMeshRouter) GetRoutes(canary *flaggerv1.Canary) (
|
||||
primaryWeight int,
|
||||
canaryWeight int,
|
||||
err error,
|
||||
@@ -279,7 +279,7 @@ func (ar *AppmeshRouter) GetRoutes(canary *flaggerv1.Canary) (
|
||||
}
|
||||
|
||||
// SetRoutes updates the destinations weight for primary and canary
|
||||
func (ar *AppmeshRouter) SetRoutes(
|
||||
func (ar *AppMeshRouter) SetRoutes(
|
||||
canary *flaggerv1.Canary,
|
||||
primaryWeight int,
|
||||
canaryWeight int,
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
|
||||
func TestAppmeshRouter_Sync(t *testing.T) {
|
||||
mocks := setupfakeClients()
|
||||
router := &AppmeshRouter{
|
||||
router := &AppMeshRouter{
|
||||
logger: mocks.logger,
|
||||
flaggerClient: mocks.flaggerClient,
|
||||
appmeshClient: mocks.meshClient,
|
||||
@@ -132,7 +132,7 @@ func TestAppmeshRouter_Sync(t *testing.T) {
|
||||
|
||||
func TestAppmeshRouter_GetSetRoutes(t *testing.T) {
|
||||
mocks := setupfakeClients()
|
||||
router := &AppmeshRouter{
|
||||
router := &AppMeshRouter{
|
||||
logger: mocks.logger,
|
||||
flaggerClient: mocks.flaggerClient,
|
||||
appmeshClient: mocks.meshClient,
|
||||
|
||||
+15
-5
@@ -8,7 +8,7 @@ import (
|
||||
|
||||
type Factory struct {
|
||||
kubeClient kubernetes.Interface
|
||||
istioClient clientset.Interface
|
||||
meshClient clientset.Interface
|
||||
flaggerClient clientset.Interface
|
||||
logger *zap.SugaredLogger
|
||||
}
|
||||
@@ -16,15 +16,16 @@ type Factory struct {
|
||||
func NewFactory(kubeClient kubernetes.Interface,
|
||||
flaggerClient clientset.Interface,
|
||||
logger *zap.SugaredLogger,
|
||||
istioClient clientset.Interface) *Factory {
|
||||
meshClient clientset.Interface) *Factory {
|
||||
return &Factory{
|
||||
istioClient: istioClient,
|
||||
meshClient: meshClient,
|
||||
kubeClient: kubeClient,
|
||||
flaggerClient: flaggerClient,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
// KubernetesRouter returns a ClusterIP service router
|
||||
func (factory *Factory) KubernetesRouter() *KubernetesRouter {
|
||||
return &KubernetesRouter{
|
||||
logger: factory.logger,
|
||||
@@ -33,11 +34,20 @@ func (factory *Factory) KubernetesRouter() *KubernetesRouter {
|
||||
}
|
||||
}
|
||||
|
||||
func (factory *Factory) IstioRouter() *IstioRouter {
|
||||
// MeshRouter returns a service mesh router (Istio or AppMesh)
|
||||
func (factory *Factory) MeshRouter(provider string) Interface {
|
||||
if provider == "appmesh" {
|
||||
return &AppMeshRouter{
|
||||
logger: factory.logger,
|
||||
flaggerClient: factory.flaggerClient,
|
||||
kubeClient: factory.kubeClient,
|
||||
appmeshClient: factory.meshClient,
|
||||
}
|
||||
}
|
||||
return &IstioRouter{
|
||||
logger: factory.logger,
|
||||
flaggerClient: factory.flaggerClient,
|
||||
kubeClient: factory.kubeClient,
|
||||
istioClient: factory.istioClient,
|
||||
istioClient: factory.meshClient,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user