@@ -19,21 +19,28 @@ package main
1919import (
2020 "flag"
2121 "os"
22-
23- // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
24- // to ensure that exec-entrypoint and run can make use of them.
25- _ "k8s.io/client-go/plugin/pkg/client/auth"
22+ "strconv"
2623
2724 configv1 "github.com/openshift/api/config/v1"
25+
26+ corev1 "k8s.io/api/core/v1"
27+ apierrors "k8s.io/apimachinery/pkg/api/errors"
28+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2829 "k8s.io/apimachinery/pkg/runtime"
2930 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
31+ "k8s.io/client-go/kubernetes"
3032 clientgoscheme "k8s.io/client-go/kubernetes/scheme"
33+ // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
34+ // to ensure that exec-entrypoint and run can make use of them.
35+ _ "k8s.io/client-go/plugin/pkg/client/auth"
36+
3137 ctrl "sigs.k8s.io/controller-runtime"
3238 "sigs.k8s.io/controller-runtime/pkg/healthz"
3339 "sigs.k8s.io/controller-runtime/pkg/log/zap"
3440
3541 "github.com/project-codeflare/instascale/controllers"
36- //+kubebuilder:scaffold:imports
42+ "github.com/project-codeflare/instascale/pkg/config"
43+ // +kubebuilder:scaffold:imports
3744 mcadv1beta1 "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/apis/controller/v1beta1"
3845)
3946
@@ -46,7 +53,7 @@ func init() {
4653 utilruntime .Must (clientgoscheme .AddToScheme (scheme ))
4754 utilruntime .Must (configv1 .Install (scheme ))
4855
49- //+kubebuilder:scaffold:scheme
56+ // +kubebuilder:scaffold:scheme
5057 _ = mcadv1beta1 .AddToScheme (scheme )
5158}
5259
@@ -71,7 +78,47 @@ func main() {
7178
7279 ctrl .SetLogger (zap .New (zap .UseFlagOptions (& opts )))
7380
74- mgr , err := ctrl .NewManager (ctrl .GetConfigOrDie (), ctrl.Options {
81+ ctx := ctrl .SetupSignalHandler ()
82+
83+ restConfig := ctrl .GetConfigOrDie ()
84+ kubeClient , err := kubernetes .NewForConfig (restConfig )
85+ if err != nil {
86+ setupLog .Error (err , "Error creating Kubernetes client" )
87+ os .Exit (1 )
88+ }
89+
90+ // InstaScale configuration
91+ cfg := config.InstaScaleConfiguration {
92+ MaxScaleoutAllowed : 3 ,
93+ }
94+
95+ // Source InstaScale ConfigMap
96+ if InstaScaleConfigMap , err := kubeClient .CoreV1 ().ConfigMaps (configsNamespace ).Get (ctx , "instascale-config" , metav1.GetOptions {}); err != nil {
97+ setupLog .Error (err , "Error reading 'instascale-config' ConfigMap" )
98+ os .Exit (1 )
99+ } else if maxScaleoutAllowed := InstaScaleConfigMap .Data ["maxScaleoutAllowed" ]; maxScaleoutAllowed != "" {
100+ if max , err := strconv .Atoi (maxScaleoutAllowed ); err != nil {
101+ setupLog .Error (err , "Error converting 'maxScaleoutAllowed' to integer" )
102+ os .Exit (1 )
103+ } else {
104+ cfg .MaxScaleoutAllowed = int32 (max )
105+ }
106+ }
107+
108+ // Source OCM Secret optionally
109+ if OCMSecret , err := kubeClient .CoreV1 ().Secrets (ocmSecretNamespace ).Get (ctx , "instascale-ocm-secret" , metav1.GetOptions {}); apierrors .IsNotFound (err ) {
110+ setupLog .Info ("If you are looking to use OCM, ensure the 'instascale-ocm-secret' Secret has been created" )
111+ } else if err != nil {
112+ setupLog .Error (err , "Error checking if OCM Secret exists" )
113+ os .Exit (1 )
114+ } else {
115+ cfg .OCMSecretRef = & corev1.SecretReference {
116+ Namespace : OCMSecret .Namespace ,
117+ Name : OCMSecret .Name ,
118+ }
119+ }
120+
121+ mgr , err := ctrl .NewManager (restConfig , ctrl.Options {
75122 Scheme : scheme ,
76123 MetricsBindAddress : metricsAddr ,
77124 Port : 9443 ,
@@ -85,15 +132,14 @@ func main() {
85132 }
86133
87134 if err = (& controllers.AppWrapperReconciler {
88- Client : mgr .GetClient (),
89- Scheme : mgr .GetScheme (),
90- ConfigsNamespace : configsNamespace ,
91- OcmSecretNamespace : ocmSecretNamespace ,
135+ Client : mgr .GetClient (),
136+ Scheme : mgr .GetScheme (),
137+ Config : cfg ,
92138 }).SetupWithManager (mgr ); err != nil {
93139 setupLog .Error (err , "unable to create controller" , "controller" , "AppWrapper" )
94140 os .Exit (1 )
95141 }
96- //+kubebuilder:scaffold:builder
142+ // +kubebuilder:scaffold:builder
97143
98144 if err := mgr .AddHealthzCheck ("healthz" , healthz .Ping ); err != nil {
99145 setupLog .Error (err , "unable to set up health check" )
@@ -105,7 +151,7 @@ func main() {
105151 }
106152
107153 setupLog .Info ("starting manager" )
108- if err := mgr .Start (ctrl . SetupSignalHandler () ); err != nil {
154+ if err := mgr .Start (ctx ); err != nil {
109155 setupLog .Error (err , "problem running manager" )
110156 os .Exit (1 )
111157 }
0 commit comments