From f9f1e21e08a6fb51f53c7d8380bfb16870b68508 Mon Sep 17 00:00:00 2001 From: nikhiljindal Date: Thu, 21 Apr 2016 17:48:35 -0700 Subject: [PATCH 1/2] Moving master.SSHTunneler to genericapiserver --- cmd/kube-apiserver/app/server.go | 6 ++-- .../cmd/federated-apiserver/app/server.go | 4 +-- pkg/{master => genericapiserver}/tunneler.go | 2 +- .../tunneler_test.go | 23 +------------ pkg/master/master.go | 4 +-- pkg/master/master_test.go | 32 +++++++++++++++++++ 6 files changed, 41 insertions(+), 30 deletions(-) rename pkg/{master => genericapiserver}/tunneler.go (99%) rename pkg/{master => genericapiserver}/tunneler_test.go (79%) diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index d85ec56e67..c90296e428 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -101,11 +101,11 @@ func Run(s *options.APIServer) error { } // Setup tunneler if needed - var tunneler master.Tunneler + var tunneler genericapiserver.Tunneler var proxyDialerFn apiserver.ProxyDialerFunc if len(s.SSHUser) > 0 { // Get ssh key distribution func, if supported - var installSSH master.InstallSSHKey + var installSSH genericapiserver.InstallSSHKey if cloud != nil { if instances, supported := cloud.Instances(); supported { installSSH = instances.AddSSHKeyToAllInstances @@ -122,7 +122,7 @@ func Run(s *options.APIServer) error { Host: net.JoinHostPort("127.0.0.1", strconv.FormatUint(uint64(s.KubeletConfig.Port), 10)), Path: "healthz", } - tunneler = master.NewSSHTunneler(s.SSHUser, s.SSHKeyfile, healthCheckPath, installSSH) + tunneler = genericapiserver.NewSSHTunneler(s.SSHUser, s.SSHKeyfile, healthCheckPath, installSSH) // Use the tunneler's dialer to connect to the kubelet s.KubeletConfig.Dial = tunneler.Dial diff --git a/federation/cmd/federated-apiserver/app/server.go b/federation/cmd/federated-apiserver/app/server.go index 91c68e9cab..b802de97ef 100644 --- a/federation/cmd/federated-apiserver/app/server.go +++ b/federation/cmd/federated-apiserver/app/server.go @@ -120,7 +120,7 @@ func Run(s *options.APIServer) error { var proxyDialerFn apiserver.ProxyDialerFunc if len(s.SSHUser) > 0 { // Get ssh key distribution func, if supported - var installSSH master.InstallSSHKey + var installSSH genericapiserver.InstallSSHKey if cloud != nil { if instances, supported := cloud.Instances(); supported { installSSH = instances.AddSSHKeyToAllInstances @@ -137,7 +137,7 @@ func Run(s *options.APIServer) error { Host: net.JoinHostPort("127.0.0.1", strconv.FormatUint(uint64(s.KubeletConfig.Port), 10)), Path: "healthz", } - tunneler := master.NewSSHTunneler(s.SSHUser, s.SSHKeyfile, healthCheckPath, installSSH) + tunneler := genericapiserver.NewSSHTunneler(s.SSHUser, s.SSHKeyfile, healthCheckPath, installSSH) // Use the tunneler's dialer to connect to the kubelet s.KubeletConfig.Dial = tunneler.Dial diff --git a/pkg/master/tunneler.go b/pkg/genericapiserver/tunneler.go similarity index 99% rename from pkg/master/tunneler.go rename to pkg/genericapiserver/tunneler.go index 2da04849ad..1d452c210f 100644 --- a/pkg/master/tunneler.go +++ b/pkg/genericapiserver/tunneler.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package master +package genericapiserver import ( "io/ioutil" diff --git a/pkg/master/tunneler_test.go b/pkg/genericapiserver/tunneler_test.go similarity index 79% rename from pkg/master/tunneler_test.go rename to pkg/genericapiserver/tunneler_test.go index 3f208ee122..918149d89a 100644 --- a/pkg/master/tunneler_test.go +++ b/pkg/genericapiserver/tunneler_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package master +package genericapiserver import ( "fmt" @@ -66,27 +66,6 @@ func TestSecondsSinceSync(t *testing.T) { assert.Equal(int64(-2678400), tunneler.SecondsSinceSync()) } -// TestIsTunnelSyncHealthy verifies that the 600 second lag test -// is honored. -func TestIsTunnelSyncHealthy(t *testing.T) { - tunneler := &SSHTunneler{} - master, etcdserver, _, assert := setUp(t) - defer etcdserver.Terminate(t) - master.tunneler = tunneler - - // Pass case: 540 second lag - tunneler.lastSync = time.Date(2015, time.January, 1, 1, 1, 1, 1, time.UTC).Unix() - tunneler.lastSSHKeySync = time.Date(2015, time.January, 1, 1, 1, 1, 1, time.UTC).Unix() - tunneler.clock = util.NewFakeClock(time.Date(2015, time.January, 1, 1, 9, 1, 1, time.UTC)) - err := master.IsTunnelSyncHealthy(nil) - assert.NoError(err, "IsTunnelSyncHealthy() should not have returned an error.") - - // Fail case: 720 second lag - tunneler.clock = util.NewFakeClock(time.Date(2015, time.January, 1, 1, 12, 1, 1, time.UTC)) - err = master.IsTunnelSyncHealthy(nil) - assert.Error(err, "IsTunnelSyncHealthy() should have returned an error.") -} - // generateTempFile creates a temporary file path func generateTempFilePath(prefix string) string { tmpPath, _ := filepath.Abs(fmt.Sprintf("%s/%s-%d", os.TempDir(), prefix, time.Now().Unix())) diff --git a/pkg/master/master.go b/pkg/master/master.go index fe32c15e75..154c64ce38 100644 --- a/pkg/master/master.go +++ b/pkg/master/master.go @@ -102,7 +102,7 @@ type Config struct { EventTTL time.Duration KubeletClient kubeletclient.KubeletClient // Used to start and monitor tunneling - Tunneler Tunneler + Tunneler genericapiserver.Tunneler disableThirdPartyControllerForTesting bool } @@ -136,7 +136,7 @@ type Master struct { disableThirdPartyControllerForTesting bool // Used to start and monitor tunneling - tunneler Tunneler + tunneler genericapiserver.Tunneler } // thirdPartyEntry combines objects storage and API group into one struct diff --git a/pkg/master/master_test.go b/pkg/master/master_test.go index ca315f8876..9fa84e8a57 100644 --- a/pkg/master/master_test.go +++ b/pkg/master/master_test.go @@ -1010,6 +1010,38 @@ func TestThirdPartyDiscovery(t *testing.T) { } } +type FakeTunneler struct { + SecondsSinceSyncValue int64 + SecondsSinceSSHKeySyncValue int64 +} + +func (t *FakeTunneler) Run(genericapiserver.AddressFunc) {} +func (t *FakeTunneler) Stop() {} +func (t *FakeTunneler) Dial(net, addr string) (net.Conn, error) { return nil, nil } +func (t *FakeTunneler) SecondsSinceSync() int64 { return t.SecondsSinceSyncValue } +func (t *FakeTunneler) SecondsSinceSSHKeySync() int64 { return t.SecondsSinceSSHKeySyncValue } + +// TestIsTunnelSyncHealthy verifies that the 600 second lag test +// is honored. +func TestIsTunnelSyncHealthy(t *testing.T) { + assert := assert.New(t) + tunneler := &FakeTunneler{} + master := &Master{ + GenericAPIServer: &genericapiserver.GenericAPIServer{}, + tunneler: tunneler, + } + + // Pass case: 540 second lag + tunneler.SecondsSinceSyncValue = 540 + err := master.IsTunnelSyncHealthy(nil) + assert.NoError(err, "IsTunnelSyncHealthy() should not have returned an error.") + + // Fail case: 720 second lag + tunneler.SecondsSinceSyncValue = 720 + err = master.IsTunnelSyncHealthy(nil) + assert.Error(err, "IsTunnelSyncHealthy() should have returned an error.") +} + func testThirdPartyDiscovery(t *testing.T, version string) { _, etcdserver, server, assert := initThirdParty(t, version) // TODO: Uncomment when fix #19254 From beebca1bb9db1d1892ef348288653bfa43fc3cb9 Mon Sep 17 00:00:00 2001 From: nikhiljindal Date: Thu, 21 Apr 2016 17:50:33 -0700 Subject: [PATCH 2/2] Stop depending on pkg/master in federated-apiserver --- federation/cmd/federated-apiserver/app/server.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/federation/cmd/federated-apiserver/app/server.go b/federation/cmd/federated-apiserver/app/server.go index b802de97ef..c5f35cf33b 100644 --- a/federation/cmd/federated-apiserver/app/server.go +++ b/federation/cmd/federated-apiserver/app/server.go @@ -42,7 +42,6 @@ import ( "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/genericapiserver" - "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/runtime" utilnet "k8s.io/kubernetes/pkg/util/net" @@ -318,6 +317,6 @@ func getRuntimeConfigValue(s *options.APIServer, apiKey string, defaultValue boo // Parses the given runtime-config and formats it into genericapiserver.APIResourceConfigSource func parseRuntimeConfig(s *options.APIServer) (genericapiserver.APIResourceConfigSource, error) { // TODO: parse the relevant group version when we add any. - resourceConfig := master.DefaultAPIResourceConfigSource() + resourceConfig := genericapiserver.NewResourceConfig() return resourceConfig, nil }