check if experimental is enabled during startup of client and server

This commit is contained in:
Chao Xu 2015-09-11 15:46:18 -07:00
parent ac5481d089
commit 3dc5223f4f
3 changed files with 26 additions and 6 deletions

View File

@ -35,7 +35,7 @@ import (
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/latest"
"k8s.io/kubernetes/pkg/api/meta"
explatest "k8s.io/kubernetes/pkg/apis/experimental/latest"
"k8s.io/kubernetes/pkg/api/registered"
"k8s.io/kubernetes/pkg/apiserver"
"k8s.io/kubernetes/pkg/capabilities"
client "k8s.io/kubernetes/pkg/client/unversioned"
@ -331,6 +331,10 @@ func (s *APIServer) Run(_ []string) error {
// This takes preference over api/all, if specified.
enableExp := s.getRuntimeConfigValue("experimental/v1", false)
if enableExp && len(registered.GroupVersionsForGroup("experimental")) == 0 {
glog.Fatalf("experimental API is enabled in runtime config, but not registered throught environment variable KUBE_API_VERSIONS")
}
clientConfig := &client.Config{
Host: net.JoinHostPort(s.InsecureBindAddress.String(), strconv.Itoa(s.InsecurePort)),
Version: s.StorageVersion,
@ -344,9 +348,14 @@ func (s *APIServer) Run(_ []string) error {
if err != nil {
glog.Fatalf("Invalid storage version or misconfigured etcd: %v", err)
}
expEtcdStorage, err := newEtcd(s.EtcdConfigFile, s.EtcdServerList, latest.GroupOrDie("experimental").InterfacesFor, latest.GroupOrDie("experimental").Version, s.ExpStorageVersion, s.EtcdPathPrefix)
if err != nil {
glog.Fatalf("Invalid experimental storage version or misconfigured etcd: %v", err)
var expEtcdStorage storage.Interface
if enableExp {
expEtcdStorage, err = newEtcd(s.EtcdConfigFile, s.EtcdServerList, latest.GroupOrDie("experimental").InterfacesFor, latest.GroupOrDie("experimental").Version, s.ExpStorageVersion, s.EtcdPathPrefix)
if err != nil {
glog.Fatalf("Invalid experimental storage version or misconfigured etcd: %v", err)
}
}
n := s.ServiceClusterIPRange

View File

@ -119,14 +119,20 @@ func NewExperimentalOrDie(c *Config) *ExperimentalClient {
}
func setExperimentalDefaults(config *Config) error {
// if experimental group is not registered, return an error
g, err := latest.Group("experimental")
if err != nil {
return err
}
config.Prefix = "/experimental"
if config.UserAgent == "" {
config.UserAgent = DefaultKubernetesUserAgent()
}
if config.Version == "" {
config.Version = latest.GroupOrDie("experimental").Version
config.Version = g.Version
}
versionInterfaces, err := latest.GroupOrDie("experimental").InterfacesFor(config.Version)
versionInterfaces, err := g.InterfacesFor(config.Version)
if err != nil {
return fmt.Errorf("Experimental API version '%s' is not recognized (valid values: %s)",
config.Version, strings.Join(latest.GroupOrDie("experimental").Versions, ", "))

View File

@ -33,6 +33,7 @@ import (
"github.com/golang/glog"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/latest"
"k8s.io/kubernetes/pkg/api/registered"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/util"
"k8s.io/kubernetes/pkg/util/sets"
@ -140,6 +141,10 @@ func New(c *Config) (*Client, error) {
if err != nil {
return nil, err
}
if len(registered.GroupVersionsForGroup("experimental")) == 0 {
return &Client{RESTClient: client, ExperimentalClient: nil}, nil
}
experimentalConfig := *c
experimentalClient, err := NewExperimental(&experimentalConfig)
if err != nil {