mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	apiserver: separate apiserver specific configs into ExtraConfig
This commit is contained in:
		@@ -77,11 +77,13 @@ func createAggregatorConfig(kubeAPIServerConfig genericapiserver.Config, command
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	aggregatorConfig := &aggregatorapiserver.Config{
 | 
						aggregatorConfig := &aggregatorapiserver.Config{
 | 
				
			||||||
		GenericConfig:     &genericConfig,
 | 
							GenericConfig:     &genericConfig,
 | 
				
			||||||
		CoreKubeInformers: externalInformers,
 | 
							ExtraConfig: aggregatorapiserver.ExtraConfig{
 | 
				
			||||||
		ProxyClientCert:   certBytes,
 | 
								CoreKubeInformers: externalInformers,
 | 
				
			||||||
		ProxyClientKey:    keyBytes,
 | 
								ProxyClientCert:   certBytes,
 | 
				
			||||||
		ServiceResolver:   serviceResolver,
 | 
								ProxyClientKey:    keyBytes,
 | 
				
			||||||
		ProxyTransport:    proxyTransport,
 | 
								ServiceResolver:   serviceResolver,
 | 
				
			||||||
 | 
								ProxyTransport:    proxyTransport,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return aggregatorConfig, nil
 | 
						return aggregatorConfig, nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,11 +41,12 @@ func createAPIExtensionsConfig(kubeAPIServerConfig genericapiserver.Config, comm
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	apiextensionsConfig := &apiextensionsapiserver.Config{
 | 
						apiextensionsConfig := &apiextensionsapiserver.Config{
 | 
				
			||||||
		GenericConfig:        &genericConfig,
 | 
							GenericConfig:        &genericConfig,
 | 
				
			||||||
		CRDRESTOptionsGetter: apiextensionscmd.NewCRDRESTOptionsGetter(etcdOptions),
 | 
							ExtraConfig: apiextensionsapiserver.ExtraConfig{
 | 
				
			||||||
 | 
								CRDRESTOptionsGetter: apiextensionscmd.NewCRDRESTOptionsGetter(etcdOptions),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return apiextensionsConfig, nil
 | 
						return apiextensionsConfig, nil
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func createAPIExtensionsServer(apiextensionsConfig *apiextensionsapiserver.Config, delegateAPIServer genericapiserver.DelegationTarget) (*apiextensionsapiserver.CustomResourceDefinitions, error) {
 | 
					func createAPIExtensionsServer(apiextensionsConfig *apiextensionsapiserver.Config, delegateAPIServer genericapiserver.DelegationTarget) (*apiextensionsapiserver.CustomResourceDefinitions, error) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -172,8 +172,8 @@ func CreateServerChain(runOptions *options.ServerRunOptions, stopCh <-chan struc
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	aggregatorConfig.ProxyTransport = proxyTransport
 | 
						aggregatorConfig.ExtraConfig.ProxyTransport = proxyTransport
 | 
				
			||||||
	aggregatorConfig.ServiceResolver = serviceResolver
 | 
						aggregatorConfig.ExtraConfig.ServiceResolver = serviceResolver
 | 
				
			||||||
	aggregatorServer, err := createAggregatorServer(aggregatorConfig, kubeAPIServer.GenericAPIServer, apiExtensionsServer.Informers)
 | 
						aggregatorServer, err := createAggregatorServer(aggregatorConfig, kubeAPIServer.GenericAPIServer, apiExtensionsServer.Informers)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		// we don't need special handling for innerStopCh because the aggregator server doesn't create any go routines
 | 
							// we don't need special handling for innerStopCh because the aggregator server doesn't create any go routines
 | 
				
			||||||
@@ -312,40 +312,41 @@ func CreateKubeAPIServerConfig(s *options.ServerRunOptions, nodeTunneler tunnele
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	config := &master.Config{
 | 
						config := &master.Config{
 | 
				
			||||||
		GenericConfig: genericConfig,
 | 
							GenericConfig: genericConfig,
 | 
				
			||||||
 | 
							ExtraConfig: master.ExtraConfig{
 | 
				
			||||||
 | 
								ClientCARegistrationHook: master.ClientCARegistrationHook{
 | 
				
			||||||
 | 
									ClientCA:                         clientCA,
 | 
				
			||||||
 | 
									RequestHeaderUsernameHeaders:     s.Authentication.RequestHeader.UsernameHeaders,
 | 
				
			||||||
 | 
									RequestHeaderGroupHeaders:        s.Authentication.RequestHeader.GroupHeaders,
 | 
				
			||||||
 | 
									RequestHeaderExtraHeaderPrefixes: s.Authentication.RequestHeader.ExtraHeaderPrefixes,
 | 
				
			||||||
 | 
									RequestHeaderCA:                  requestHeaderProxyCA,
 | 
				
			||||||
 | 
									RequestHeaderAllowedNames:        s.Authentication.RequestHeader.AllowedNames,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ClientCARegistrationHook: master.ClientCARegistrationHook{
 | 
								APIResourceConfigSource: storageFactory.APIResourceConfigSource,
 | 
				
			||||||
			ClientCA:                         clientCA,
 | 
								StorageFactory:          storageFactory,
 | 
				
			||||||
			RequestHeaderUsernameHeaders:     s.Authentication.RequestHeader.UsernameHeaders,
 | 
								EnableCoreControllers:   true,
 | 
				
			||||||
			RequestHeaderGroupHeaders:        s.Authentication.RequestHeader.GroupHeaders,
 | 
								EventTTL:                s.EventTTL,
 | 
				
			||||||
			RequestHeaderExtraHeaderPrefixes: s.Authentication.RequestHeader.ExtraHeaderPrefixes,
 | 
								KubeletClientConfig:     s.KubeletConfig,
 | 
				
			||||||
			RequestHeaderCA:                  requestHeaderProxyCA,
 | 
								EnableUISupport:         true,
 | 
				
			||||||
			RequestHeaderAllowedNames:        s.Authentication.RequestHeader.AllowedNames,
 | 
								EnableLogsSupport:       s.EnableLogsHandler,
 | 
				
			||||||
 | 
								ProxyTransport:          proxyTransport,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Tunneler: nodeTunneler,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								ServiceIPRange:       serviceIPRange,
 | 
				
			||||||
 | 
								APIServerServiceIP:   apiServerServiceIP,
 | 
				
			||||||
 | 
								APIServerServicePort: 443,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								ServiceNodePortRange:      s.ServiceNodePortRange,
 | 
				
			||||||
 | 
								KubernetesServiceNodePort: s.KubernetesServiceNodePort,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								MasterCount: s.MasterCount,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
					 | 
				
			||||||
		APIResourceConfigSource: storageFactory.APIResourceConfigSource,
 | 
					 | 
				
			||||||
		StorageFactory:          storageFactory,
 | 
					 | 
				
			||||||
		EnableCoreControllers:   true,
 | 
					 | 
				
			||||||
		EventTTL:                s.EventTTL,
 | 
					 | 
				
			||||||
		KubeletClientConfig:     s.KubeletConfig,
 | 
					 | 
				
			||||||
		EnableUISupport:         true,
 | 
					 | 
				
			||||||
		EnableLogsSupport:       s.EnableLogsHandler,
 | 
					 | 
				
			||||||
		ProxyTransport:          proxyTransport,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		Tunneler: nodeTunneler,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		ServiceIPRange:       serviceIPRange,
 | 
					 | 
				
			||||||
		APIServerServiceIP:   apiServerServiceIP,
 | 
					 | 
				
			||||||
		APIServerServicePort: 443,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		ServiceNodePortRange:      s.ServiceNodePortRange,
 | 
					 | 
				
			||||||
		KubernetesServiceNodePort: s.KubernetesServiceNodePort,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		MasterCount: s.MasterCount,
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if nodeTunneler != nil {
 | 
						if nodeTunneler != nil {
 | 
				
			||||||
		// Use the nodeTunneler's dialer to connect to the kubelet
 | 
							// Use the nodeTunneler's dialer to connect to the kubelet
 | 
				
			||||||
		config.KubeletClientConfig.Dial = nodeTunneler.Dial
 | 
							config.ExtraConfig.KubeletClientConfig.Dial = nodeTunneler.Dial
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return config, sharedInformers, versionedInformers, insecureServingOptions, serviceResolver, nil
 | 
						return config, sharedInformers, versionedInformers, insecureServingOptions, serviceResolver, nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,28 +82,28 @@ func (c *Config) NewBootstrapController(legacyRESTStorage corerest.LegacyRESTSto
 | 
				
			|||||||
		ServiceClient:   serviceClient,
 | 
							ServiceClient:   serviceClient,
 | 
				
			||||||
		NamespaceClient: nsClient,
 | 
							NamespaceClient: nsClient,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		EndpointReconciler: c.EndpointReconcilerConfig.Reconciler,
 | 
							EndpointReconciler: c.ExtraConfig.EndpointReconcilerConfig.Reconciler,
 | 
				
			||||||
		EndpointInterval:   c.EndpointReconcilerConfig.Interval,
 | 
							EndpointInterval:   c.ExtraConfig.EndpointReconcilerConfig.Interval,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SystemNamespaces:         []string{metav1.NamespaceSystem, metav1.NamespacePublic},
 | 
							SystemNamespaces:         []string{metav1.NamespaceSystem, metav1.NamespacePublic},
 | 
				
			||||||
		SystemNamespacesInterval: 1 * time.Minute,
 | 
							SystemNamespacesInterval: 1 * time.Minute,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ServiceClusterIPRegistry: legacyRESTStorage.ServiceClusterIPAllocator,
 | 
							ServiceClusterIPRegistry: legacyRESTStorage.ServiceClusterIPAllocator,
 | 
				
			||||||
		ServiceClusterIPRange:    c.ServiceIPRange,
 | 
							ServiceClusterIPRange:    c.ExtraConfig.ServiceIPRange,
 | 
				
			||||||
		ServiceClusterIPInterval: 3 * time.Minute,
 | 
							ServiceClusterIPInterval: 3 * time.Minute,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ServiceNodePortRegistry: legacyRESTStorage.ServiceNodePortAllocator,
 | 
							ServiceNodePortRegistry: legacyRESTStorage.ServiceNodePortAllocator,
 | 
				
			||||||
		ServiceNodePortRange:    c.ServiceNodePortRange,
 | 
							ServiceNodePortRange:    c.ExtraConfig.ServiceNodePortRange,
 | 
				
			||||||
		ServiceNodePortInterval: 3 * time.Minute,
 | 
							ServiceNodePortInterval: 3 * time.Minute,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		PublicIP: c.GenericConfig.PublicAddress,
 | 
							PublicIP: c.GenericConfig.PublicAddress,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ServiceIP:                 c.APIServerServiceIP,
 | 
							ServiceIP:                 c.ExtraConfig.APIServerServiceIP,
 | 
				
			||||||
		ServicePort:               c.APIServerServicePort,
 | 
							ServicePort:               c.ExtraConfig.APIServerServicePort,
 | 
				
			||||||
		ExtraServicePorts:         c.ExtraServicePorts,
 | 
							ExtraServicePorts:         c.ExtraConfig.ExtraServicePorts,
 | 
				
			||||||
		ExtraEndpointPorts:        c.ExtraEndpointPorts,
 | 
							ExtraEndpointPorts:        c.ExtraConfig.ExtraEndpointPorts,
 | 
				
			||||||
		PublicServicePort:         c.GenericConfig.ReadWritePort,
 | 
							PublicServicePort:         c.GenericConfig.ReadWritePort,
 | 
				
			||||||
		KubernetesServiceNodePort: c.KubernetesServiceNodePort,
 | 
							KubernetesServiceNodePort: c.ExtraConfig.KubernetesServiceNodePort,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -85,9 +85,7 @@ const (
 | 
				
			|||||||
	DefaultEndpointReconcilerInterval = 10 * time.Second
 | 
						DefaultEndpointReconcilerInterval = 10 * time.Second
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Config struct {
 | 
					type ExtraConfig struct {
 | 
				
			||||||
	GenericConfig *genericapiserver.Config
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ClientCARegistrationHook ClientCARegistrationHook
 | 
						ClientCARegistrationHook ClientCARegistrationHook
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	APIResourceConfigSource  serverstorage.APIResourceConfigSource
 | 
						APIResourceConfigSource  serverstorage.APIResourceConfigSource
 | 
				
			||||||
@@ -135,6 +133,11 @@ type Config struct {
 | 
				
			|||||||
	MasterCount int
 | 
						MasterCount int
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Config struct {
 | 
				
			||||||
 | 
						GenericConfig *genericapiserver.Config
 | 
				
			||||||
 | 
						ExtraConfig   ExtraConfig
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// EndpointReconcilerConfig holds the endpoint reconciler and endpoint reconciliation interval to be
 | 
					// EndpointReconcilerConfig holds the endpoint reconciler and endpoint reconciliation interval to be
 | 
				
			||||||
// used by the master.
 | 
					// used by the master.
 | 
				
			||||||
type EndpointReconcilerConfig struct {
 | 
					type EndpointReconcilerConfig struct {
 | 
				
			||||||
@@ -157,42 +160,42 @@ type completedConfig struct {
 | 
				
			|||||||
func (c *Config) Complete() completedConfig {
 | 
					func (c *Config) Complete() completedConfig {
 | 
				
			||||||
	c.GenericConfig.Complete()
 | 
						c.GenericConfig.Complete()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	serviceIPRange, apiServerServiceIP, err := DefaultServiceIPRange(c.ServiceIPRange)
 | 
						serviceIPRange, apiServerServiceIP, err := DefaultServiceIPRange(c.ExtraConfig.ServiceIPRange)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		glog.Fatalf("Error determining service IP ranges: %v", err)
 | 
							glog.Fatalf("Error determining service IP ranges: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if c.ServiceIPRange.IP == nil {
 | 
						if c.ExtraConfig.ServiceIPRange.IP == nil {
 | 
				
			||||||
		c.ServiceIPRange = serviceIPRange
 | 
							c.ExtraConfig.ServiceIPRange = serviceIPRange
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if c.APIServerServiceIP == nil {
 | 
						if c.ExtraConfig.APIServerServiceIP == nil {
 | 
				
			||||||
		c.APIServerServiceIP = apiServerServiceIP
 | 
							c.ExtraConfig.APIServerServiceIP = apiServerServiceIP
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	discoveryAddresses := discovery.DefaultAddresses{DefaultAddress: c.GenericConfig.ExternalAddress}
 | 
						discoveryAddresses := discovery.DefaultAddresses{DefaultAddress: c.GenericConfig.ExternalAddress}
 | 
				
			||||||
	discoveryAddresses.CIDRRules = append(discoveryAddresses.CIDRRules,
 | 
						discoveryAddresses.CIDRRules = append(discoveryAddresses.CIDRRules,
 | 
				
			||||||
		discovery.CIDRRule{IPRange: c.ServiceIPRange, Address: net.JoinHostPort(c.APIServerServiceIP.String(), strconv.Itoa(c.APIServerServicePort))})
 | 
							discovery.CIDRRule{IPRange: c.ExtraConfig.ServiceIPRange, Address: net.JoinHostPort(c.ExtraConfig.APIServerServiceIP.String(), strconv.Itoa(c.ExtraConfig.APIServerServicePort))})
 | 
				
			||||||
	c.GenericConfig.DiscoveryAddresses = discoveryAddresses
 | 
						c.GenericConfig.DiscoveryAddresses = discoveryAddresses
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if c.ServiceNodePortRange.Size == 0 {
 | 
						if c.ExtraConfig.ServiceNodePortRange.Size == 0 {
 | 
				
			||||||
		// TODO: Currently no way to specify an empty range (do we need to allow this?)
 | 
							// TODO: Currently no way to specify an empty range (do we need to allow this?)
 | 
				
			||||||
		// We should probably allow this for clouds that don't require NodePort to do load-balancing (GCE)
 | 
							// We should probably allow this for clouds that don't require NodePort to do load-balancing (GCE)
 | 
				
			||||||
		// but then that breaks the strict nestedness of ServiceType.
 | 
							// but then that breaks the strict nestedness of ServiceType.
 | 
				
			||||||
		// Review post-v1
 | 
							// Review post-v1
 | 
				
			||||||
		c.ServiceNodePortRange = options.DefaultServiceNodePortRange
 | 
							c.ExtraConfig.ServiceNodePortRange = options.DefaultServiceNodePortRange
 | 
				
			||||||
		glog.Infof("Node port range unspecified. Defaulting to %v.", c.ServiceNodePortRange)
 | 
							glog.Infof("Node port range unspecified. Defaulting to %v.", c.ExtraConfig.ServiceNodePortRange)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// enable swagger UI only if general UI support is on
 | 
						// enable swagger UI only if general UI support is on
 | 
				
			||||||
	c.GenericConfig.EnableSwaggerUI = c.GenericConfig.EnableSwaggerUI && c.EnableUISupport
 | 
						c.GenericConfig.EnableSwaggerUI = c.GenericConfig.EnableSwaggerUI && c.ExtraConfig.EnableUISupport
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if c.EndpointReconcilerConfig.Interval == 0 {
 | 
						if c.ExtraConfig.EndpointReconcilerConfig.Interval == 0 {
 | 
				
			||||||
		c.EndpointReconcilerConfig.Interval = DefaultEndpointReconcilerInterval
 | 
							c.ExtraConfig.EndpointReconcilerConfig.Interval = DefaultEndpointReconcilerInterval
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if c.EndpointReconcilerConfig.Reconciler == nil {
 | 
						if c.ExtraConfig.EndpointReconcilerConfig.Reconciler == nil {
 | 
				
			||||||
		// use a default endpoint reconciler if nothing is set
 | 
							// use a default endpoint reconciler if nothing is set
 | 
				
			||||||
		endpointClient := coreclient.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig)
 | 
							endpointClient := coreclient.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig)
 | 
				
			||||||
		c.EndpointReconcilerConfig.Reconciler = NewMasterCountEndpointReconciler(c.MasterCount, endpointClient)
 | 
							c.ExtraConfig.EndpointReconcilerConfig.Reconciler = NewMasterCountEndpointReconciler(c.ExtraConfig.MasterCount, endpointClient)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// this has always been hardcoded true in the past
 | 
						// this has always been hardcoded true in the past
 | 
				
			||||||
@@ -211,7 +214,7 @@ func (c *Config) SkipComplete() completedConfig {
 | 
				
			|||||||
// Certain config fields must be specified, including:
 | 
					// Certain config fields must be specified, including:
 | 
				
			||||||
//   KubeletClientConfig
 | 
					//   KubeletClientConfig
 | 
				
			||||||
func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) (*Master, error) {
 | 
					func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) (*Master, error) {
 | 
				
			||||||
	if reflect.DeepEqual(c.KubeletClientConfig, kubeletclient.KubeletClientConfig{}) {
 | 
						if reflect.DeepEqual(c.ExtraConfig.KubeletClientConfig, kubeletclient.KubeletClientConfig{}) {
 | 
				
			||||||
		return nil, fmt.Errorf("Master.New() called with empty config.KubeletClientConfig")
 | 
							return nil, fmt.Errorf("Master.New() called with empty config.KubeletClientConfig")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -220,10 +223,10 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if c.EnableUISupport {
 | 
						if c.ExtraConfig.EnableUISupport {
 | 
				
			||||||
		routes.UIRedirect{}.Install(s.Handler.NonGoRestfulMux)
 | 
							routes.UIRedirect{}.Install(s.Handler.NonGoRestfulMux)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if c.EnableLogsSupport {
 | 
						if c.ExtraConfig.EnableLogsSupport {
 | 
				
			||||||
		routes.Logs{}.Install(s.Handler.GoRestfulContainer)
 | 
							routes.Logs{}.Install(s.Handler.GoRestfulContainer)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -232,14 +235,14 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// install legacy rest storage
 | 
						// install legacy rest storage
 | 
				
			||||||
	if c.APIResourceConfigSource.AnyResourcesForVersionEnabled(apiv1.SchemeGroupVersion) {
 | 
						if c.ExtraConfig.APIResourceConfigSource.AnyResourcesForVersionEnabled(apiv1.SchemeGroupVersion) {
 | 
				
			||||||
		legacyRESTStorageProvider := corerest.LegacyRESTStorageProvider{
 | 
							legacyRESTStorageProvider := corerest.LegacyRESTStorageProvider{
 | 
				
			||||||
			StorageFactory:       c.StorageFactory,
 | 
								StorageFactory:       c.ExtraConfig.StorageFactory,
 | 
				
			||||||
			ProxyTransport:       c.ProxyTransport,
 | 
								ProxyTransport:       c.ExtraConfig.ProxyTransport,
 | 
				
			||||||
			KubeletClientConfig:  c.KubeletClientConfig,
 | 
								KubeletClientConfig:  c.ExtraConfig.KubeletClientConfig,
 | 
				
			||||||
			EventTTL:             c.EventTTL,
 | 
								EventTTL:             c.ExtraConfig.EventTTL,
 | 
				
			||||||
			ServiceIPRange:       c.ServiceIPRange,
 | 
								ServiceIPRange:       c.ExtraConfig.ServiceIPRange,
 | 
				
			||||||
			ServiceNodePortRange: c.ServiceNodePortRange,
 | 
								ServiceNodePortRange: c.ExtraConfig.ServiceNodePortRange,
 | 
				
			||||||
			LoopbackClientConfig: c.GenericConfig.LoopbackClientConfig,
 | 
								LoopbackClientConfig: c.GenericConfig.LoopbackClientConfig,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		m.InstallLegacyAPI(c.Config, c.Config.GenericConfig.RESTOptionsGetter, legacyRESTStorageProvider)
 | 
							m.InstallLegacyAPI(c.Config, c.Config.GenericConfig.RESTOptionsGetter, legacyRESTStorageProvider)
 | 
				
			||||||
@@ -270,13 +273,13 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
 | 
				
			|||||||
		appsrest.RESTStorageProvider{},
 | 
							appsrest.RESTStorageProvider{},
 | 
				
			||||||
		admissionregistrationrest.RESTStorageProvider{},
 | 
							admissionregistrationrest.RESTStorageProvider{},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	m.InstallAPIs(c.Config.APIResourceConfigSource, c.Config.GenericConfig.RESTOptionsGetter, restStorageProviders...)
 | 
						m.InstallAPIs(c.ExtraConfig.APIResourceConfigSource, c.GenericConfig.RESTOptionsGetter, restStorageProviders...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if c.Tunneler != nil {
 | 
						if c.ExtraConfig.Tunneler != nil {
 | 
				
			||||||
		m.installTunneler(c.Tunneler, corev1client.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig).Nodes())
 | 
							m.installTunneler(c.ExtraConfig.Tunneler, corev1client.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig).Nodes())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m.GenericAPIServer.AddPostStartHookOrDie("ca-registration", c.ClientCARegistrationHook.PostStartHook)
 | 
						m.GenericAPIServer.AddPostStartHookOrDie("ca-registration", c.ExtraConfig.ClientCARegistrationHook.PostStartHook)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return m, nil
 | 
						return m, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -287,7 +290,7 @@ func (m *Master) InstallLegacyAPI(c *Config, restOptionsGetter generic.RESTOptio
 | 
				
			|||||||
		glog.Fatalf("Error building core storage: %v", err)
 | 
							glog.Fatalf("Error building core storage: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if c.EnableCoreControllers {
 | 
						if c.ExtraConfig.EnableCoreControllers {
 | 
				
			||||||
		coreClient := coreclient.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig)
 | 
							coreClient := coreclient.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig)
 | 
				
			||||||
		bootstrapController := c.NewBootstrapController(legacyRESTStorage, coreClient, coreClient)
 | 
							bootstrapController := c.NewBootstrapController(legacyRESTStorage, coreClient, coreClient)
 | 
				
			||||||
		m.GenericAPIServer.AddPostStartHookOrDie("bootstrap-controller", bootstrapController.PostStartHook)
 | 
							m.GenericAPIServer.AddPostStartHookOrDie("bootstrap-controller", bootstrapController.PostStartHook)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,9 +71,11 @@ func setUp(t *testing.T) (*etcdtesting.EtcdTestServer, Config, *assert.Assertion
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	config := &Config{
 | 
						config := &Config{
 | 
				
			||||||
		GenericConfig:           genericapiserver.NewConfig(api.Codecs),
 | 
							GenericConfig:           genericapiserver.NewConfig(api.Codecs),
 | 
				
			||||||
		APIResourceConfigSource: DefaultAPIResourceConfigSource(),
 | 
							ExtraConfig: ExtraConfig{
 | 
				
			||||||
		APIServerServicePort:    443,
 | 
								APIResourceConfigSource: DefaultAPIResourceConfigSource(),
 | 
				
			||||||
		MasterCount:             1,
 | 
								APIServerServicePort:    443,
 | 
				
			||||||
 | 
								MasterCount:             1,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	resourceEncoding := serverstorage.NewDefaultResourceEncodingConfig(api.Registry)
 | 
						resourceEncoding := serverstorage.NewDefaultResourceEncodingConfig(api.Registry)
 | 
				
			||||||
@@ -95,16 +97,16 @@ func setUp(t *testing.T) (*etcdtesting.EtcdTestServer, Config, *assert.Assertion
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	kubeVersion := kubeversion.Get()
 | 
						kubeVersion := kubeversion.Get()
 | 
				
			||||||
	config.GenericConfig.Version = &kubeVersion
 | 
						config.GenericConfig.Version = &kubeVersion
 | 
				
			||||||
	config.StorageFactory = storageFactory
 | 
						config.ExtraConfig.StorageFactory = storageFactory
 | 
				
			||||||
	config.GenericConfig.LoopbackClientConfig = &restclient.Config{APIPath: "/api", ContentConfig: restclient.ContentConfig{NegotiatedSerializer: api.Codecs}}
 | 
						config.GenericConfig.LoopbackClientConfig = &restclient.Config{APIPath: "/api", ContentConfig: restclient.ContentConfig{NegotiatedSerializer: api.Codecs}}
 | 
				
			||||||
	config.GenericConfig.PublicAddress = net.ParseIP("192.168.10.4")
 | 
						config.GenericConfig.PublicAddress = net.ParseIP("192.168.10.4")
 | 
				
			||||||
	config.GenericConfig.LegacyAPIGroupPrefixes = sets.NewString("/api")
 | 
						config.GenericConfig.LegacyAPIGroupPrefixes = sets.NewString("/api")
 | 
				
			||||||
	config.GenericConfig.RequestContextMapper = genericapirequest.NewRequestContextMapper()
 | 
						config.GenericConfig.RequestContextMapper = genericapirequest.NewRequestContextMapper()
 | 
				
			||||||
	config.GenericConfig.LoopbackClientConfig = &restclient.Config{APIPath: "/api", ContentConfig: restclient.ContentConfig{NegotiatedSerializer: api.Codecs}}
 | 
						config.GenericConfig.LoopbackClientConfig = &restclient.Config{APIPath: "/api", ContentConfig: restclient.ContentConfig{NegotiatedSerializer: api.Codecs}}
 | 
				
			||||||
	config.GenericConfig.EnableMetrics = true
 | 
						config.GenericConfig.EnableMetrics = true
 | 
				
			||||||
	config.EnableCoreControllers = false
 | 
						config.ExtraConfig.EnableCoreControllers = false
 | 
				
			||||||
	config.KubeletClientConfig = kubeletclient.KubeletClientConfig{Port: 10250}
 | 
						config.ExtraConfig.KubeletClientConfig = kubeletclient.KubeletClientConfig{Port: 10250}
 | 
				
			||||||
	config.ProxyTransport = utilnet.SetTransportDefaults(&http.Transport{
 | 
						config.ExtraConfig.ProxyTransport = utilnet.SetTransportDefaults(&http.Transport{
 | 
				
			||||||
		Dial:            func(network, addr string) (net.Conn, error) { return nil, nil },
 | 
							Dial:            func(network, addr string) (net.Conn, error) { return nil, nil },
 | 
				
			||||||
		TLSClientConfig: &tls.Config{},
 | 
							TLSClientConfig: &tls.Config{},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
@@ -126,12 +128,12 @@ func TestLegacyRestStorageStrategies(t *testing.T) {
 | 
				
			|||||||
	defer etcdserver.Terminate(t)
 | 
						defer etcdserver.Terminate(t)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	storageProvider := corerest.LegacyRESTStorageProvider{
 | 
						storageProvider := corerest.LegacyRESTStorageProvider{
 | 
				
			||||||
		StorageFactory:       masterCfg.StorageFactory,
 | 
							StorageFactory:       masterCfg.ExtraConfig.StorageFactory,
 | 
				
			||||||
		ProxyTransport:       masterCfg.ProxyTransport,
 | 
							ProxyTransport:       masterCfg.ExtraConfig.ProxyTransport,
 | 
				
			||||||
		KubeletClientConfig:  masterCfg.KubeletClientConfig,
 | 
							KubeletClientConfig:  masterCfg.ExtraConfig.KubeletClientConfig,
 | 
				
			||||||
		EventTTL:             masterCfg.EventTTL,
 | 
							EventTTL:             masterCfg.ExtraConfig.EventTTL,
 | 
				
			||||||
		ServiceIPRange:       masterCfg.ServiceIPRange,
 | 
							ServiceIPRange:       masterCfg.ExtraConfig.ServiceIPRange,
 | 
				
			||||||
		ServiceNodePortRange: masterCfg.ServiceNodePortRange,
 | 
							ServiceNodePortRange: masterCfg.ExtraConfig.ServiceNodePortRange,
 | 
				
			||||||
		LoopbackClientConfig: masterCfg.GenericConfig.LoopbackClientConfig,
 | 
							LoopbackClientConfig: masterCfg.GenericConfig.LoopbackClientConfig,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -162,7 +164,7 @@ func TestCertificatesRestStorageStrategies(t *testing.T) {
 | 
				
			|||||||
	defer etcdserver.Terminate(t)
 | 
						defer etcdserver.Terminate(t)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	certStorageProvider := certificatesrest.RESTStorageProvider{}
 | 
						certStorageProvider := certificatesrest.RESTStorageProvider{}
 | 
				
			||||||
	apiGroupInfo, _ := certStorageProvider.NewRESTStorage(masterCfg.APIResourceConfigSource, masterCfg.GenericConfig.RESTOptionsGetter)
 | 
						apiGroupInfo, _ := certStorageProvider.NewRESTStorage(masterCfg.ExtraConfig.APIResourceConfigSource, masterCfg.GenericConfig.RESTOptionsGetter)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	exceptions := registrytest.StrategyExceptions{
 | 
						exceptions := registrytest.StrategyExceptions{
 | 
				
			||||||
		HasExportStrategy: []string{
 | 
							HasExportStrategy: []string{
 | 
				
			||||||
@@ -205,8 +207,8 @@ func limitedAPIResourceConfigSource() *serverstorage.ResourceConfig {
 | 
				
			|||||||
// newLimitedMaster only enables the core group, the extensions group, the batch group, and the autoscaling group.
 | 
					// newLimitedMaster only enables the core group, the extensions group, the batch group, and the autoscaling group.
 | 
				
			||||||
func newLimitedMaster(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.Assertions) {
 | 
					func newLimitedMaster(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.Assertions) {
 | 
				
			||||||
	etcdserver, config, assert := setUp(t)
 | 
						etcdserver, config, assert := setUp(t)
 | 
				
			||||||
	config.APIResourceConfigSource = limitedAPIResourceConfigSource()
 | 
						config.ExtraConfig.APIResourceConfigSource = limitedAPIResourceConfigSource()
 | 
				
			||||||
	master, err := config.Complete().New(genericapiserver.EmptyDelegate)
 | 
						master, err := config.Complete(sharedInformers).New(genericapiserver.EmptyDelegate)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("Error in bringing up the master: %v", err)
 | 
							t.Fatalf("Error in bringing up the master: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -78,10 +78,14 @@ func init() {
 | 
				
			|||||||
	Scheme.AddUnversionedTypes(unversionedVersion, unversionedTypes...)
 | 
						Scheme.AddUnversionedTypes(unversionedVersion, unversionedTypes...)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ExtraConfig struct {
 | 
				
			||||||
 | 
						CRDRESTOptionsGetter genericregistry.RESTOptionsGetter
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
type Config struct {
 | 
					type Config struct {
 | 
				
			||||||
	GenericConfig *genericapiserver.Config
 | 
						GenericConfig *genericapiserver.Config
 | 
				
			||||||
 | 
						ExtraConfig   ExtraConfig
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	CRDRESTOptionsGetter genericregistry.RESTOptionsGetter
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type CustomResourceDefinitions struct {
 | 
					type CustomResourceDefinitions struct {
 | 
				
			||||||
@@ -173,7 +177,7 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
 | 
				
			|||||||
		s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions().Lister(),
 | 
							s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions().Lister(),
 | 
				
			||||||
		s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions(),
 | 
							s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions(),
 | 
				
			||||||
		delegateHandler,
 | 
							delegateHandler,
 | 
				
			||||||
		c.CRDRESTOptionsGetter,
 | 
							c.ExtraConfig.CRDRESTOptionsGetter,
 | 
				
			||||||
		c.GenericConfig.AdmissionControl,
 | 
							c.GenericConfig.AdmissionControl,
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", crdHandler)
 | 
						s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", crdHandler)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -100,8 +100,10 @@ func (o CustomResourceDefinitionsServerOptions) Config() (*apiserver.Config, err
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config := &apiserver.Config{
 | 
						config := &apiserver.Config{
 | 
				
			||||||
		GenericConfig:        serverConfig,
 | 
							GenericConfig: serverConfig,
 | 
				
			||||||
		CRDRESTOptionsGetter: NewCRDRESTOptionsGetter(*o.RecommendedOptions.Etcd),
 | 
							ExtraConfig: apiserver.ExtraConfig{
 | 
				
			||||||
 | 
								CRDRESTOptionsGetter: NewCRDRESTOptionsGetter(*o.RecommendedOptions.Etcd),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return config, nil
 | 
						return config, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -457,7 +457,7 @@ func TestEtcdStorage(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func getPrefixFromConfig(t *testing.T, config *extensionsapiserver.Config) string {
 | 
					func getPrefixFromConfig(t *testing.T, config *extensionsapiserver.Config) string {
 | 
				
			||||||
	extensionsOptionsGetter, ok := config.CRDRESTOptionsGetter.(extensionsapiserver.CRDRESTOptionsGetter)
 | 
						extensionsOptionsGetter, ok := config.ExtraConfig.CRDRESTOptionsGetter.(extensionsapiserver.CRDRESTOptionsGetter)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		t.Fatal("can't obtain etcd prefix: unable to cast config.CRDRESTOptionsGetter to extensionsapiserver.CRDRESTOptionsGetter")
 | 
							t.Fatal("can't obtain etcd prefix: unable to cast config.CRDRESTOptionsGetter to extensionsapiserver.CRDRESTOptionsGetter")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -88,8 +88,10 @@ func DefaultServerConfig() (*extensionsapiserver.Config, error) {
 | 
				
			|||||||
	customResourceDefinitionRESTOptionsGetter.StorageConfig.Copier = extensionsapiserver.UnstructuredCopier{}
 | 
						customResourceDefinitionRESTOptionsGetter.StorageConfig.Copier = extensionsapiserver.UnstructuredCopier{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config := &extensionsapiserver.Config{
 | 
						config := &extensionsapiserver.Config{
 | 
				
			||||||
		GenericConfig:        genericConfig,
 | 
							GenericConfig: genericConfig,
 | 
				
			||||||
		CRDRESTOptionsGetter: customResourceDefinitionRESTOptionsGetter,
 | 
							ExtraConfig: extensionsapiserver.ExtraConfig{
 | 
				
			||||||
 | 
								CRDRESTOptionsGetter: customResourceDefinitionRESTOptionsGetter,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return config, nil
 | 
						return config, nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,9 +70,7 @@ func init() {
 | 
				
			|||||||
// legacyAPIServiceName is the fixed name of the only non-groupified API version
 | 
					// legacyAPIServiceName is the fixed name of the only non-groupified API version
 | 
				
			||||||
const legacyAPIServiceName = "v1."
 | 
					const legacyAPIServiceName = "v1."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Config struct {
 | 
					type ExtraConfig struct {
 | 
				
			||||||
	GenericConfig *genericapiserver.Config
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// CoreKubeInformers is used to watch kube resources
 | 
						// CoreKubeInformers is used to watch kube resources
 | 
				
			||||||
	CoreKubeInformers kubeinformers.SharedInformerFactory
 | 
						CoreKubeInformers kubeinformers.SharedInformerFactory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -89,6 +87,11 @@ type Config struct {
 | 
				
			|||||||
	ServiceResolver ServiceResolver
 | 
						ServiceResolver ServiceResolver
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Config struct {
 | 
				
			||||||
 | 
						GenericConfig *genericapiserver.RecommendedConfig
 | 
				
			||||||
 | 
						ExtraConfig   ExtraConfig
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// APIAggregator contains state for a Kubernetes cluster master/api server.
 | 
					// APIAggregator contains state for a Kubernetes cluster master/api server.
 | 
				
			||||||
type APIAggregator struct {
 | 
					type APIAggregator struct {
 | 
				
			||||||
	GenericAPIServer *genericapiserver.GenericAPIServer
 | 
						GenericAPIServer *genericapiserver.GenericAPIServer
 | 
				
			||||||
@@ -168,14 +171,14 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
 | 
				
			|||||||
		GenericAPIServer: genericServer,
 | 
							GenericAPIServer: genericServer,
 | 
				
			||||||
		delegateHandler:  delegationTarget.UnprotectedHandler(),
 | 
							delegateHandler:  delegationTarget.UnprotectedHandler(),
 | 
				
			||||||
		contextMapper:    c.GenericConfig.RequestContextMapper,
 | 
							contextMapper:    c.GenericConfig.RequestContextMapper,
 | 
				
			||||||
		proxyClientCert:  c.ProxyClientCert,
 | 
							proxyClientCert:  c.ExtraConfig.ProxyClientCert,
 | 
				
			||||||
		proxyClientKey:   c.ProxyClientKey,
 | 
							proxyClientKey:   c.ExtraConfig.ProxyClientKey,
 | 
				
			||||||
		proxyTransport:   c.ProxyTransport,
 | 
							proxyTransport:   c.ExtraConfig.ProxyTransport,
 | 
				
			||||||
		proxyHandlers:    map[string]*proxyHandler{},
 | 
							proxyHandlers:    map[string]*proxyHandler{},
 | 
				
			||||||
		handledGroups:    sets.String{},
 | 
							handledGroups:    sets.String{},
 | 
				
			||||||
		lister:           informerFactory.Apiregistration().InternalVersion().APIServices().Lister(),
 | 
							lister:           informerFactory.Apiregistration().InternalVersion().APIServices().Lister(),
 | 
				
			||||||
		APIRegistrationInformers: informerFactory,
 | 
							APIRegistrationInformers: informerFactory,
 | 
				
			||||||
		serviceResolver:          c.ServiceResolver,
 | 
							serviceResolver:          c.ExtraConfig.ServiceResolver,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiregistration.GroupName, registry, Scheme, metav1.ParameterCodec, Codecs)
 | 
						apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiregistration.GroupName, registry, Scheme, metav1.ParameterCodec, Codecs)
 | 
				
			||||||
@@ -198,17 +201,17 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
 | 
				
			|||||||
	s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", apisHandler)
 | 
						s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", apisHandler)
 | 
				
			||||||
	s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandle("/apis/", apisHandler)
 | 
						s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandle("/apis/", apisHandler)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apiserviceRegistrationController := NewAPIServiceRegistrationController(informerFactory.Apiregistration().InternalVersion().APIServices(), c.CoreKubeInformers.Core().V1().Services(), s)
 | 
						apiserviceRegistrationController := NewAPIServiceRegistrationController(informerFactory.Apiregistration().InternalVersion().APIServices(), c.ExtraConfig.CoreKubeInformers.Core().V1().Services(), s)
 | 
				
			||||||
	availableController := statuscontrollers.NewAvailableConditionController(
 | 
						availableController := statuscontrollers.NewAvailableConditionController(
 | 
				
			||||||
		informerFactory.Apiregistration().InternalVersion().APIServices(),
 | 
							informerFactory.Apiregistration().InternalVersion().APIServices(),
 | 
				
			||||||
		c.CoreKubeInformers.Core().V1().Services(),
 | 
							c.ExtraConfig.CoreKubeInformers.Core().V1().Services(),
 | 
				
			||||||
		c.CoreKubeInformers.Core().V1().Endpoints(),
 | 
							c.ExtraConfig.CoreKubeInformers.Core().V1().Endpoints(),
 | 
				
			||||||
		apiregistrationClient.Apiregistration(),
 | 
							apiregistrationClient.Apiregistration(),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	s.GenericAPIServer.AddPostStartHook("start-kube-aggregator-informers", func(context genericapiserver.PostStartHookContext) error {
 | 
						s.GenericAPIServer.AddPostStartHook("start-kube-aggregator-informers", func(context genericapiserver.PostStartHookContext) error {
 | 
				
			||||||
		informerFactory.Start(context.StopCh)
 | 
							informerFactory.Start(context.StopCh)
 | 
				
			||||||
		c.CoreKubeInformers.Start(context.StopCh)
 | 
							c.ExtraConfig.CoreKubeInformers.Start(context.StopCh)
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	s.GenericAPIServer.AddPostStartHook("apiservice-registration-controller", func(context genericapiserver.PostStartHookContext) error {
 | 
						s.GenericAPIServer.AddPostStartHook("apiservice-registration-controller", func(context genericapiserver.PostStartHookContext) error {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -151,16 +151,18 @@ func (o AggregatorOptions) RunAggregator(stopCh <-chan struct{}) error {
 | 
				
			|||||||
	serviceResolver := apiserver.NewClusterIPServiceResolver(kubeInformers.Core().V1().Services().Lister())
 | 
						serviceResolver := apiserver.NewClusterIPServiceResolver(kubeInformers.Core().V1().Services().Lister())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config := apiserver.Config{
 | 
						config := apiserver.Config{
 | 
				
			||||||
		GenericConfig:     serverConfig,
 | 
							GenericConfig: serverConfig,
 | 
				
			||||||
		CoreKubeInformers: kubeInformers,
 | 
							ExtraConfig: apiserver.ExtraConfig{
 | 
				
			||||||
		ServiceResolver:   serviceResolver,
 | 
								CoreKubeInformers: kubeInformers,
 | 
				
			||||||
 | 
								ServiceResolver:   serviceResolver,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config.ProxyClientCert, err = ioutil.ReadFile(o.ProxyClientCertFile)
 | 
						config.ExtraConfig.ProxyClientCert, err = ioutil.ReadFile(o.ProxyClientCertFile)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	config.ProxyClientKey, err = ioutil.ReadFile(o.ProxyClientKeyFile)
 | 
						config.ExtraConfig.ProxyClientKey, err = ioutil.ReadFile(o.ProxyClientKeyFile)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,10 +61,15 @@ func init() {
 | 
				
			|||||||
	)
 | 
						)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ExtraConfig struct {
 | 
				
			||||||
 | 
						// Place you custom config here.
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Config struct {
 | 
					type Config struct {
 | 
				
			||||||
	GenericConfig *genericapiserver.Config
 | 
						GenericConfig *genericapiserver.Config
 | 
				
			||||||
	// SharedInformerFactory provides shared informers for resources
 | 
						// SharedInformerFactory provides shared informers for resources
 | 
				
			||||||
	SharedInformerFactory informers.SharedInformerFactory
 | 
						SharedInformerFactory informers.SharedInformerFactory
 | 
				
			||||||
 | 
						ExtraConfig   ExtraConfig
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// WardleServer contains state for a Kubernetes cluster master/api server.
 | 
					// WardleServer contains state for a Kubernetes cluster master/api server.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -126,6 +126,7 @@ func (o WardleServerOptions) Config() (*apiserver.Config, error) {
 | 
				
			|||||||
	config := &apiserver.Config{
 | 
						config := &apiserver.Config{
 | 
				
			||||||
		GenericConfig:         serverConfig,
 | 
							GenericConfig:         serverConfig,
 | 
				
			||||||
		SharedInformerFactory: informerFactory,
 | 
							SharedInformerFactory: informerFactory,
 | 
				
			||||||
 | 
							ExtraConfig:   apiserver.ExtraConfig{},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return config, nil
 | 
						return config, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,7 +44,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func setup(t *testing.T) (*httptest.Server, clientset.Interface, framework.CloseFunc) {
 | 
					func setup(t *testing.T) (*httptest.Server, clientset.Interface, framework.CloseFunc) {
 | 
				
			||||||
	masterConfig := framework.NewIntegrationTestMasterConfig()
 | 
						masterConfig := framework.NewIntegrationTestMasterConfig()
 | 
				
			||||||
	masterConfig.EnableCoreControllers = false
 | 
						masterConfig.ExtraConfig.EnableCoreControllers = false
 | 
				
			||||||
	_, s, closeFn := framework.RunAMaster(masterConfig)
 | 
						_, s, closeFn := framework.RunAMaster(masterConfig)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clientSet, err := clientset.NewForConfig(&restclient.Config{Host: s.URL})
 | 
						clientSet, err := clientset.NewForConfig(&restclient.Config{Host: s.URL})
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -75,7 +75,7 @@ type testRESTOptionsGetter struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (getter *testRESTOptionsGetter) GetRESTOptions(resource schema.GroupResource) (generic.RESTOptions, error) {
 | 
					func (getter *testRESTOptionsGetter) GetRESTOptions(resource schema.GroupResource) (generic.RESTOptions, error) {
 | 
				
			||||||
	storageConfig, err := getter.config.StorageFactory.NewConfig(resource)
 | 
						storageConfig, err := getter.config.ExtraConfig.StorageFactory.NewConfig(resource)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return generic.RESTOptions{}, fmt.Errorf("failed to get storage: %v", err)
 | 
							return generic.RESTOptions{}, fmt.Errorf("failed to get storage: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -690,7 +690,7 @@ func startRealMasterOrDie(t *testing.T, certDir string) (*allClient, clientv3.KV
 | 
				
			|||||||
				t.Fatal(err)
 | 
									t.Fatal(err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			kubeAPIServerConfig.APIResourceConfigSource = &allResourceSource{} // force enable all resources
 | 
								kubeAPIServerConfig.ExtraConfig.APIResourceConfigSource = &allResourceSource{} // force enable all resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			kubeAPIServer, err := app.CreateKubeAPIServer(kubeAPIServerConfig, genericapiserver.EmptyDelegate, sharedInformers)
 | 
								kubeAPIServer, err := app.CreateKubeAPIServer(kubeAPIServerConfig, genericapiserver.EmptyDelegate, sharedInformers)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -357,22 +357,24 @@ func NewMasterConfig() *master.Config {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &master.Config{
 | 
						return &master.Config{
 | 
				
			||||||
		GenericConfig:           genericConfig,
 | 
							GenericConfig: genericConfig,
 | 
				
			||||||
		APIResourceConfigSource: master.DefaultAPIResourceConfigSource(),
 | 
							ExtraConfig: master.ExtraConfig{
 | 
				
			||||||
		StorageFactory:          storageFactory,
 | 
								APIResourceConfigSource: master.DefaultAPIResourceConfigSource(),
 | 
				
			||||||
		EnableCoreControllers:   true,
 | 
								StorageFactory:          storageFactory,
 | 
				
			||||||
		KubeletClientConfig:     kubeletclient.KubeletClientConfig{Port: 10250},
 | 
								EnableCoreControllers:   true,
 | 
				
			||||||
		APIServerServicePort:    443,
 | 
								KubeletClientConfig:     kubeletclient.KubeletClientConfig{Port: 10250},
 | 
				
			||||||
		MasterCount:             1,
 | 
								APIServerServicePort:    443,
 | 
				
			||||||
 | 
								MasterCount:             1,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Returns the master config appropriate for most integration tests.
 | 
					// Returns the master config appropriate for most integration tests.
 | 
				
			||||||
func NewIntegrationTestMasterConfig() *master.Config {
 | 
					func NewIntegrationTestMasterConfig() *master.Config {
 | 
				
			||||||
	masterConfig := NewMasterConfig()
 | 
						masterConfig := NewMasterConfig()
 | 
				
			||||||
	masterConfig.EnableCoreControllers = true
 | 
						masterConfig.ExtraConfig.EnableCoreControllers = true
 | 
				
			||||||
	masterConfig.GenericConfig.PublicAddress = net.ParseIP("192.168.10.4")
 | 
						masterConfig.GenericConfig.PublicAddress = net.ParseIP("192.168.10.4")
 | 
				
			||||||
	masterConfig.APIResourceConfigSource = master.DefaultAPIResourceConfigSource()
 | 
						masterConfig.ExtraConfig.APIResourceConfigSource = master.DefaultAPIResourceConfigSource()
 | 
				
			||||||
	return masterConfig
 | 
						return masterConfig
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -548,7 +548,7 @@ func TestServiceAlloc(t *testing.T) {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("bad cidr: %v", err)
 | 
							t.Fatalf("bad cidr: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	cfg.ServiceIPRange = *cidr
 | 
						cfg.ExtraConfig.ServiceIPRange = *cidr
 | 
				
			||||||
	_, s, closeFn := framework.RunAMaster(cfg)
 | 
						_, s, closeFn := framework.RunAMaster(cfg)
 | 
				
			||||||
	defer closeFn()
 | 
						defer closeFn()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,9 +30,11 @@ func TestMasterExportsSymbols(t *testing.T) {
 | 
				
			|||||||
		GenericConfig: &genericapiserver.Config{
 | 
							GenericConfig: &genericapiserver.Config{
 | 
				
			||||||
			EnableMetrics: true,
 | 
								EnableMetrics: true,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		EnableCoreControllers: false,
 | 
							ExtraConfig: master.ExtraConfig{
 | 
				
			||||||
		EnableUISupport:       false,
 | 
								EnableCoreControllers: false,
 | 
				
			||||||
		EnableLogsSupport:     false,
 | 
								EnableUISupport:       false,
 | 
				
			||||||
 | 
								EnableLogsSupport:     false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_ = &master.Master{
 | 
						_ = &master.Master{
 | 
				
			||||||
		GenericAPIServer: &genericapiserver.GenericAPIServer{},
 | 
							GenericAPIServer: &genericapiserver.GenericAPIServer{},
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user