Fix kubectl run ignore namespace

Kubernetes-commit: b3c830d4bf260c68d4299cd1879dbe9ce9913bc6
This commit is contained in:
zhouya0 2020-05-04 22:35:03 +08:00 committed by Kubernetes Publisher
parent adb8353cbe
commit 4a94a16b14
2 changed files with 17 additions and 8 deletions

View File

@ -125,6 +125,9 @@ type RunOptions struct {
TTY bool TTY bool
fieldManager string fieldManager string
Namespace string
EnforceNamespace bool
genericclioptions.IOStreams genericclioptions.IOStreams
} }
@ -283,7 +286,7 @@ func (o *RunOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e
return cmdutil.UsageErrorf(cmd, "--port must be set when exposing a service") return cmdutil.UsageErrorf(cmd, "--port must be set when exposing a service")
} }
namespace, _, err := f.ToRawKubeConfigLoader().Namespace() o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace()
if err != nil { if err != nil {
return err return err
} }
@ -324,7 +327,7 @@ func (o *RunOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e
params["env"] = cmdutil.GetFlagStringArray(cmd, "env") params["env"] = cmdutil.GetFlagStringArray(cmd, "env")
var createdObjects = []*RunObject{} var createdObjects = []*RunObject{}
runObject, err := o.createGeneratedObject(f, cmd, generator, names, params, cmdutil.GetFlagString(cmd, "overrides"), namespace) runObject, err := o.createGeneratedObject(f, cmd, generator, names, params, cmdutil.GetFlagString(cmd, "overrides"))
if err != nil { if err != nil {
return err return err
} }
@ -336,7 +339,7 @@ func (o *RunOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e
if len(serviceGenerator) == 0 { if len(serviceGenerator) == 0 {
return cmdutil.UsageErrorf(cmd, "No service generator specified") return cmdutil.UsageErrorf(cmd, "No service generator specified")
} }
serviceRunObject, err := o.generateService(f, cmd, serviceGenerator, params, namespace) serviceRunObject, err := o.generateService(f, cmd, serviceGenerator, params)
if err != nil { if err != nil {
allErrs = append(allErrs, err) allErrs = append(allErrs, err)
} else { } else {
@ -563,7 +566,7 @@ func verifyImagePullPolicy(cmd *cobra.Command) error {
return cmdutil.UsageErrorf(cmd, "invalid image pull policy: %s", pullPolicy) return cmdutil.UsageErrorf(cmd, "invalid image pull policy: %s", pullPolicy)
} }
func (o *RunOptions) generateService(f cmdutil.Factory, cmd *cobra.Command, serviceGenerator string, paramsIn map[string]interface{}, namespace string) (*RunObject, error) { func (o *RunOptions) generateService(f cmdutil.Factory, cmd *cobra.Command, serviceGenerator string, paramsIn map[string]interface{}) (*RunObject, error) {
generators := generateversioned.GeneratorFn("expose") generators := generateversioned.GeneratorFn("expose")
generator, found := generators[serviceGenerator] generator, found := generators[serviceGenerator]
if !found { if !found {
@ -593,7 +596,7 @@ func (o *RunOptions) generateService(f cmdutil.Factory, cmd *cobra.Command, serv
params["default-name"] = name params["default-name"] = name
} }
runObject, err := o.createGeneratedObject(f, cmd, generator, names, params, cmdutil.GetFlagString(cmd, "service-overrides"), namespace) runObject, err := o.createGeneratedObject(f, cmd, generator, names, params, cmdutil.GetFlagString(cmd, "service-overrides"))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -609,7 +612,7 @@ func (o *RunOptions) generateService(f cmdutil.Factory, cmd *cobra.Command, serv
return runObject, nil return runObject, nil
} }
func (o *RunOptions) createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command, generator generate.Generator, names []generate.GeneratorParam, params map[string]interface{}, overrides, namespace string) (*RunObject, error) { func (o *RunOptions) createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command, generator generate.Generator, names []generate.GeneratorParam, params map[string]interface{}, overrides string) (*RunObject, error) {
err := generate.ValidateParams(names, params) err := generate.ValidateParams(names, params)
if err != nil { if err != nil {
return nil, err return nil, err
@ -665,10 +668,14 @@ func (o *RunOptions) createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command
NewHelper(client, mapping). NewHelper(client, mapping).
DryRun(o.DryRunStrategy == cmdutil.DryRunServer). DryRun(o.DryRunStrategy == cmdutil.DryRunServer).
WithFieldManager(o.fieldManager). WithFieldManager(o.fieldManager).
Create(namespace, false, obj) Create(o.Namespace, false, obj)
if err != nil { if err != nil {
return nil, err return nil, err
} }
} else {
if meta, err := meta.Accessor(actualObj); err == nil && o.EnforceNamespace {
meta.SetNamespace(o.Namespace)
}
} }
return &RunObject{ return &RunObject{

View File

@ -382,6 +382,8 @@ func TestGenerateService(t *testing.T) {
PrintObj: func(obj runtime.Object) error { PrintObj: func(obj runtime.Object) error {
return printer.PrintObj(obj, buff) return printer.PrintObj(obj, buff)
}, },
Namespace: "test",
} }
cmd := &cobra.Command{} cmd := &cobra.Command{}
@ -398,7 +400,7 @@ func TestGenerateService(t *testing.T) {
test.params["port"] = test.port test.params["port"] = test.port
} }
_, err = opts.generateService(tf, cmd, test.serviceGenerator, test.params, "test") _, err = opts.generateService(tf, cmd, test.serviceGenerator, test.params)
if test.expectErr { if test.expectErr {
if err == nil { if err == nil {
t.Error("unexpected non-error") t.Error("unexpected non-error")