Skip to content
This repository was archived by the owner on Feb 8, 2021. It is now read-only.

Commit d3243b8

Browse files
author
k8s-merge-robot
committed
Merge pull request kubernetes#18383 from timothysc/tools_removal
Auto commit by PR queue bot
2 parents e34e6e7 + 413d8d1 commit d3243b8

File tree

13 files changed

+79
-176
lines changed

13 files changed

+79
-176
lines changed

cmd/kube-apiserver/app/server.go

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,8 @@ import (
4848
"k8s.io/kubernetes/pkg/master/ports"
4949
"k8s.io/kubernetes/pkg/storage"
5050
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
51-
"k8s.io/kubernetes/pkg/tools"
5251
"k8s.io/kubernetes/pkg/util"
53-
forked "k8s.io/kubernetes/third_party/forked/coreos/go-etcd/etcd"
5452

55-
"github.com/coreos/go-etcd/etcd"
5653
"github.com/golang/glog"
5754
"github.com/spf13/cobra"
5855
"github.com/spf13/pflag"
@@ -99,7 +96,6 @@ type APIServer struct {
9996
AdmissionControl string
10097
AdmissionControlConfigFile string
10198
EtcdServerList []string
102-
EtcdConfigFile string
10399
EtcdServersOverrides []string
104100
EtcdPathPrefix string
105101
CorsAllowedOriginList []string
@@ -234,7 +230,6 @@ func (s *APIServer) AddFlags(fs *pflag.FlagSet) {
234230
fs.StringVar(&s.AdmissionControl, "admission-control", s.AdmissionControl, "Ordered list of plug-ins to do admission control of resources into cluster. Comma-delimited list of: "+strings.Join(admission.GetPlugins(), ", "))
235231
fs.StringVar(&s.AdmissionControlConfigFile, "admission-control-config-file", s.AdmissionControlConfigFile, "File with admission control configuration.")
236232
fs.StringSliceVar(&s.EtcdServerList, "etcd-servers", s.EtcdServerList, "List of etcd servers to watch (http://ip:port), comma separated. Mutually exclusive with -etcd-config")
237-
fs.StringVar(&s.EtcdConfigFile, "etcd-config", s.EtcdConfigFile, "The config file for the etcd client. Mutually exclusive with -etcd-servers.")
238233
fs.StringSliceVar(&s.EtcdServersOverrides, "etcd-servers-overrides", s.EtcdServersOverrides, "Per-resource etcd servers overrides, comma separated. The individual override format: group/resource#servers, where servers are http://ip:port, semicolon separated.")
239234
fs.StringVar(&s.EtcdPathPrefix, "etcd-prefix", s.EtcdPathPrefix, "The prefix for all resource paths in etcd.")
240235
fs.StringSliceVar(&s.CorsAllowedOriginList, "cors-allowed-origins", s.CorsAllowedOriginList, "List of allowed origins for CORS, comma separated. An allowed origin can be a regular expression to support subdomain matching. If this list is empty CORS will not be enabled.")
@@ -283,36 +278,21 @@ func (s *APIServer) verifyClusterIPFlags() {
283278
}
284279
}
285280

286-
type newEtcdFunc func(string, []string, meta.VersionInterfacesFunc, string, string) (storage.Interface, error)
281+
type newEtcdFunc func([]string, meta.VersionInterfacesFunc, string, string) (storage.Interface, error)
287282

288-
func newEtcd(etcdConfigFile string, etcdServerList []string, interfacesFunc meta.VersionInterfacesFunc, storageVersion, pathPrefix string) (etcdStorage storage.Interface, err error) {
283+
func newEtcd(etcdServerList []string, interfacesFunc meta.VersionInterfacesFunc, storageVersion, pathPrefix string) (etcdStorage storage.Interface, err error) {
289284
if storageVersion == "" {
290285
return etcdStorage, fmt.Errorf("storageVersion is required to create a etcd storage")
291286
}
292-
var client tools.EtcdClient
293-
if etcdConfigFile != "" {
294-
client, err = etcd.NewClientFromFile(etcdConfigFile)
295-
if err != nil {
296-
return nil, err
297-
}
298-
} else {
299-
etcdClient := etcd.NewClient(etcdServerList)
300-
transport := &http.Transport{
301-
Dial: forked.Dial,
302-
TLSClientConfig: &tls.Config{
303-
InsecureSkipVerify: true,
304-
},
305-
MaxIdleConnsPerHost: 500,
306-
}
307-
etcdClient.SetTransport(transport)
308-
client = etcdClient
309-
}
287+
var storageConfig etcdstorage.EtcdConfig
288+
storageConfig.ServerList = etcdServerList
289+
storageConfig.Prefix = pathPrefix
310290
versionedInterface, err := interfacesFunc(storageVersion)
311291
if err != nil {
312292
return nil, err
313293
}
314-
etcdStorage = etcdstorage.NewEtcdStorage(client, versionedInterface.Codec, pathPrefix)
315-
return etcdStorage, nil
294+
storageConfig.Codec = versionedInterface.Codec
295+
return storageConfig.NewStorage()
316296
}
317297

318298
// convert to a map between group and groupVersions.
@@ -360,7 +340,7 @@ func updateEtcdOverrides(overrides []string, storageVersions map[string]string,
360340
}
361341

362342
servers := strings.Split(tokens[1], ";")
363-
etcdOverrideStorage, err := newEtcdFn("", servers, apigroup.InterfacesFor, storageVersions[apigroup.GroupVersion.Group], prefix)
343+
etcdOverrideStorage, err := newEtcdFn(servers, apigroup.InterfacesFor, storageVersions[apigroup.GroupVersion.Group], prefix)
364344
if err != nil {
365345
glog.Fatalf("Invalid storage version or misconfigured etcd for %s: %v", tokens[0], err)
366346
}
@@ -386,8 +366,8 @@ func (s *APIServer) Run(_ []string) error {
386366
}
387367
glog.Infof("Will report %v as public IP address.", s.AdvertiseAddress)
388368

389-
if (s.EtcdConfigFile != "" && len(s.EtcdServerList) != 0) || (s.EtcdConfigFile == "" && len(s.EtcdServerList) == 0) {
390-
glog.Fatalf("Specify either --etcd-servers or --etcd-config")
369+
if len(s.EtcdServerList) == 0 {
370+
glog.Fatalf("--etcd-servers must be specified")
391371
}
392372

393373
if s.KubernetesServiceNodePort > 0 && !s.ServiceNodePortRange.Contains(s.KubernetesServiceNodePort) {
@@ -471,7 +451,7 @@ func (s *APIServer) Run(_ []string) error {
471451
if _, found := storageVersions[legacyV1Group.GroupVersion.Group]; !found {
472452
glog.Fatalf("Couldn't find the storage version for group: %q in storageVersions: %v", legacyV1Group.GroupVersion.Group, storageVersions)
473453
}
474-
etcdStorage, err := newEtcd(s.EtcdConfigFile, s.EtcdServerList, legacyV1Group.InterfacesFor, storageVersions[legacyV1Group.GroupVersion.Group], s.EtcdPathPrefix)
454+
etcdStorage, err := newEtcd(s.EtcdServerList, legacyV1Group.InterfacesFor, storageVersions[legacyV1Group.GroupVersion.Group], s.EtcdPathPrefix)
475455
if err != nil {
476456
glog.Fatalf("Invalid storage version or misconfigured etcd: %v", err)
477457
}
@@ -485,7 +465,7 @@ func (s *APIServer) Run(_ []string) error {
485465
if _, found := storageVersions[expGroup.GroupVersion.Group]; !found {
486466
glog.Fatalf("Couldn't find the storage version for group: %q in storageVersions: %v", expGroup.GroupVersion.Group, storageVersions)
487467
}
488-
expEtcdStorage, err := newEtcd(s.EtcdConfigFile, s.EtcdServerList, expGroup.InterfacesFor, storageVersions[expGroup.GroupVersion.Group], s.EtcdPathPrefix)
468+
expEtcdStorage, err := newEtcd(s.EtcdServerList, expGroup.InterfacesFor, storageVersions[expGroup.GroupVersion.Group], s.EtcdPathPrefix)
489469
if err != nil {
490470
glog.Fatalf("Invalid extensions storage version or misconfigured etcd: %v", err)
491471
}

cmd/kube-apiserver/app/server_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ func TestUpdateEtcdOverrides(t *testing.T) {
130130
}
131131

132132
for _, test := range testCases {
133-
newEtcd := func(_ string, serverList []string, _ meta.VersionInterfacesFunc, _, _ string) (storage.Interface, error) {
133+
newEtcd := func(serverList []string, _ meta.VersionInterfacesFunc, _, _ string) (storage.Interface, error) {
134134
if !reflect.DeepEqual(test.servers, serverList) {
135135
t.Errorf("unexpected server list, expected: %#v, got: %#v", test.servers, serverList)
136136
}

contrib/mesos/pkg/election/etcd_master.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
"github.com/coreos/go-etcd/etcd"
2424
"github.com/golang/glog"
2525
etcdutil "k8s.io/kubernetes/pkg/storage/etcd/util"
26-
"k8s.io/kubernetes/pkg/tools"
2726
"k8s.io/kubernetes/pkg/util"
2827
"k8s.io/kubernetes/pkg/watch"
2928
)
@@ -38,15 +37,15 @@ type Master string
3837
func (Master) IsAnAPIObject() {}
3938

4039
// NewEtcdMasterElector returns an implementation of election.MasterElector backed by etcd.
41-
func NewEtcdMasterElector(h tools.EtcdClient) MasterElector {
40+
func NewEtcdMasterElector(h *etcd.Client) MasterElector {
4241
return &etcdMasterElector{etcd: h}
4342
}
4443

4544
type empty struct{}
4645

4746
// internal implementation struct
4847
type etcdMasterElector struct {
49-
etcd tools.EtcdClient
48+
etcd *etcd.Client
5049
done chan empty
5150
events chan watch.Event
5251
}

contrib/mesos/pkg/election/etcd_master_test.go

Lines changed: 6 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,9 @@ limitations under the License.
1717
package election
1818

1919
import (
20-
"reflect"
2120
"testing"
2221

23-
"github.com/coreos/go-etcd/etcd"
2422
etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing"
25-
"k8s.io/kubernetes/pkg/tools"
2623
"k8s.io/kubernetes/pkg/watch"
2724
)
2825

@@ -57,77 +54,21 @@ func TestEtcdMasterNoOther(t *testing.T) {
5754
w.Stop()
5855
}
5956

60-
// MockClient is wrapper aroung tools.EtcdClient.
61-
type MockClient struct {
62-
client tools.EtcdClient
63-
t *testing.T
64-
// afterGetFunc is called after each Get() call.
65-
afterGetFunc func()
66-
calls []string
67-
}
68-
69-
func (m *MockClient) GetCluster() []string {
70-
return m.client.GetCluster()
71-
}
72-
73-
func (m *MockClient) Get(key string, sort, recursive bool) (*etcd.Response, error) {
74-
m.calls = append(m.calls, "get")
75-
defer m.afterGetFunc()
76-
response, err := m.client.Get(key, sort, recursive)
77-
return response, err
78-
}
79-
80-
func (m *MockClient) Set(key, value string, ttl uint64) (*etcd.Response, error) {
81-
return m.client.Set(key, value, ttl)
82-
}
83-
84-
func (m *MockClient) Create(key, value string, ttl uint64) (*etcd.Response, error) {
85-
m.calls = append(m.calls, "create")
86-
return m.client.Create(key, value, ttl)
87-
}
88-
89-
func (m *MockClient) CompareAndSwap(key, value string, ttl uint64, prevValue string, prevIndex uint64) (*etcd.Response, error) {
90-
return m.client.CompareAndSwap(key, value, ttl, prevValue, prevIndex)
91-
}
92-
93-
func (m *MockClient) Delete(key string, recursive bool) (*etcd.Response, error) {
94-
return m.client.Delete(key, recursive)
95-
}
96-
97-
func (m *MockClient) Watch(prefix string, waitIndex uint64, recursive bool, receiver chan *etcd.Response, stop chan bool) (*etcd.Response, error) {
98-
return m.client.Watch(prefix, waitIndex, recursive, receiver, stop)
99-
}
100-
10157
func TestEtcdMasterNoOtherThenConflict(t *testing.T) {
10258
server := etcdtesting.NewEtcdTestClientServer(t)
10359
defer server.Terminate(t)
10460

105-
// We set up the following scenario:
106-
// - after each Get() call, we write "baz" to a path
107-
// - this is simulating someone else writing a data
108-
// - the value written by someone else is the new value
10961
path := "foo"
110-
client := &MockClient{
111-
client: server.Client,
112-
t: t,
113-
afterGetFunc: func() {
114-
if _, err := server.Client.Set(path, "baz", 0); err != nil {
115-
t.Errorf("unexpected error: %v", err)
116-
}
117-
},
118-
calls: make([]string, 0),
119-
}
62+
master := NewEtcdMasterElector(server.Client)
63+
leader := NewEtcdMasterElector(server.Client)
12064

121-
master := NewEtcdMasterElector(client)
65+
w_ldr := leader.Elect(path, "baz")
66+
result := <-w_ldr.ResultChan()
12267
w := master.Elect(path, "bar")
123-
result := <-w.ResultChan()
68+
result = <-w.ResultChan()
12469
if result.Type != watch.Modified || result.Object.(Master) != "baz" {
12570
t.Errorf("unexpected event: %#v", result)
12671
}
12772
w.Stop()
128-
129-
expectedCalls := []string{"get", "create", "get"}
130-
if !reflect.DeepEqual(client.calls, expectedCalls) {
131-
t.Errorf("unexpected calls: %#v", client.calls)
132-
}
73+
w_ldr.Stop()
13374
}

contrib/mesos/pkg/scheduler/service/service.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ import (
7575
"k8s.io/kubernetes/pkg/healthz"
7676
"k8s.io/kubernetes/pkg/master/ports"
7777
etcdutil "k8s.io/kubernetes/pkg/storage/etcd/util"
78-
"k8s.io/kubernetes/pkg/tools"
7978

8079
// lock to this API version, compilation will fail when this becomes unsupported
8180
_ "k8s.io/kubernetes/pkg/api/v1"
@@ -630,7 +629,7 @@ func validateLeadershipTransition(desired, current string) {
630629
}
631630

632631
// hacked from https://github.com/GoogleCloudPlatform/kubernetes/blob/release-0.14/cmd/kube-apiserver/app/server.go
633-
func newEtcd(etcdConfigFile string, etcdServerList []string) (client tools.EtcdClient, err error) {
632+
func newEtcd(etcdConfigFile string, etcdServerList []string) (client *etcd.Client, err error) {
634633
if etcdConfigFile != "" {
635634
client, err = etcd.NewClientFromFile(etcdConfigFile)
636635
} else {
@@ -639,7 +638,7 @@ func newEtcd(etcdConfigFile string, etcdServerList []string) (client tools.EtcdC
639638
return
640639
}
641640

642-
func (s *SchedulerServer) bootstrap(hks hyperkube.Interface, sc *schedcfg.Config) (*ha.SchedulerProcess, ha.DriverFactory, tools.EtcdClient, *mesos.ExecutorID) {
641+
func (s *SchedulerServer) bootstrap(hks hyperkube.Interface, sc *schedcfg.Config) (*ha.SchedulerProcess, ha.DriverFactory, *etcd.Client, *mesos.ExecutorID) {
643642
s.frameworkName = strings.TrimSpace(s.frameworkName)
644643
if s.frameworkName == "" {
645644
log.Fatalf("framework-name must be a non-empty string")
@@ -917,7 +916,7 @@ func (s *SchedulerServer) buildFrameworkInfo() (info *mesos.FrameworkInfo, cred
917916
return
918917
}
919918

920-
func (s *SchedulerServer) fetchFrameworkID(client tools.EtcdClient) (*mesos.FrameworkID, error) {
919+
func (s *SchedulerServer) fetchFrameworkID(client *etcd.Client) (*mesos.FrameworkID, error) {
921920
if s.failoverTimeout > 0 {
922921
if response, err := client.Get(meta.FrameworkIDKey, false, false); err != nil {
923922
if !etcdutil.IsEtcdNotFound(err) {

docs/admin/kube-apiserver.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ kube-apiserver
6464
--cloud-provider="": The provider for cloud services. Empty string for no provider.
6565
--cluster-name="kubernetes": The instance prefix for the cluster
6666
--cors-allowed-origins=[]: List of allowed origins for CORS, comma separated. An allowed origin can be a regular expression to support subdomain matching. If this list is empty CORS will not be enabled.
67-
--etcd-config="": The config file for the etcd client. Mutually exclusive with -etcd-servers.
6867
--etcd-prefix="/registry": The prefix for all resource paths in etcd.
6968
--etcd-servers=[]: List of etcd servers to watch (http://ip:port), comma separated. Mutually exclusive with -etcd-config
7069
--etcd-servers-overrides=[]: Per-resource etcd servers overrides, comma separated. The individual override format: group/resource#servers, where servers are http://ip:port, semicolon separated.
@@ -107,7 +106,7 @@ kube-apiserver
107106
--watch-cache[=true]: Enable watch caching in the apiserver
108107
```
109108

110-
###### Auto generated by spf13/cobra on 3-Dec-2015
109+
###### Auto generated by spf13/cobra on 9-Dec-2015
111110

112111

113112
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->

pkg/storage/etcd/etcd_helper.go

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,64 @@ limitations under the License.
1717
package etcd
1818

1919
import (
20+
"crypto/tls"
2021
"errors"
2122
"fmt"
23+
"net/http"
2224
"path"
2325
"reflect"
2426
"strings"
2527
"time"
2628

27-
"github.com/coreos/go-etcd/etcd"
2829
"k8s.io/kubernetes/pkg/api"
2930
"k8s.io/kubernetes/pkg/api/meta"
3031
"k8s.io/kubernetes/pkg/conversion"
3132
"k8s.io/kubernetes/pkg/runtime"
3233
"k8s.io/kubernetes/pkg/storage"
3334
"k8s.io/kubernetes/pkg/storage/etcd/metrics"
3435
etcdutil "k8s.io/kubernetes/pkg/storage/etcd/util"
35-
"k8s.io/kubernetes/pkg/tools"
3636
"k8s.io/kubernetes/pkg/util"
3737
"k8s.io/kubernetes/pkg/watch"
3838

39+
"github.com/coreos/go-etcd/etcd"
3940
"github.com/golang/glog"
4041
"golang.org/x/net/context"
42+
forked "k8s.io/kubernetes/third_party/forked/coreos/go-etcd/etcd"
4143
)
4244

43-
func NewEtcdStorage(client tools.EtcdClient, codec runtime.Codec, prefix string) storage.Interface {
45+
// storage.Config object for etcd.
46+
type EtcdConfig struct {
47+
ServerList []string
48+
Codec runtime.Codec
49+
Prefix string
50+
}
51+
52+
// implements storage.Config
53+
func (c *EtcdConfig) GetType() string {
54+
return "etcd"
55+
}
56+
57+
// implements storage.Config
58+
func (c *EtcdConfig) NewStorage() (storage.Interface, error) {
59+
etcdClient := etcd.NewClient(c.ServerList)
60+
if etcdClient == nil {
61+
return nil, errors.New("Failed to create new etcd client from serverlist")
62+
}
63+
transport := &http.Transport{
64+
Dial: forked.Dial,
65+
TLSClientConfig: &tls.Config{
66+
InsecureSkipVerify: true,
67+
},
68+
MaxIdleConnsPerHost: 500,
69+
}
70+
etcdClient.SetTransport(transport)
71+
72+
return NewEtcdStorage(etcdClient, c.Codec, c.Prefix), nil
73+
}
74+
75+
// Creates a new storage interface from the client
76+
// TODO: deprecate in favor of storage.Config abstraction over time
77+
func NewEtcdStorage(client *etcd.Client, codec runtime.Codec, prefix string) storage.Interface {
4478
return &etcdHelper{
4579
client: client,
4680
codec: codec,
@@ -53,7 +87,7 @@ func NewEtcdStorage(client tools.EtcdClient, codec runtime.Codec, prefix string)
5387

5488
// etcdHelper is the reference implementation of storage.Interface.
5589
type etcdHelper struct {
56-
client tools.EtcdClient
90+
client *etcd.Client
5791
codec runtime.Codec
5892
copier runtime.ObjectCopier
5993
// optional, has to be set to perform any atomic operations

pkg/storage/etcd/etcd_helper_test.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"sync"
2323
"testing"
2424

25+
"github.com/coreos/go-etcd/etcd"
2526
"github.com/stretchr/testify/assert"
2627
"golang.org/x/net/context"
2728
"k8s.io/kubernetes/pkg/api"
@@ -34,10 +35,6 @@ import (
3435
etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing"
3536
etcdutil "k8s.io/kubernetes/pkg/storage/etcd/util"
3637
storagetesting "k8s.io/kubernetes/pkg/storage/testing"
37-
38-
// TODO: once fakeClient has been purged move utils
39-
// and eliminate these deps
40-
"k8s.io/kubernetes/pkg/tools"
4138
)
4239

4340
const validEtcdVersion = "etcd 2.0.9"
@@ -58,7 +55,7 @@ func init() {
5855
)
5956
}
6057

61-
func newEtcdHelper(client tools.EtcdClient, codec runtime.Codec, prefix string) etcdHelper {
58+
func newEtcdHelper(client *etcd.Client, codec runtime.Codec, prefix string) etcdHelper {
6259
return *NewEtcdStorage(client, codec, prefix).(*etcdHelper)
6360
}
6461

0 commit comments

Comments
 (0)