mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Signed-off-by: Christopher M. Luciano <cmluciano@us.ibm.com> The change to registrytest was found by liggitt to mitigate a NPE error. This is necessary since ingress is a cohabitating resource that is not stored in the default version for the networking resource. Signed-off-by: Christopher M. Luciano <cmluciano@us.ibm.com>
		
			
				
	
	
		
			139 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2016 The Kubernetes Authors.
 | 
						|
 | 
						|
Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
you may not use this file except in compliance with the License.
 | 
						|
You may obtain a copy of the License at
 | 
						|
 | 
						|
    http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 | 
						|
Unless required by applicable law or agreed to in writing, software
 | 
						|
distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
See the License for the specific language governing permissions and
 | 
						|
limitations under the License.
 | 
						|
*/
 | 
						|
 | 
						|
package kubeapiserver
 | 
						|
 | 
						|
import (
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"k8s.io/apimachinery/pkg/runtime"
 | 
						|
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
						|
	serveroptions "k8s.io/apiserver/pkg/server/options"
 | 
						|
	"k8s.io/apiserver/pkg/server/options/encryptionconfig"
 | 
						|
	"k8s.io/apiserver/pkg/server/resourceconfig"
 | 
						|
	serverstorage "k8s.io/apiserver/pkg/server/storage"
 | 
						|
	"k8s.io/apiserver/pkg/storage/storagebackend"
 | 
						|
	utilfeature "k8s.io/apiserver/pkg/util/feature"
 | 
						|
	"k8s.io/kubernetes/pkg/api/legacyscheme"
 | 
						|
	"k8s.io/kubernetes/pkg/apis/apps"
 | 
						|
	"k8s.io/kubernetes/pkg/apis/batch"
 | 
						|
	api "k8s.io/kubernetes/pkg/apis/core"
 | 
						|
	"k8s.io/kubernetes/pkg/apis/events"
 | 
						|
	"k8s.io/kubernetes/pkg/apis/extensions"
 | 
						|
	"k8s.io/kubernetes/pkg/apis/networking"
 | 
						|
	"k8s.io/kubernetes/pkg/apis/policy"
 | 
						|
	apisstorage "k8s.io/kubernetes/pkg/apis/storage"
 | 
						|
	"k8s.io/kubernetes/pkg/features"
 | 
						|
)
 | 
						|
 | 
						|
// SpecialDefaultResourcePrefixes are prefixes compiled into Kubernetes.
 | 
						|
var SpecialDefaultResourcePrefixes = map[schema.GroupResource]string{
 | 
						|
	{Group: "", Resource: "replicationcontrollers"}:        "controllers",
 | 
						|
	{Group: "", Resource: "endpoints"}:                     "services/endpoints",
 | 
						|
	{Group: "", Resource: "nodes"}:                         "minions",
 | 
						|
	{Group: "", Resource: "services"}:                      "services/specs",
 | 
						|
	{Group: "extensions", Resource: "ingresses"}:           "ingress",
 | 
						|
	{Group: "networking.k8s.io", Resource: "ingresses"}:    "ingress",
 | 
						|
	{Group: "extensions", Resource: "podsecuritypolicies"}: "podsecuritypolicy",
 | 
						|
	{Group: "policy", Resource: "podsecuritypolicies"}:     "podsecuritypolicy",
 | 
						|
}
 | 
						|
 | 
						|
