mirror of https://github.com/k3s-io/k3s
kubectl commands must not use the factory out of Run
parent
5423eaf431
commit
60fc7b87be
|
@ -19,6 +19,7 @@ package set
|
|||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
|
@ -37,8 +38,8 @@ var (
|
|||
Specify compute resource requirements (cpu, memory) for any resource that defines a pod template. If a pod is successfully scheduled, it is guaranteed the amount of resource requested, but may burst up to its specified limits.
|
||||
|
||||
for each compute resource, if a limit is specified and a request is omitted, the request will default to the limit.
|
||||
|
||||
Possible resources include (case insensitive):`)
|
||||
|
||||
Possible resources include (case insensitive): %s.`)
|
||||
|
||||
resources_example = templates.Examples(`
|
||||
# Set a deployments nginx container cpu limits to "200m" and memory to "512Mi"
|
||||
|
@ -87,17 +88,16 @@ func NewCmdResources(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.
|
|||
Out: out,
|
||||
Err: errOut,
|
||||
}
|
||||
var pod_specs string
|
||||
RESTMappings := cmdutil.ResourcesWithPodSpecs()
|
||||
for _, Map := range RESTMappings {
|
||||
pod_specs = pod_specs + ", " + Map.Resource
|
||||
|
||||
resourceTypesWithPodTemplate := []string{}
|
||||
for _, resource := range f.SuggestedPodTemplateResources() {
|
||||
resourceTypesWithPodTemplate = append(resourceTypesWithPodTemplate, resource.Resource)
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Use: "resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]",
|
||||
Short: "update resource requests/limits on objects with pod templates",
|
||||
Long: resources_long + " " + pod_specs[2:],
|
||||
Long: fmt.Sprintf(resources_long, strings.Join(resourceTypesWithPodTemplate, ", ")),
|
||||
Example: resources_example,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
cmdutil.CheckErr(options.Complete(f, cmd, args))
|
||||
|
|
|
@ -340,6 +340,10 @@ func (f *FakeFactory) DefaultResourceFilterFunc() kubectl.Filters {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (f *FakeFactory) SuggestedPodTemplateResources() []unversioned.GroupResource {
|
||||
return []unversioned.GroupResource{}
|
||||
}
|
||||
|
||||
type fakeMixedFactory struct {
|
||||
cmdutil.Factory
|
||||
tf *TestFactory
|
||||
|
@ -507,6 +511,10 @@ func (f *fakeAPIFactory) NewBuilder() *resource.Builder {
|
|||
return resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), f.Decoder(true))
|
||||
}
|
||||
|
||||
func (f *fakeAPIFactory) SuggestedPodTemplateResources() []unversioned.GroupResource {
|
||||
return []unversioned.GroupResource{}
|
||||
}
|
||||
|
||||
func NewAPIFactory() (cmdutil.Factory, *TestFactory, runtime.Codec, runtime.NegotiatedSerializer) {
|
||||
t := &TestFactory{
|
||||
Validator: validation.NullSchema{},
|
||||
|
|
|
@ -178,6 +178,9 @@ type Factory interface {
|
|||
PrinterForMapping(cmd *cobra.Command, mapping *meta.RESTMapping, withNamespace bool) (kubectl.ResourcePrinter, error)
|
||||
// One stop shopping for a Builder
|
||||
NewBuilder() *resource.Builder
|
||||
|
||||
// SuggestedPodTemplateResources returns a list of resource types that declare a pod template
|
||||
SuggestedPodTemplateResources() []unversioned.GroupResource
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -1333,6 +1336,16 @@ func (f *factory) NewBuilder() *resource.Builder {
|
|||
return resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), f.Decoder(true))
|
||||
}
|
||||
|
||||
func (f *factory) SuggestedPodTemplateResources() []unversioned.GroupResource {
|
||||
return []unversioned.GroupResource{
|
||||
{Resource: "replicationcontroller"},
|
||||
{Resource: "deployment"},
|
||||
{Resource: "daemonset"},
|
||||
{Resource: "job"},
|
||||
{Resource: "replicaset"},
|
||||
}
|
||||
}
|
||||
|
||||
// registerThirdPartyResources inspects the discovery endpoint to find thirdpartyresources in the discovery doc
|
||||
// and then registers them with the apimachinery code. I think this is done so that scheme/codec stuff works,
|
||||
// but I really don't know. Feels like this code should go away once kubectl is completely generic for generic
|
||||
|
@ -1383,20 +1396,3 @@ func registerThirdPartyResources(discoveryClient discovery.DiscoveryInterface) e
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
func ResourcesWithPodSpecs() []*meta.RESTMapping {
|
||||
restMaps := []*meta.RESTMapping{}
|
||||
resourcesWithTemplates := []string{"ReplicationController", "Deployment", "DaemonSet", "Job", "ReplicaSet"}
|
||||
mapper, _ := NewFactory(nil).Object()
|
||||
|
||||
for _, resource := range resourcesWithTemplates {
|
||||
restmap, err := mapper.RESTMapping(unversioned.GroupKind{Kind: resource})
|
||||
if err == nil {
|
||||
restMaps = append(restMaps, restmap)
|
||||
} else {
|
||||
mapping, _ := mapper.RESTMapping(extensions.Kind(resource))
|
||||
restMaps = append(restMaps, mapping)
|
||||
}
|
||||
}
|
||||
return restMaps
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue