From d0a725a522abd3406c25a422f9b5771ebf2f21fe Mon Sep 17 00:00:00 2001 From: Chao Xu Date: Fri, 18 Nov 2016 13:31:36 -0800 Subject: [PATCH] master, genericapiserver, registry --- pkg/genericapiserver/config.go | 3 ++- pkg/master/master.go | 15 +++++++------- pkg/master/master_test.go | 26 +++++++++++++++++-------- pkg/registry/core/node/etcd/etcd.go | 11 +++++++++-- pkg/registry/core/pod/etcd/etcd_test.go | 8 ++++---- 5 files changed, 41 insertions(+), 22 deletions(-) diff --git a/pkg/genericapiserver/config.go b/pkg/genericapiserver/config.go index 098a398c6dc..3f4eb7ef652 100644 --- a/pkg/genericapiserver/config.go +++ b/pkg/genericapiserver/config.go @@ -37,6 +37,7 @@ import ( "k8s.io/kubernetes/pkg/admission" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" apiserverfilters "k8s.io/kubernetes/pkg/apiserver/filters" apiserveropenapi "k8s.io/kubernetes/pkg/apiserver/openapi" "k8s.io/kubernetes/pkg/apiserver/request" @@ -522,7 +523,7 @@ func DefaultAndValidateRunOptions(options *options.ServerRunOptions) { glog.Warningf("Unable to obtain external host address from cloud provider: %v", err) } else { for _, addr := range addrs { - if addr.Type == api.NodeExternalIP { + if addr.Type == v1.NodeExternalIP { options.ExternalHost = addr.Address } } diff --git a/pkg/master/master.go b/pkg/master/master.go index 81f2b1d07eb..d8a60961653 100644 --- a/pkg/master/master.go +++ b/pkg/master/master.go @@ -38,6 +38,7 @@ import ( rbacapi "k8s.io/kubernetes/pkg/apis/rbac/v1alpha1" storageapiv1beta1 "k8s.io/kubernetes/pkg/apis/storage/v1beta1" coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" + corev1client "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/typed/core/v1" "k8s.io/kubernetes/pkg/genericapiserver" "k8s.io/kubernetes/pkg/genericapiserver/options" "k8s.io/kubernetes/pkg/healthz" @@ -258,7 +259,7 @@ func (c completedConfig) New() (*Master, error) { m.InstallAPIs(c.Config.GenericConfig.APIResourceConfigSource, restOptionsFactory.NewFor, restStorageProviders...) if c.Tunneler != nil { - m.installTunneler(c.Tunneler, coreclient.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig).Nodes()) + m.installTunneler(c.Tunneler, corev1client.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig).Nodes()) } return m, nil @@ -283,7 +284,7 @@ func (m *Master) InstallLegacyAPI(c *Config, restOptionsGetter genericapiserver. } } -func (m *Master) installTunneler(tunneler genericapiserver.Tunneler, nodeClient coreclient.NodeInterface) { +func (m *Master) installTunneler(tunneler genericapiserver.Tunneler, nodeClient corev1client.NodeInterface) { tunneler.Run(nodeAddressProvider{nodeClient}.externalAddresses) m.GenericAPIServer.AddHealthzChecks(healthz.NamedCheck("SSH Tunnel Check", genericapiserver.TunnelSyncHealthChecker(tunneler))) prometheus.NewGaugeFunc(prometheus.GaugeOpts{ @@ -352,15 +353,15 @@ func (f restOptionsFactory) NewFor(resource unversioned.GroupResource) generic.R } type nodeAddressProvider struct { - nodeClient coreclient.NodeInterface + nodeClient corev1client.NodeInterface } func (n nodeAddressProvider) externalAddresses() (addresses []string, err error) { - preferredAddressTypes := []api.NodeAddressType{ - api.NodeExternalIP, - api.NodeLegacyHostIP, + preferredAddressTypes := []apiv1.NodeAddressType{ + apiv1.NodeExternalIP, + apiv1.NodeLegacyHostIP, } - nodes, err := n.nodeClient.List(api.ListOptions{}) + nodes, err := n.nodeClient.List(apiv1.ListOptions{}) if err != nil { return nil, err } diff --git a/pkg/master/master_test.go b/pkg/master/master_test.go index 224dae6ef83..1fdde09fe1e 100644 --- a/pkg/master/master_test.go +++ b/pkg/master/master_test.go @@ -42,12 +42,11 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" extensionsapiv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/apis/rbac" - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" + "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/fake" "k8s.io/kubernetes/pkg/client/restclient" openapigen "k8s.io/kubernetes/pkg/generated/openapi" "k8s.io/kubernetes/pkg/genericapiserver" kubeletclient "k8s.io/kubernetes/pkg/kubelet/client" - "k8s.io/kubernetes/pkg/registry/registrytest" "k8s.io/kubernetes/pkg/runtime" etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing" utilnet "k8s.io/kubernetes/pkg/util/net" @@ -173,25 +172,36 @@ func (*fakeEndpointReconciler) ReconcileEndpoints(serviceName string, ip net.IP, return nil } +func makeNodeList(nodes []string, nodeResources apiv1.NodeResources) *apiv1.NodeList { + list := apiv1.NodeList{ + Items: make([]apiv1.Node, len(nodes)), + } + for i := range nodes { + list.Items[i].Name = nodes[i] + list.Items[i].Status.Capacity = nodeResources.Capacity + } + return &list +} + // TestGetNodeAddresses verifies that proper results are returned // when requesting node addresses. func TestGetNodeAddresses(t *testing.T) { assert := assert.New(t) - fakeNodeClient := fake.NewSimpleClientset(registrytest.MakeNodeList([]string{"node1", "node2"}, api.NodeResources{})).Core().Nodes() + fakeNodeClient := fake.NewSimpleClientset(makeNodeList([]string{"node1", "node2"}, apiv1.NodeResources{})).Core().Nodes() addressProvider := nodeAddressProvider{fakeNodeClient} // Fail case (no addresses associated with nodes) - nodes, _ := fakeNodeClient.List(api.ListOptions{}) + nodes, _ := fakeNodeClient.List(apiv1.ListOptions{}) addrs, err := addressProvider.externalAddresses() assert.Error(err, "addresses should have caused an error as there are no addresses.") assert.Equal([]string(nil), addrs) // Pass case with External type IP - nodes, _ = fakeNodeClient.List(api.ListOptions{}) + nodes, _ = fakeNodeClient.List(apiv1.ListOptions{}) for index := range nodes.Items { - nodes.Items[index].Status.Addresses = []api.NodeAddress{{Type: api.NodeExternalIP, Address: "127.0.0.1"}} + nodes.Items[index].Status.Addresses = []apiv1.NodeAddress{{Type: apiv1.NodeExternalIP, Address: "127.0.0.1"}} fakeNodeClient.Update(&nodes.Items[index]) } addrs, err = addressProvider.externalAddresses() @@ -199,9 +209,9 @@ func TestGetNodeAddresses(t *testing.T) { assert.Equal([]string{"127.0.0.1", "127.0.0.1"}, addrs) // Pass case with LegacyHost type IP - nodes, _ = fakeNodeClient.List(api.ListOptions{}) + nodes, _ = fakeNodeClient.List(apiv1.ListOptions{}) for index := range nodes.Items { - nodes.Items[index].Status.Addresses = []api.NodeAddress{{Type: api.NodeLegacyHostIP, Address: "127.0.0.2"}} + nodes.Items[index].Status.Addresses = []apiv1.NodeAddress{{Type: apiv1.NodeLegacyHostIP, Address: "127.0.0.2"}} fakeNodeClient.Update(&nodes.Items[index]) } addrs, err = addressProvider.externalAddresses() diff --git a/pkg/registry/core/node/etcd/etcd.go b/pkg/registry/core/node/etcd/etcd.go index ed5e0bae7ad..f78548b528d 100644 --- a/pkg/registry/core/node/etcd/etcd.go +++ b/pkg/registry/core/node/etcd/etcd.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/node" @@ -115,7 +116,7 @@ func NewStorage(opts generic.RESTOptions, kubeletClientConfig client.KubeletClie proxyREST := &noderest.ProxyREST{Store: store, ProxyTransport: proxyTransport} // Build a NodeGetter that looks up nodes using the REST handler - nodeGetter := client.NodeGetterFunc(func(nodeName string) (*api.Node, error) { + nodeGetter := client.NodeGetterFunc(func(nodeName string) (*v1.Node, error) { obj, err := nodeREST.Get(api.NewContext(), nodeName) if err != nil { return nil, err @@ -124,7 +125,13 @@ func NewStorage(opts generic.RESTOptions, kubeletClientConfig client.KubeletClie if !ok { return nil, fmt.Errorf("unexpected type %T", obj) } - return node, nil + // TODO: Remove the conversion. Consider only return the NodeAddresses + externalNode := &v1.Node{} + err = v1.Convert_api_Node_To_v1_Node(node, externalNode, nil) + if err != nil { + return nil, fmt.Errorf("failed to convert to v1.Node: %v", err) + } + return externalNode, nil }) connectionInfoGetter, err := client.NewNodeConnectionInfoGetter(nodeGetter, kubeletClientConfig) if err != nil { diff --git a/pkg/registry/core/pod/etcd/etcd_test.go b/pkg/registry/core/pod/etcd/etcd_test.go index a89bb93a923..a67ffd7d76f 100644 --- a/pkg/registry/core/pod/etcd/etcd_test.go +++ b/pkg/registry/core/pod/etcd/etcd_test.go @@ -63,7 +63,7 @@ func validNewPod() *api.Pod { ImagePullPolicy: api.PullAlways, TerminationMessagePath: api.TerminationMessagePathDefault, - SecurityContext: securitycontext.ValidSecurityContextWithContainerDefaults(), + SecurityContext: securitycontext.ValidInternalSecurityContextWithContainerDefaults(), }, }, SecurityContext: &api.PodSecurityContext{}, @@ -658,7 +658,7 @@ func TestEtcdUpdateScheduled(t *testing.T) { { Name: "foobar", Image: "foo:v1", - SecurityContext: securitycontext.ValidSecurityContextWithContainerDefaults(), + SecurityContext: securitycontext.ValidInternalSecurityContextWithContainerDefaults(), }, }, SecurityContext: &api.PodSecurityContext{}, @@ -683,7 +683,7 @@ func TestEtcdUpdateScheduled(t *testing.T) { Image: "foo:v2", ImagePullPolicy: api.PullIfNotPresent, TerminationMessagePath: api.TerminationMessagePathDefault, - SecurityContext: securitycontext.ValidSecurityContextWithContainerDefaults(), + SecurityContext: securitycontext.ValidInternalSecurityContextWithContainerDefaults(), }}, RestartPolicy: api.RestartPolicyAlways, DNSPolicy: api.DNSClusterFirst, @@ -727,7 +727,7 @@ func TestEtcdUpdateStatus(t *testing.T) { Containers: []api.Container{ { Image: "foo:v1", - SecurityContext: securitycontext.ValidSecurityContextWithContainerDefaults(), + SecurityContext: securitycontext.ValidInternalSecurityContextWithContainerDefaults(), }, }, SecurityContext: &api.PodSecurityContext{},