Skip to content

Commit

Permalink
KuadrantGH-661 comments p1
Browse files Browse the repository at this point in the history
  • Loading branch information
maksymvavilov committed Feb 21, 2024
1 parent 9cc846b commit 9e08bd5
Show file tree
Hide file tree
Showing 2 changed files with 126 additions and 112 deletions.
103 changes: 103 additions & 0 deletions cmd/gateway_controller/addon-manager/addon-manager.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package addon_manager

import (
"context"
"embed"
"os"

operatorsv1 "github.com/operator-framework/api/pkg/operators/v1"
operatorsv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1"
"open-cluster-management.io/addon-framework/pkg/addonfactory"
"open-cluster-management.io/addon-framework/pkg/addonmanager"
addonapiv1alpha1 "open-cluster-management.io/api/addon/v1alpha1"
clusterv1 "open-cluster-management.io/api/cluster/v1"

"k8s.io/apimachinery/pkg/runtime"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
ctrl "sigs.k8s.io/controller-runtime"

kuadrantv1beta1 "github.com/kuadrant/kuadrant-operator/api/v1beta1"

"github.com/Kuadrant/multicluster-gateway-controller/pkg/ocm/hub"
)

//go:embed manifests
var FS embed.FS

const (
addonName = "kuadrant-addon"
)

type AddonRunnable struct{}

func (r AddonRunnable) Start(ctx context.Context) error {
setupLog := ctrl.Log.WithName("addon manager setup")
setupLog.Info("starting add-on manager")
addonScheme := runtime.NewScheme()
utilruntime.Must(operatorsv1alpha1.AddToScheme(addonScheme))
utilruntime.Must(operatorsv1.AddToScheme(addonScheme))
utilruntime.Must(kuadrantv1beta1.AddToScheme(addonScheme))

kubeConfig := ctrl.GetConfigOrDie()

addonMgr, err := addonmanager.New(kubeConfig)
if err != nil {
setupLog.Error(err, "unable to setup addon manager")
os.Exit(1)
}

agentAddon, err := addonfactory.NewAgentAddonFactory(addonName, FS, "manifests").
WithAgentHealthProber(hub.AddonHealthProber()).
WithScheme(addonScheme).
WithGetValuesFuncs(GetDefaultValues, addonfactory.GetValuesFromAddonAnnotation).
BuildTemplateAgentAddon()
if err != nil {
setupLog.Error(err, "failed to build agent addon")
os.Exit(1)
}
err = addonMgr.AddAgent(agentAddon)
if err != nil {
setupLog.Error(err, "failed to add addon agent")
os.Exit(1)
}

if err = addonMgr.Start(ctx); err != nil {
setupLog.Error(err, "problem running addon manager")
return err
}

<-ctx.Done()

return nil
}

func GetDefaultValues(cluster *clusterv1.ManagedCluster,
addon *addonapiv1alpha1.ManagedClusterAddOn) (addonfactory.Values, error) {

defaultIstioOperator := "istiocontrolplane"
defaultIstioOperatorNS := "istio-system"
defaultIstioConfigMap := "istio"
defaultCatalog := "operatorhubio-catalog"
defaultCatalogNS := "olm"
defaultChannel := "stable"

manifestConfig := struct {
IstioOperator string
IstioConfigMapName string
IstioOperatorNamespace string
ClusterName string
CatalogSource string
CatalogSourceNS string
Channel string
}{
ClusterName: cluster.Name,
IstioOperator: defaultIstioOperator,
IstioConfigMapName: defaultIstioConfigMap,
IstioOperatorNamespace: defaultIstioOperatorNS,
CatalogSource: defaultCatalog,
CatalogSourceNS: defaultCatalogNS,
Channel: defaultChannel,
}

return addonfactory.StructToValues(manifestConfig), nil
}
135 changes: 23 additions & 112 deletions cmd/gateway_controller/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,15 @@ limitations under the License.
package main

