func installExtensionsAPIs(s *options.ServerRunOptions, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory) { replicaSetStorage := replicasetetcd.NewStorage(createRESTOptionsOrDie(s, g, f, extensions.Resource("replicasets"))) ingressStorage, ingressStatusStorage := ingressetcd.NewREST(createRESTOptionsOrDie(s, g, f, extensions.Resource("ingresses"))) extensionsResources := map[string]rest.Storage{ "replicasets": replicaSetStorage.ReplicaSet, "replicasets/status": replicaSetStorage.Status, "replicasets/scale": replicaSetStorage.Scale, "ingresses": ingressStorage, "ingresses/status": ingressStatusStorage, } extensionsGroupMeta := registered.GroupOrDie(extensions.GroupName) apiGroupInfo := genericapiserver.APIGroupInfo{ GroupMeta: *extensionsGroupMeta, VersionedResourcesStorageMap: map[string]map[string]rest.Storage{ "v1beta1": extensionsResources, }, 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) } }
// getExperimentalResources returns the resources for extensions api func (m *Master) getExtensionResources(c *Config) map[string]rest.Storage { restOptions := func(resource string) generic.RESTOptions { return m.GetRESTOptionsOrDie(c, extensions.Resource(resource)) } // TODO update when we support more than one version of this group version := extensionsapiv1beta1.SchemeGroupVersion storage := map[string]rest.Storage{} if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("horizontalpodautoscalers")) { hpaStorage, hpaStatusStorage := horizontalpodautoscaleretcd.NewREST(restOptions("horizontalpodautoscalers")) storage["horizontalpodautoscalers"] = hpaStorage storage["horizontalpodautoscalers/status"] = hpaStatusStorage controllerStorage := expcontrolleretcd.NewStorage(m.GetRESTOptionsOrDie(c, api.Resource("replicationControllers"))) storage["replicationcontrollers"] = controllerStorage.ReplicationController storage["replicationcontrollers/scale"] = controllerStorage.Scale } thirdPartyResourceStorage := thirdpartyresourceetcd.NewREST(restOptions("thirdpartyresources")) if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("thirdpartyresources")) { thirdPartyControl := ThirdPartyController{ master: m, thirdPartyResourceRegistry: thirdPartyResourceStorage, } if !m.disableThirdPartyControllerForTesting { go wait.Forever(func() { if err := thirdPartyControl.SyncResources(); err != nil { glog.Warningf("third party resource sync failed: %v", err) } }, 10*time.Second) } storage["thirdpartyresources"] = thirdPartyResourceStorage } daemonSetStorage, daemonSetStatusStorage := daemonetcd.NewREST(restOptions("daemonsets")) if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("daemonsets")) { storage["daemonsets"] = daemonSetStorage storage["daemonsets/status"] = daemonSetStatusStorage } deploymentStorage := deploymentetcd.NewStorage(restOptions("deployments")) if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("deployments")) { storage["deployments"] = deploymentStorage.Deployment storage["deployments/status"] = deploymentStorage.Status storage["deployments/rollback"] = deploymentStorage.Rollback storage["deployments/scale"] = deploymentStorage.Scale } if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("jobs")) { jobsStorage, jobsStatusStorage := jobetcd.NewREST(restOptions("jobs")) storage["jobs"] = jobsStorage storage["jobs/status"] = jobsStatusStorage } ingressStorage, ingressStatusStorage := ingressetcd.NewREST(restOptions("ingresses")) if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("ingresses")) { storage["ingresses"] = ingressStorage storage["ingresses/status"] = ingressStatusStorage } podSecurityPolicyStorage := pspetcd.NewREST(restOptions("podsecuritypolicy")) if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("podsecuritypolicy")) { storage["podSecurityPolicies"] = podSecurityPolicyStorage } replicaSetStorage := replicasetetcd.NewStorage(restOptions("replicasets")) if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("replicasets")) { storage["replicasets"] = replicaSetStorage.ReplicaSet storage["replicasets/status"] = replicaSetStorage.Status storage["replicasets/scale"] = replicaSetStorage.Scale } networkPolicyStorage := networkpolicyetcd.NewREST(restOptions("networkpolicies")) if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("networkpolicies")) { storage["networkpolicies"] = networkPolicyStorage } return storage }
// getExperimentalResources returns the resources for extensions api func (m *Master) getExtensionResources(c *Config) map[string]rest.Storage { // All resources except these are disabled by default. enabledResources := sets.NewString("daemonsets", "deployments", "horizontalpodautoscalers", "ingresses", "jobs", "replicasets") resourceOverrides := m.ApiGroupVersionOverrides["extensions/v1beta1"].ResourceOverrides isEnabled := func(resource string) bool { // Check if the resource has been overriden. enabled, ok := resourceOverrides[resource] if !ok { return enabledResources.Has(resource) } return enabled } restOptions := func(resource string) generic.RESTOptions { return generic.RESTOptions{ Storage: c.StorageDestinations.Get(extensions.GroupName, resource), Decorator: m.StorageDecorator(), DeleteCollectionWorkers: m.deleteCollectionWorkers, } } storage := map[string]rest.Storage{} if isEnabled("horizontalpodautoscalers") { m.constructHPAResources(c, storage) controllerStorage := expcontrolleretcd.NewStorage( generic.RESTOptions{c.StorageDestinations.Get("", "replicationControllers"), m.StorageDecorator(), m.deleteCollectionWorkers}) storage["replicationcontrollers"] = controllerStorage.ReplicationController storage["replicationcontrollers/scale"] = controllerStorage.Scale } if isEnabled("thirdpartyresources") { thirdPartyResourceStorage := thirdpartyresourceetcd.NewREST(restOptions("thirdpartyresources")) thirdPartyControl := ThirdPartyController{ master: m, thirdPartyResourceRegistry: thirdPartyResourceStorage, } go func() { wait.Forever(func() { if err := thirdPartyControl.SyncResources(); err != nil { glog.Warningf("third party resource sync failed: %v", err) } }, 10*time.Second) }() storage["thirdpartyresources"] = thirdPartyResourceStorage } if isEnabled("daemonsets") { daemonSetStorage, daemonSetStatusStorage := daemonetcd.NewREST(restOptions("daemonsets")) storage["daemonsets"] = daemonSetStorage storage["daemonsets/status"] = daemonSetStatusStorage } if isEnabled("deployments") { deploymentStorage := deploymentetcd.NewStorage(restOptions("deployments")) storage["deployments"] = deploymentStorage.Deployment storage["deployments/status"] = deploymentStorage.Status storage["deployments/rollback"] = deploymentStorage.Rollback storage["deployments/scale"] = deploymentStorage.Scale } if isEnabled("jobs") { m.constructJobResources(c, storage) } if isEnabled("ingresses") { ingressStorage, ingressStatusStorage := ingressetcd.NewREST(restOptions("ingresses")) storage["ingresses"] = ingressStorage storage["ingresses/status"] = ingressStatusStorage } if isEnabled("podsecuritypolicy") { podSecurityPolicyStorage := pspetcd.NewREST(restOptions("podsecuritypolicy")) storage["podSecurityPolicies"] = podSecurityPolicyStorage } if isEnabled("replicasets") { replicaSetStorage := replicasetetcd.NewStorage(restOptions("replicasets")) storage["replicasets"] = replicaSetStorage.ReplicaSet storage["replicasets/status"] = replicaSetStorage.Status storage["replicasets/scale"] = replicaSetStorage.Scale } return storage }
// getExperimentalResources returns the resources for extensions api func (m *Master) getExtensionResources(c *Config) map[string]rest.Storage { // All resources except these are disabled by default. enabledResources := sets.NewString("daemonsets", "deployments", "horizontalpodautoscalers", "ingresses", "jobs", "replicasets") resourceOverrides := m.ApiGroupVersionOverrides["extensions/v1beta1"].ResourceOverrides isEnabled := func(resource string) bool { // Check if the resource has been overriden. enabled, ok := resourceOverrides[resource] if !ok { return enabledResources.Has(resource) } return enabled } storageDecorator := m.StorageDecorator() dbClient := func(resource string) storage.Interface { return c.StorageDestinations.Get(extensions.GroupName, resource) } storage := map[string]rest.Storage{} if isEnabled("horizontalpodautoscalers") { m.constructHPAResources(c, storage) controllerStorage := expcontrolleretcd.NewStorage(c.StorageDestinations.Get("", "replicationControllers"), storageDecorator) storage["replicationcontrollers"] = controllerStorage.ReplicationController storage["replicationcontrollers/scale"] = controllerStorage.Scale } if isEnabled("thirdpartyresources") { thirdPartyResourceStorage := thirdpartyresourceetcd.NewREST(dbClient("thirdpartyresources"), storageDecorator) thirdPartyControl := ThirdPartyController{ master: m, thirdPartyResourceRegistry: thirdPartyResourceStorage, } go func() { wait.Forever(func() { if err := thirdPartyControl.SyncResources(); err != nil { glog.Warningf("third party resource sync failed: %v", err) } }, 10*time.Second) }() storage["thirdpartyresources"] = thirdPartyResourceStorage } if isEnabled("daemonsets") { daemonSetStorage, daemonSetStatusStorage := daemonetcd.NewREST(dbClient("daemonsets"), storageDecorator) storage["daemonsets"] = daemonSetStorage storage["daemonsets/status"] = daemonSetStatusStorage } if isEnabled("deployments") { deploymentStorage := deploymentetcd.NewStorage(dbClient("deployments"), storageDecorator) storage["deployments"] = deploymentStorage.Deployment storage["deployments/status"] = deploymentStorage.Status // TODO(madhusudancs): Install scale when Scale group issues are fixed (see issue #18528). // storage["deployments/scale"] = deploymentStorage.Scale storage["deployments/rollback"] = deploymentStorage.Rollback } if isEnabled("jobs") { jobStorage, jobStatusStorage := jobetcd.NewREST(dbClient("jobs"), storageDecorator) storage["jobs"] = jobStorage storage["jobs/status"] = jobStatusStorage } if isEnabled("ingresses") { ingressStorage, ingressStatusStorage := ingressetcd.NewREST(dbClient("ingresses"), storageDecorator) storage["ingresses"] = ingressStorage storage["ingresses/status"] = ingressStatusStorage } if isEnabled("podsecuritypolicy") { podSecurityPolicyStorage := pspetcd.NewREST(dbClient("podsecuritypolicy"), storageDecorator) storage["podSecurityPolicies"] = podSecurityPolicyStorage } if isEnabled("replicasets") { replicaSetStorage := replicasetetcd.NewStorage(dbClient("replicasets"), storageDecorator) storage["replicasets"] = replicaSetStorage.ReplicaSet storage["replicasets/status"] = replicaSetStorage.Status } return storage }
func (p ExtensionsRESTStorageProvider) v1beta1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter RESTOptionsGetter) map[string]rest.Storage { version := extensionsapiv1beta1.SchemeGroupVersion storage := map[string]rest.Storage{} if apiResourceConfigSource.ResourceEnabled(version.WithResource("horizontalpodautoscalers")) { hpaStorage, hpaStatusStorage := horizontalpodautoscaleretcd.NewREST(restOptionsGetter(extensions.Resource("horizontalpodautoscalers"))) storage["horizontalpodautoscalers"] = hpaStorage storage["horizontalpodautoscalers/status"] = hpaStatusStorage controllerStorage := expcontrolleretcd.NewStorage(restOptionsGetter(api.Resource("replicationControllers"))) storage["replicationcontrollers"] = controllerStorage.ReplicationController storage["replicationcontrollers/scale"] = controllerStorage.Scale } if apiResourceConfigSource.ResourceEnabled(version.WithResource("thirdpartyresources")) { thirdPartyResourceStorage := thirdpartyresourceetcd.NewREST(restOptionsGetter(extensions.Resource("thirdpartyresources"))) thirdPartyControl := ThirdPartyController{ master: p.ResourceInterface, thirdPartyResourceRegistry: thirdPartyResourceStorage, } if !p.DisableThirdPartyControllerForTesting { go wait.Forever(func() { if err := thirdPartyControl.SyncResources(); err != nil { glog.Warningf("third party resource sync failed: %v", err) } }, 10*time.Second) } storage["thirdpartyresources"] = thirdPartyResourceStorage } if apiResourceConfigSource.ResourceEnabled(version.WithResource("daemonsets")) { daemonSetStorage, daemonSetStatusStorage := daemonetcd.NewREST(restOptionsGetter(extensions.Resource("daemonsets"))) storage["daemonsets"] = daemonSetStorage storage["daemonsets/status"] = daemonSetStatusStorage } if apiResourceConfigSource.ResourceEnabled(version.WithResource("deployments")) { deploymentStorage := deploymentetcd.NewStorage(restOptionsGetter(extensions.Resource("deployments"))) storage["deployments"] = deploymentStorage.Deployment storage["deployments/status"] = deploymentStorage.Status storage["deployments/rollback"] = deploymentStorage.Rollback storage["deployments/scale"] = deploymentStorage.Scale } if apiResourceConfigSource.ResourceEnabled(version.WithResource("jobs")) { jobsStorage, jobsStatusStorage := jobetcd.NewREST(restOptionsGetter(extensions.Resource("jobs"))) storage["jobs"] = jobsStorage storage["jobs/status"] = jobsStatusStorage } if apiResourceConfigSource.ResourceEnabled(version.WithResource("ingresses")) { ingressStorage, ingressStatusStorage := ingressetcd.NewREST(restOptionsGetter(extensions.Resource("ingresses"))) storage["ingresses"] = ingressStorage storage["ingresses/status"] = ingressStatusStorage } if apiResourceConfigSource.ResourceEnabled(version.WithResource("podsecuritypolicy")) { podSecurityExtensionsStorage := pspetcd.NewREST(restOptionsGetter(extensions.Resource("podsecuritypolicy"))) storage["podSecurityPolicies"] = podSecurityExtensionsStorage } if apiResourceConfigSource.ResourceEnabled(version.WithResource("replicasets")) { replicaSetStorage := replicasetetcd.NewStorage(restOptionsGetter(extensions.Resource("replicasets"))) storage["replicasets"] = replicaSetStorage.ReplicaSet storage["replicasets/status"] = replicaSetStorage.Status storage["replicasets/scale"] = replicaSetStorage.Scale } if apiResourceConfigSource.ResourceEnabled(version.WithResource("networkpolicies")) { networkExtensionsStorage := networkpolicyetcd.NewREST(restOptionsGetter(extensions.Resource("networkpolicies"))) storage["networkpolicies"] = networkExtensionsStorage } return storage }
// getExperimentalResources returns the resources for extensions api func (m *Master) getExtensionResources(c *Config) map[string]rest.Storage { restOptions := func(resource string) generic.RESTOptions { return generic.RESTOptions{ Storage: c.StorageDestinations.Get(extensions.GroupName, resource), Decorator: m.StorageDecorator(), DeleteCollectionWorkers: m.deleteCollectionWorkers, } } // TODO update when we support more than one version of this group version := extensionsapiv1beta1.SchemeGroupVersion storage := map[string]rest.Storage{} if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("horizontalpodautoscalers")) { m.constructHPAResources(c, storage) controllerStorage := expcontrolleretcd.NewStorage( generic.RESTOptions{Storage: c.StorageDestinations.Get("", "replicationControllers"), Decorator: m.StorageDecorator(), DeleteCollectionWorkers: m.deleteCollectionWorkers}) storage["replicationcontrollers"] = controllerStorage.ReplicationController storage["replicationcontrollers/scale"] = controllerStorage.Scale } thirdPartyResourceStorage := thirdpartyresourceetcd.NewREST(restOptions("thirdpartyresources")) if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("thirdpartyresources")) { thirdPartyControl := ThirdPartyController{ master: m, thirdPartyResourceRegistry: thirdPartyResourceStorage, } if !m.disableThirdPartyControllerForTesting { go wait.Forever(func() { if err := thirdPartyControl.SyncResources(); err != nil { glog.Warningf("third party resource sync failed: %v", err) } }, 10*time.Second) } storage["thirdpartyresources"] = thirdPartyResourceStorage } daemonSetStorage, daemonSetStatusStorage := daemonetcd.NewREST(restOptions("daemonsets")) if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("daemonsets")) { storage["daemonsets"] = daemonSetStorage storage["daemonsets/status"] = daemonSetStatusStorage } deploymentStorage := deploymentetcd.NewStorage(restOptions("deployments")) if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("deployments")) { storage["deployments"] = deploymentStorage.Deployment storage["deployments/status"] = deploymentStorage.Status storage["deployments/rollback"] = deploymentStorage.Rollback storage["deployments/scale"] = deploymentStorage.Scale } if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("jobs")) { m.constructJobResources(c, storage) } ingressStorage, ingressStatusStorage := ingressetcd.NewREST(restOptions("ingresses")) if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("ingresses")) { storage["ingresses"] = ingressStorage storage["ingresses/status"] = ingressStatusStorage } podSecurityPolicyStorage := pspetcd.NewREST(restOptions("podsecuritypolicy")) if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("podsecuritypolicy")) { storage["podSecurityPolicies"] = podSecurityPolicyStorage } replicaSetStorage := replicasetetcd.NewStorage(restOptions("replicasets")) if c.APIResourceConfigSource.ResourceEnabled(version.WithResource("replicasets")) { storage["replicasets"] = replicaSetStorage.ReplicaSet storage["replicasets/status"] = replicaSetStorage.Status storage["replicasets/scale"] = replicaSetStorage.Scale } return storage }