func installFederationAPIs(s *options.APIServer, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory) { storage, err := f.New(federation.Resource("clusters")) if err != nil { glog.Fatalf("Unable to find storage destination for %v, due to %v", "clusters", err.Error()) } clusterStorage, clusterStatusStorage := clusteretcd.NewREST(generic.RESTOptions{ Storage: storage, Decorator: g.StorageDecorator(), DeleteCollectionWorkers: s.DeleteCollectionWorkers, }) federationResources := map[string]rest.Storage{ "clusters": clusterStorage, "clusters/status": clusterStatusStorage, } federationGroupMeta := registered.GroupOrDie(federation.GroupName) apiGroupInfo := genericapiserver.APIGroupInfo{ GroupMeta: *federationGroupMeta, VersionedResourcesStorageMap: map[string]map[string]rest.Storage{ "v1alpha1": federationResources, }, OptionsExternalVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion, Scheme: api.Scheme, ParameterCodec: api.ParameterCodec, NegotiatedSerializer: api.Codecs, } if err := g.InstallAPIGroup(&apiGroupInfo); err != nil { glog.Fatalf("Error in registering group versions: %v", err) } }
func createRESTOptionsOrDie(s *genericoptions.ServerRunOptions, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory, resource unversioned.GroupResource) generic.RESTOptions { storage, err := f.New(resource) if err != nil { glog.Fatalf("Unable to find storage destination for %v, due to %v", resource, err.Error()) } return generic.RESTOptions{ Storage: storage, Decorator: g.StorageDecorator(), DeleteCollectionWorkers: s.DeleteCollectionWorkers, } }
func createRESTOptionsOrDie(s *options.ServerRunOptions, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory, resource unversioned.GroupResource) generic.RESTOptions { config, err := f.NewConfig(resource) if err != nil { glog.Fatalf("Unable to find storage config for %v, due to %v", resource, err.Error()) } return generic.RESTOptions{ StorageConfig: config, Decorator: g.StorageDecorator(), DeleteCollectionWorkers: s.DeleteCollectionWorkers, ResourcePrefix: f.ResourcePrefix(resource), } }
func NewThirdPartyResourceServer(genericAPIServer *genericapiserver.GenericAPIServer, storageFactory genericapiserver.StorageFactory) *ThirdPartyResourceServer { ret := &ThirdPartyResourceServer{ genericAPIServer: genericAPIServer, thirdPartyResources: map[string]*thirdPartyEntry{}, } var err error ret.thirdPartyStorageConfig, err = storageFactory.NewConfig(extensions.Resource("thirdpartyresources")) if err != nil { glog.Fatalf("Error building third party storage: %v", err) } return ret }
func getServersToValidate(storageFactory genericapiserver.StorageFactory) map[string]apiserver.Server { serversToValidate := map[string]apiserver.Server{ "controller-manager": {Addr: "127.0.0.1", Port: ports.ControllerManagerPort, Path: "/healthz"}, "scheduler": {Addr: "127.0.0.1", Port: ports.SchedulerPort, Path: "/healthz"}, } for ix, machine := range storageFactory.Backends() { etcdUrl, err := url.Parse(machine) if err != nil { glog.Errorf("Failed to parse etcd url for validation: %v", err) continue } var port int var addr string if strings.Contains(etcdUrl.Host, ":") { var portString string addr, portString, err = net.SplitHostPort(etcdUrl.Host) if err != nil { glog.Errorf("Failed to split host/port: %s (%v)", etcdUrl.Host, err) continue } port, _ = strconv.Atoi(portString) } else { addr = etcdUrl.Host port = 2379 } // TODO: etcd health checking should be abstracted in the storage tier serversToValidate[fmt.Sprintf("etcd-%d", ix)] = apiserver.Server{ Addr: addr, EnableHTTPS: etcdUrl.Scheme == "https", Port: port, Path: "/health", Validate: etcdutil.EtcdHealthCheck, } } return serversToValidate }