diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index d85ec56e670..c90296e4286 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 91c68e9cabc..c5f35cf33be 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" @@ -120,7 +119,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 +136,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 @@ -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 } 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 2da04849add..1d452c210f0 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 3f208ee122c..918149d89a7 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 5a42ddcfb95..b037d24a7f1 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 ca315f8876f..9fa84e8a575 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