func NewStorageFactoryConfig() *StorageFactoryConfig {
 | 
						|
 | 
						|
	resources := []schema.GroupVersionResource{
 | 
						|
		batch.Resource("cronjobs").WithVersion("v1beta1"),
 | 
						|
		networking.Resource("ingresses").WithVersion("v1beta1"),
 | 
						|
	}
 | 
						|
	// add csinodes if CSINodeInfo feature gate is enabled
 | 
						|
	if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) {
 | 
						|
		resources = append(resources, apisstorage.Resource("csinodes").WithVersion("v1beta1"))
 | 
						|
	}
 | 
						|
	// add csidrivers if CSIDriverRegistry feature gate is enabled
 | 
						|
	if utilfeature.DefaultFeatureGate.Enabled(features.CSIDriverRegistry) {
 | 
						|
		resources = append(resources, apisstorage.Resource("csidrivers").WithVersion("v1beta1"))
 | 
						|
	}
 | 
						|
 | 
						|
	return &StorageFactoryConfig{
 | 
						|
		Serializer:                legacyscheme.Codecs,
 | 
						|
		DefaultResourceEncoding:   serverstorage.NewDefaultResourceEncodingConfig(legacyscheme.Scheme),
 | 
						|
		ResourceEncodingOverrides: resources,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
type StorageFactoryConfig struct {
 | 
						|
	StorageConfig                    storagebackend.Config
 | 
						|
	ApiResourceConfig                *serverstorage.ResourceConfig
 | 
						|
	DefaultResourceEncoding          *serverstorage.DefaultResourceEncodingConfig
 | 
						|
	DefaultStorageMediaType          string
 | 
						|
	Serializer                       runtime.StorageSerializer
 | 
						|
	ResourceEncodingOverrides        []schema.GroupVersionResource
 | 
						|
	EtcdServersOverrides             []string
 | 
						|
	EncryptionProviderConfigFilepath string
 | 
						|
}
 | 
						|
 | 
						|
func (c *StorageFactoryConfig) Complete(etcdOptions *serveroptions.EtcdOptions) (*completedStorageFactoryConfig, error) {
 | 
						|
	c.StorageConfig = etcdOptions.StorageConfig
 | 
						|
	c.DefaultStorageMediaType = etcdOptions.DefaultStorageMediaType
 | 
						|
	c.EtcdServersOverrides = etcdOptions.EtcdServersOverrides
 | 
						|
	c.EncryptionProviderConfigFilepath = etcdOptions.EncryptionProviderConfigFilepath
 | 
						|
	return &completedStorageFactoryConfig{c}, nil
 | 
						|
}
 | 
						|
 | 
						|
type completedStorageFactoryConfig struct {
 | 
						|
	*StorageFactoryConfig
 | 
						|
}
 | 
						|
 | 
						|
func (c *completedStorageFactoryConfig) New() (*serverstorage.DefaultStorageFactory, error) {
 | 
						|
	resourceEncodingConfig := resourceconfig.MergeResourceEncodingConfigs(c.DefaultResourceEncoding, c.ResourceEncodingOverrides)
 | 
						|
	storageFactory := serverstorage.NewDefaultStorageFactory(
 | 
						|
		c.StorageConfig,
 | 
						|
		c.DefaultStorageMediaType,
 | 
						|
		c.Serializer,
 | 
						|
		resourceEncodingConfig,
 | 
						|
		c.ApiResourceConfig,
 | 
						|
		SpecialDefaultResourcePrefixes)
 | 
						|
 | 
						|
	storageFactory.AddCohabitatingResources(networking.Resource("networkpolicies"), extensions.Resource("networkpolicies"))
 | 
						|
	storageFactory.AddCohabitatingResources(apps.Resource("deployments"), extensions.Resource("deployments"))
 | 
						|
	storageFactory.AddCohabitatingResources(apps.Resource("daemonsets"), extensions.Resource("daemonsets"))
 | 
						|
	storageFactory.AddCohabitatingResources(apps.Resource("replicasets"), extensions.Resource("replicasets"))
 | 
						|
	storageFactory.AddCohabitatingResources(api.Resource("events"), events.Resource("events"))
 | 
						|
	storageFactory.AddCohabitatingResources(policy.Resource("podsecuritypolicies"), extensions.Resource("podsecuritypolicies"))
 | 
						|
	storageFactory.AddCohabitatingResources(networking.Resource("ingresses"), extensions.Resource("ingresses"))
 | 
						|
 | 
						|
	for _, override := range c.EtcdServersOverrides {
 | 
						|
		tokens := strings.Split(override, "#")
 | 
						|
		apiresource := strings.Split(tokens[0], "/")
 | 
						|
 | 
						|
		group := apiresource[0]
 | 
						|
		resource := apiresource[1]
 | 
						|
		groupResource := schema.GroupResource{Group: group, Resource: resource}
 | 
						|
 | 
						|
		servers := strings.Split(tokens[1], ";")
 | 
						|
		storageFactory.SetEtcdLocation(groupResource, servers)
 | 
						|
	}
 | 
						|
	if len(c.EncryptionProviderConfigFilepath) != 0 {
 | 
						|
		transformerOverrides, err := encryptionconfig.GetTransformerOverrides(c.EncryptionProviderConfigFilepath)
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		for groupResource, transformer := range transformerOverrides {
 | 
						|
			storageFactory.SetTransformer(groupResource, transformer)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return storageFactory, nil
 | 
						|
}
 |