From 91171b92016b1c9b34b6b74e93636d7c18f3d19e Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Tue, 20 Feb 2018 12:42:58 -0700 Subject: [PATCH] Introduce scaledContext --- config/context.go | 108 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 2 deletions(-) diff --git a/config/context.go b/config/context.go index fc64c70b..b053e2ff 100644 --- a/config/context.go +++ b/config/context.go @@ -20,6 +20,7 @@ import ( projectv3 "github.com/rancher/types/apis/project.cattle.io/v3" projectSchema "github.com/rancher/types/apis/project.cattle.io/v3/schema" rbacv1 "github.com/rancher/types/apis/rbac.authorization.k8s.io/v1" + "github.com/rancher/types/config/dialer" "github.com/sirupsen/logrus" "k8s.io/api/core/v1" "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" @@ -36,6 +37,106 @@ var ( ManagementStorageContext types.StorageContext = "mgmt" ) +type ManagementGetter interface { + GetManagement() managementv3.Interface +} + +type ScaledContext struct { + ClientGetter proxy.ClientGetter + LocalConfig *rest.Config + RESTConfig rest.Config + UnversionedClient rest.Interface + K8sClient kubernetes.Interface + APIExtClient clientset.Interface + Schemas *types.Schemas + AccessControl types.AccessControl + Dialer dialer.Factory + Leader bool + + Management managementv3.Interface + Project projectv3.Interface + RBAC rbacv1.Interface + Core corev1.Interface +} + +func (c *ScaledContext) controllers() []controller.Starter { + return []controller.Starter{ + c.Management, + c.Project, + c.RBAC, + c.Core, + } +} + +func (c *ScaledContext) GetManagement() managementv3.Interface { + return c.Management +} + +func NewScaledContext(config rest.Config) (*ScaledContext, error) { + var err error + + context := &ScaledContext{ + RESTConfig: config, + } + + context.Management, err = managementv3.NewForConfig(config) + if err != nil { + return nil, err + } + + context.Project, err = projectv3.NewForConfig(config) + if err != nil { + return nil, err + } + + context.K8sClient, err = kubernetes.NewForConfig(&config) + if err != nil { + return nil, err + } + + context.RBAC, err = rbacv1.NewForConfig(config) + if err != nil { + return nil, err + } + + context.Core, err = corev1.NewForConfig(config) + if err != nil { + return nil, err + } + context.Project, err = projectv3.NewForConfig(config) + if err != nil { + return nil, err + } + + dynamicConfig := config + if dynamicConfig.NegotiatedSerializer == nil { + configConfig := dynamic.ContentConfig() + dynamicConfig.NegotiatedSerializer = configConfig.NegotiatedSerializer + } + + context.UnversionedClient, err = rest.UnversionedRESTClientFor(&dynamicConfig) + if err != nil { + return nil, err + } + + context.APIExtClient, err = clientset.NewForConfig(&dynamicConfig) + if err != nil { + return nil, err + } + + context.Schemas = types.NewSchemas(). + AddSchemas(managementSchema.Schemas). + AddSchemas(clusterSchema.Schemas). + AddSchemas(projectSchema.Schemas) + + return context, err +} + +func (c *ScaledContext) Start(ctx context.Context) error { + logrus.Info("Starting API controllers") + return controller.SyncThenStart(ctx, 5, c.controllers()...) +} + type ManagementContext struct { eventBroadcaster record.EventBroadcaster @@ -49,7 +150,7 @@ type ManagementContext struct { EventLogger event.Logger Schemas *types.Schemas Scheme *runtime.Scheme - AccessControl types.AccessControl + Dialer dialer.Factory Management managementv3.Interface Project projectv3.Interface @@ -63,10 +164,13 @@ func (c *ManagementContext) controllers() []controller.Starter { c.Project, c.RBAC, c.Core, - c.Project, } } +func (c *ManagementContext) GetManagement() managementv3.Interface { + return c.Management +} + type UserContext struct { Management *ManagementContext ClusterName string