import (
"context"
"embed"
"flag"
"os"
"sync"

certmanv1 "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1"
operatorsv1 "github.com/operator-framework/api/pkg/operators/v1"
operatorsv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1"
"open-cluster-management.io/addon-framework/pkg/addonfactory"
"open-cluster-management.io/addon-framework/pkg/addonmanager"
addonapiv1alpha1 "open-cluster-management.io/api/addon/v1alpha1"
clusterv1 "open-cluster-management.io/api/cluster/v1"
clusterv1beta2 "open-cluster-management.io/api/cluster/v1beta1"
workv1 "open-cluster-management.io/api/work/v1"

corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/client-go/dynamic"
Expand All @@ -50,11 +41,9 @@ import (
"sigs.k8s.io/controller-runtime/pkg/webhook"
gatewayapiv1 "sigs.k8s.io/gateway-api/apis/v1"

kuadrantv1beta1 "github.com/kuadrant/kuadrant-operator/api/v1beta1"

addon_manager "github.com/Kuadrant/multicluster-gateway-controller/cmd/gateway_controller/addon-manager"
"github.com/Kuadrant/multicluster-gateway-controller/pkg/apis/v1alpha1"
"github.com/Kuadrant/multicluster-gateway-controller/pkg/controllers/gateway"
"github.com/Kuadrant/multicluster-gateway-controller/pkg/ocm/hub"
"github.com/Kuadrant/multicluster-gateway-controller/pkg/placement"
"github.com/Kuadrant/multicluster-gateway-controller/pkg/policysync"
//+kubebuilder:scaffold:imports
Expand All @@ -64,14 +53,6 @@ var (
metricsAddr string
enableLeaderElection bool
probeAddr string
setupLog = ctrl.Log.WithName("setup")

//go:embed addon-manager/manifests
FS embed.FS
)

const (
addonName = "kuadrant-addon"
)

func init() {
Expand All @@ -85,75 +66,23 @@ func init() {
//+kubebuilder:scaffold:scheme
}

func GetDefaultValues(cluster *clusterv1.ManagedCluster,
addon *addonapiv1alpha1.ManagedClusterAddOn) (addonfactory.Values, error) {

defaultIstioOperator := "istiocontrolplane"
defaultIstioOperatorNS := "istio-system"
defaultIstioConfigMap := "istio"
defaultCatalog := "operatorhubio-catalog"
defaultCatalogNS := "olm"
defaultChannel := "stable"

manifestConfig := struct {
IstioOperator string
IstioConfigMapName string
IstioOperatorNamespace string
ClusterName string
CatalogSource string
CatalogSourceNS string
Channel string
}{
ClusterName: cluster.Name,
IstioOperator: defaultIstioOperator,
IstioConfigMapName: defaultIstioConfigMap,
IstioOperatorNamespace: defaultIstioOperatorNS,
CatalogSource: defaultCatalog,
CatalogSourceNS: defaultCatalogNS,
Channel: defaultChannel,
}

return addonfactory.StructToValues(manifestConfig), nil
}

func startAddonManager(ctx context.Context) {
setupLog.Info("starting add-on manager")
addonScheme := runtime.NewScheme()
utilruntime.Must(operatorsv1alpha1.AddToScheme(addonScheme))
utilruntime.Must(operatorsv1.AddToScheme(addonScheme))
utilruntime.Must(kuadrantv1beta1.AddToScheme(addonScheme))

kubeConfig := ctrl.GetConfigOrDie()

addonMgr, err := addonmanager.New(kubeConfig)
if err != nil {
setupLog.Error(err, "unable to setup addon manager")
os.Exit(1)
}

agentAddon, err := addonfactory.NewAgentAddonFactory(addonName, FS, "addon-manager/manifests").
WithAgentHealthProber(hub.AddonHealthProber()).
WithScheme(addonScheme).
WithGetValuesFuncs(GetDefaultValues, addonfactory.GetValuesFromAddonAnnotation).
BuildTemplateAgentAddon()
if err != nil {
setupLog.Error(err, "failed to build agent addon")
os.Exit(1)
}
err = addonMgr.AddAgent(agentAddon)
if err != nil {
setupLog.Error(err, "failed to add addon agent")
os.Exit(1)
func main() {
flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.")
flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.")
flag.BoolVar(&enableLeaderElection, "leader-elect", false,
"Enable leader election for controller manager. "+
"Enabling this will ensure there is only one active controller manager.")
opts := zap.Options{
Development: true,
}
opts.BindFlags(flag.CommandLine)
flag.Parse()

if err := addonMgr.Start(ctx); err != nil {
setupLog.Error(err, "problem running addon manager")
os.Exit(1)
}
ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))
setupLog := ctrl.Log.WithName("gateway controller setup")

}
ctx := ctrl.SetupSignalHandler()

func startGatewayController(ctx context.Context) {
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
Scheme: scheme.Scheme,
Metrics: metricsserver.Options{BindAddress: metricsAddr},
Expand Down Expand Up @@ -204,45 +133,27 @@ func startGatewayController(ctx context.Context) {

//+kubebuilder:scaffold:builder

if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {
if err = mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {
setupLog.Error(err, "unable to set up health check")
os.Exit(1)
}
if err := mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil {
if err = mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil {
setupLog.Error(err, "unable to set up ready check")
os.Exit(1)
}

setupLog.Info("starting manager")

if err := mgr.Start(ctx); err != nil {
setupLog.Error(err, "problem running controller manager")
// add addon-manager
if err = mgr.Add(addon_manager.AddonRunnable{}); err != nil {
setupLog.Error(err, "unable to add addon manager runnable")
os.Exit(1)
}

}
setupLog.Info("starting manager")

func main() {
flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.")
flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.")
flag.BoolVar(&enableLeaderElection, "leader-elect", false,
"Enable leader election for controller manager. "+
"Enabling this will ensure there is only one active controller manager.")
opts := zap.Options{
Development: true,
if err = mgr.Start(ctx); err != nil {
setupLog.Error(err, "problem running controller manager")
os.Exit(1)
}
opts.BindFlags(flag.CommandLine)
flag.Parse()

ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))

ctx := ctrl.SetupSignalHandler()

wg := sync.WaitGroup{}
wg.Add(2)
go startAddonManager(ctx)
go startGatewayController(ctx)
wg.Wait()

<-ctx.Done()
}

0 comments on commit 9e08bd5

Please sign in to comment.