diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index 12c86e28bd7..09dd3a37a6d 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -47,6 +47,7 @@ import ( "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/pkg/master/ports" "k8s.io/kubernetes/pkg/storage" + etcdstorage "k8s.io/kubernetes/pkg/storage/etcd" "k8s.io/kubernetes/pkg/tools" "k8s.io/kubernetes/pkg/util" forked "k8s.io/kubernetes/third_party/forked/coreos/go-etcd/etcd" @@ -306,8 +307,12 @@ func newEtcd(etcdConfigFile string, etcdServerList []string, interfacesFunc meta etcdClient.SetTransport(transport) client = etcdClient } - etcdStorage, err = master.NewEtcdStorage(client, interfacesFunc, storageVersion, pathPrefix) - return etcdStorage, err + versionedInterface, err := interfacesFunc(storageVersion) + if err != nil { + return nil, err + } + etcdStorage = etcdstorage.NewEtcdStorage(client, versionedInterface.Codec, pathPrefix) + return etcdStorage, nil } // convert to a map between group and groupVersions. diff --git a/pkg/master/master.go b/pkg/master/master.go index 5e4496e1560..d9f201793c1 100644 --- a/pkg/master/master.go +++ b/pkg/master/master.go @@ -31,7 +31,6 @@ import ( "k8s.io/kubernetes/pkg/admission" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/latest" - "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/api/unversioned" apiutil "k8s.io/kubernetes/pkg/api/util" @@ -75,9 +74,7 @@ import ( "k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata" thirdpartyresourcedataetcd "k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/etcd" "k8s.io/kubernetes/pkg/storage" - etcdstorage "k8s.io/kubernetes/pkg/storage/etcd" etcdutil "k8s.io/kubernetes/pkg/storage/etcd/util" - "k8s.io/kubernetes/pkg/tools" "k8s.io/kubernetes/pkg/ui" "k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util/sets" @@ -349,16 +346,6 @@ type Master struct { KubernetesServiceNodePort int } -// NewEtcdStorage returns a storage.Interface for the provided arguments or an error if the version -// is incorrect. -func NewEtcdStorage(client tools.EtcdClient, interfacesFunc meta.VersionInterfacesFunc, version, prefix string) (etcdStorage storage.Interface, err error) { - versionInterfaces, err := interfacesFunc(version) - if err != nil { - return etcdStorage, err - } - return etcdstorage.NewEtcdStorage(client, versionInterfaces.Codec, prefix), nil -} - // setDefaults fills in any fields not set that are required to have valid data. func setDefaults(c *Config) { if c.ServiceClusterIPRange == nil { diff --git a/pkg/master/master_test.go b/pkg/master/master_test.go index 7a0a10de81f..580fc725d41 100644 --- a/pkg/master/master_test.go +++ b/pkg/master/master_test.go @@ -20,7 +20,6 @@ import ( "bytes" "crypto/tls" "encoding/json" - "errors" "fmt" "io/ioutil" "net" @@ -32,7 +31,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/latest" - "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" apiutil "k8s.io/kubernetes/pkg/api/util" @@ -125,23 +123,6 @@ func TestNew(t *testing.T) { assert.Equal(master.proxyTransport.(*http.Transport).TLSClientConfig, config.ProxyTLSClientConfig) } -// TestNewEtcdStorage verifies that the usage of NewEtcdStorage reacts properly when -// the correct data is input -func TestNewEtcdStorage(t *testing.T) { - etcdserver := etcdtesting.NewEtcdTestClientServer(t) - defer etcdserver.Terminate(t) - - assert := assert.New(t) - // Pass case - _, err := NewEtcdStorage(etcdserver.Client, latest.GroupOrDie("").InterfacesFor, testapi.Default.Version(), etcdtest.PathPrefix()) - assert.NoError(err, "Unable to create etcdstorage: %s", err) - - // Fail case - errorFunc := func(apiVersion string) (*meta.VersionInterfaces, error) { return nil, errors.New("ERROR") } - _, err = NewEtcdStorage(etcdserver.Client, errorFunc, testapi.Default.Version(), etcdtest.PathPrefix()) - assert.Error(err, "NewEtcdStorage should have failed") -} - // TestGetServersToValidate verifies the unexported getServersToValidate function func TestGetServersToValidate(t *testing.T) { master, etcdserver, config, assert := setUp(t) diff --git a/test/integration/auth_test.go b/test/integration/auth_test.go index bb98801fb1e..f3da822a93b 100644 --- a/test/integration/auth_test.go +++ b/test/integration/auth_test.go @@ -28,7 +28,6 @@ import ( "errors" "fmt" "io/ioutil" - "net" "net/http" "net/http/httptest" "net/url" @@ -45,7 +44,6 @@ import ( "k8s.io/kubernetes/pkg/auth/authorizer" "k8s.io/kubernetes/pkg/auth/authorizer/abac" "k8s.io/kubernetes/pkg/auth/user" - "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/plugin/pkg/admission/admit" "k8s.io/kubernetes/plugin/pkg/auth/authenticator/token/tokentest" @@ -489,42 +487,15 @@ func TestAuthModeAlwaysDeny(t *testing.T) { framework.DeleteAllEtcdKeys() // Set up a master - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - var m *master.Master s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { m.Handler.ServeHTTP(w, req) })) defer s.Close() - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: client.FakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authorizer: apiserver.NewAlwaysDenyAuthorizer(), - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - PublicAddress: net.ParseIP("192.168.10.4"), - }) + masterConfig := framework.NewIntegrationTestMasterConfig() + masterConfig.Authorizer = apiserver.NewAlwaysDenyAuthorizer() + m = master.New(masterConfig) transport := http.DefaultTransport @@ -570,43 +541,17 @@ func TestAliceNotForbiddenOrUnauthorized(t *testing.T) { // This file has alice and bob in it. // Set up a master - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - var m *master.Master s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { m.Handler.ServeHTTP(w, req) })) defer s.Close() - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: client.FakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authenticator: getTestTokenAuth(), - Authorizer: allowAliceAuthorizer{}, - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - PublicAddress: net.ParseIP("192.168.10.4"), - }) + masterConfig := framework.NewIntegrationTestMasterConfig() + masterConfig.Authenticator = getTestTokenAuth() + masterConfig.Authorizer = allowAliceAuthorizer{} + masterConfig.AdmissionControl = admit.NewAlwaysAdmit() + m = master.New(masterConfig) previousResourceVersion := make(map[string]float64) transport := http.DefaultTransport @@ -671,43 +616,16 @@ func TestBobIsForbidden(t *testing.T) { framework.DeleteAllEtcdKeys() // This file has alice and bob in it. - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - var m *master.Master s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { m.Handler.ServeHTTP(w, req) })) defer s.Close() - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: client.FakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authenticator: getTestTokenAuth(), - Authorizer: allowAliceAuthorizer{}, - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - PublicAddress: net.ParseIP("192.168.10.4"), - }) + masterConfig := framework.NewIntegrationTestMasterConfig() + masterConfig.Authenticator = getTestTokenAuth() + masterConfig.Authorizer = allowAliceAuthorizer{} + m = master.New(masterConfig) transport := http.DefaultTransport @@ -746,43 +664,16 @@ func TestUnknownUserIsUnauthorized(t *testing.T) { // This file has alice and bob in it. // Set up a master - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - var m *master.Master s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { m.Handler.ServeHTTP(w, req) })) defer s.Close() - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: client.FakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authenticator: getTestTokenAuth(), - Authorizer: allowAliceAuthorizer{}, - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - PublicAddress: net.ParseIP("192.168.10.4"), - }) + masterConfig := framework.NewIntegrationTestMasterConfig() + masterConfig.Authenticator = getTestTokenAuth() + masterConfig.Authorizer = allowAliceAuthorizer{} + m = master.New(masterConfig) transport := http.DefaultTransport @@ -844,23 +735,6 @@ func (a *trackingAuthorizer) Authorize(attributes authorizer.Attributes) error { func TestAuthorizationAttributeDetermination(t *testing.T) { framework.DeleteAllEtcdKeys() - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - trackingAuthorizer := &trackingAuthorizer{} var m *master.Master @@ -869,20 +743,10 @@ func TestAuthorizationAttributeDetermination(t *testing.T) { })) defer s.Close() - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: client.FakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authenticator: getTestTokenAuth(), - Authorizer: trackingAuthorizer, - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - PublicAddress: net.ParseIP("192.168.10.4"), - }) + masterConfig := framework.NewIntegrationTestMasterConfig() + masterConfig.Authenticator = getTestTokenAuth() + masterConfig.Authorizer = trackingAuthorizer + m = master.New(masterConfig) transport := http.DefaultTransport @@ -938,23 +802,6 @@ func TestNamespaceAuthorization(t *testing.T) { framework.DeleteAllEtcdKeys() // This file has alice and bob in it. - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - a := newAuthorizerWithContents(t, `{"namespace": "foo"} `) @@ -964,20 +811,10 @@ func TestNamespaceAuthorization(t *testing.T) { })) defer s.Close() - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: client.FakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authenticator: getTestTokenAuth(), - Authorizer: a, - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - PublicAddress: net.ParseIP("192.168.10.4"), - }) + masterConfig := framework.NewIntegrationTestMasterConfig() + masterConfig.Authenticator = getTestTokenAuth() + masterConfig.Authorizer = a + m = master.New(masterConfig) previousResourceVersion := make(map[string]float64) transport := http.DefaultTransport @@ -1067,23 +904,6 @@ func TestKindAuthorization(t *testing.T) { // This file has alice and bob in it. // Set up a master - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - a := newAuthorizerWithContents(t, `{"resource": "services"} `) @@ -1093,20 +913,10 @@ func TestKindAuthorization(t *testing.T) { })) defer s.Close() - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: client.FakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authenticator: getTestTokenAuth(), - Authorizer: a, - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - PublicAddress: net.ParseIP("192.168.10.4"), - }) + masterConfig := framework.NewIntegrationTestMasterConfig() + masterConfig.Authenticator = getTestTokenAuth() + masterConfig.Authorizer = a + m = master.New(masterConfig) previousResourceVersion := make(map[string]float64) transport := http.DefaultTransport @@ -1184,23 +994,6 @@ func TestReadOnlyAuthorization(t *testing.T) { // This file has alice and bob in it. // Set up a master - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - a := newAuthorizerWithContents(t, `{"readonly": true}`) var m *master.Master @@ -1209,20 +1002,11 @@ func TestReadOnlyAuthorization(t *testing.T) { })) defer s.Close() - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: client.FakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authenticator: getTestTokenAuth(), - Authorizer: a, - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - PublicAddress: net.ParseIP("192.168.10.4"), - }) + masterConfig := framework.NewIntegrationTestMasterConfig() + masterConfig.Authenticator = getTestTokenAuth() + masterConfig.Authorizer = a + + m = master.New(masterConfig) transport := http.DefaultTransport diff --git a/test/integration/framework/etcd_utils.go b/test/integration/framework/etcd_utils.go index fdce5a1940f..95a631ef95c 100644 --- a/test/integration/framework/etcd_utils.go +++ b/test/integration/framework/etcd_utils.go @@ -22,10 +22,9 @@ import ( "github.com/coreos/go-etcd/etcd" "github.com/golang/glog" - "k8s.io/kubernetes/pkg/api/latest" "k8s.io/kubernetes/pkg/api/testapi" - "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/pkg/storage" + etcdstorage "k8s.io/kubernetes/pkg/storage/etcd" "k8s.io/kubernetes/pkg/storage/etcd/etcdtest" ) @@ -40,15 +39,15 @@ func NewEtcdClient() *etcd.Client { return etcd.NewClient([]string{}) } -func NewEtcdStorage() (storage.Interface, error) { - return master.NewEtcdStorage(NewEtcdClient(), latest.GroupOrDie("").InterfacesFor, testapi.Default.Version(), etcdtest.PathPrefix()) +func NewEtcdStorage() storage.Interface { + return etcdstorage.NewEtcdStorage(NewEtcdClient(), testapi.Default.Codec(), etcdtest.PathPrefix()) } -func NewExtensionsEtcdStorage(client *etcd.Client) (storage.Interface, error) { +func NewExtensionsEtcdStorage(client *etcd.Client) storage.Interface { if client == nil { client = NewEtcdClient() } - return master.NewEtcdStorage(client, latest.GroupOrDie("extensions").InterfacesFor, testapi.Extensions.GroupAndVersion(), etcdtest.PathPrefix()) + return etcdstorage.NewEtcdStorage(client, testapi.Extensions.Codec(), etcdtest.PathPrefix()) } func RequireEtcd() { diff --git a/test/integration/framework/master_utils.go b/test/integration/framework/master_utils.go index cb903a94f3b..5eb5994bd31 100644 --- a/test/integration/framework/master_utils.go +++ b/test/integration/framework/master_utils.go @@ -28,7 +28,6 @@ import ( "github.com/golang/glog" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/latest" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apiserver" @@ -40,6 +39,7 @@ import ( "k8s.io/kubernetes/pkg/kubectl" kubeletclient "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/master" + etcdstorage "k8s.io/kubernetes/pkg/storage/etcd" "k8s.io/kubernetes/pkg/storage/etcd/etcdtest" "k8s.io/kubernetes/plugin/pkg/admission/admit" ) @@ -138,16 +138,10 @@ func startMasterOrDie(masterConfig *master.Config) (*master.Master, *httptest.Se func NewMasterConfig() *master.Config { etcdClient := NewEtcdClient() storageVersions := make(map[string]string) - etcdStorage, err := master.NewEtcdStorage(etcdClient, latest.GroupOrDie("").InterfacesFor, testapi.Default.GroupAndVersion(), etcdtest.PathPrefix()) + etcdStorage := etcdstorage.NewEtcdStorage(etcdClient, testapi.Default.Codec(), etcdtest.PathPrefix()) storageVersions[""] = testapi.Default.GroupAndVersion() - if err != nil { - glog.Fatalf("Failed to create etcd storage for master %v", err) - } - expEtcdStorage, err := NewExtensionsEtcdStorage(etcdClient) + expEtcdStorage := NewExtensionsEtcdStorage(etcdClient) storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - if err != nil { - glog.Fatalf("Failed to create etcd storage for master %v", err) - } storageDestinations := master.NewStorageDestinations() storageDestinations.AddAPIGroup("", etcdStorage) storageDestinations.AddAPIGroup("extensions", expEtcdStorage) @@ -282,34 +276,9 @@ func StartPods(numPods int, host string, restClient *client.Client) error { // TODO: Merge this into startMasterOrDie. func RunAMaster(t *testing.T) (*master.Master, *httptest.Server) { - etcdClient := NewEtcdClient() - storageVersions := make(map[string]string) - etcdStorage, err := master.NewEtcdStorage(etcdClient, latest.GroupOrDie("").InterfacesFor, testapi.Default.GroupAndVersion(), etcdtest.PathPrefix()) - storageVersions[""] = testapi.Default.Version() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - expEtcdStorage, err := NewExtensionsEtcdStorage(etcdClient) - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - m := master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: kubeletclient.FakeKubeletClient{}, - EnableLogsSupport: false, - EnableProfiling: true, - EnableUISupport: false, - APIPrefix: "/api", - APIGroupPrefix: "/apis", - Authorizer: apiserver.NewAlwaysAllowAuthorizer(), - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - }) + masterConfig := NewMasterConfig() + masterConfig.EnableProfiling = true + m := master.New(masterConfig) s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { m.Handler.ServeHTTP(w, req)