Fix dry run client ignore namespace

Kubernetes-commit: 2f117260fb50926cf0967dfa2817728eb75e1e90
This commit is contained in:
zhouya0 2020-04-26 15:13:20 +08:00 committed by Kubernetes Publisher
parent 9088c0eaf0
commit 2ece9ead67
5 changed files with 55 additions and 33 deletions

View File

@ -58,12 +58,13 @@ type CreateCronJobOptions struct {
Command []string Command []string
Restart string Restart string
Namespace string Namespace string
Client batchv1beta1client.BatchV1beta1Interface EnforceNamespace bool
DryRunStrategy cmdutil.DryRunStrategy Client batchv1beta1client.BatchV1beta1Interface
DryRunVerifier *resource.DryRunVerifier DryRunStrategy cmdutil.DryRunStrategy
Builder *resource.Builder DryRunVerifier *resource.DryRunVerifier
FieldManager string Builder *resource.Builder
FieldManager string
genericclioptions.IOStreams genericclioptions.IOStreams
} }
@ -126,7 +127,7 @@ func (o *CreateCronJobOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, a
return err return err
} }
o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace() o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace()
if err != nil { if err != nil {
return err return err
} }
@ -193,7 +194,7 @@ func (o *CreateCronJobOptions) Run() error {
} }
func (o *CreateCronJobOptions) createCronJob() *batchv1beta1.CronJob { func (o *CreateCronJobOptions) createCronJob() *batchv1beta1.CronJob {
return &batchv1beta1.CronJob{ cronjob := &batchv1beta1.CronJob{
TypeMeta: metav1.TypeMeta{APIVersion: batchv1beta1.SchemeGroupVersion.String(), Kind: "CronJob"}, TypeMeta: metav1.TypeMeta{APIVersion: batchv1beta1.SchemeGroupVersion.String(), Kind: "CronJob"},
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: o.Name, Name: o.Name,
@ -221,4 +222,8 @@ func (o *CreateCronJobOptions) createCronJob() *batchv1beta1.CronJob {
}, },
}, },
} }
if o.EnforceNamespace {
cronjob.Namespace = o.Namespace
}
return cronjob
} }

View File

@ -62,12 +62,13 @@ type CreateJobOptions struct {
From string From string
Command []string Command []string
Namespace string Namespace string
Client batchv1client.BatchV1Interface EnforceNamespace bool
DryRunStrategy cmdutil.DryRunStrategy Client batchv1client.BatchV1Interface
DryRunVerifier *resource.DryRunVerifier DryRunStrategy cmdutil.DryRunStrategy
Builder *resource.Builder DryRunVerifier *resource.DryRunVerifier
FieldManager string Builder *resource.Builder
FieldManager string
genericclioptions.IOStreams genericclioptions.IOStreams
} }
@ -126,7 +127,7 @@ func (o *CreateJobOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args
return err return err
} }
o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace() o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace()
if err != nil { if err != nil {
return err return err
} }
@ -222,7 +223,7 @@ func (o *CreateJobOptions) Run() error {
} }
func (o *CreateJobOptions) createJob() *batchv1.Job { func (o *CreateJobOptions) createJob() *batchv1.Job {
return &batchv1.Job{ job := &batchv1.Job{
// this is ok because we know exactly how we want to be serialized // this is ok because we know exactly how we want to be serialized
TypeMeta: metav1.TypeMeta{APIVersion: batchv1.SchemeGroupVersion.String(), Kind: "Job"}, TypeMeta: metav1.TypeMeta{APIVersion: batchv1.SchemeGroupVersion.String(), Kind: "Job"},
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
@ -243,6 +244,10 @@ func (o *CreateJobOptions) createJob() *batchv1.Job {
}, },
}, },
} }
if o.EnforceNamespace {
job.Namespace = o.Namespace
}
return job
} }
func (o *CreateJobOptions) createJobFromCronJob(cronJob *batchv1beta1.CronJob) *batchv1.Job { func (o *CreateJobOptions) createJobFromCronJob(cronJob *batchv1beta1.CronJob) *batchv1.Job {
@ -252,7 +257,7 @@ func (o *CreateJobOptions) createJobFromCronJob(cronJob *batchv1beta1.CronJob) *
annotations[k] = v annotations[k] = v
} }
return &batchv1.Job{ job := &batchv1.Job{
// this is ok because we know exactly how we want to be serialized // this is ok because we know exactly how we want to be serialized
TypeMeta: metav1.TypeMeta{APIVersion: batchv1.SchemeGroupVersion.String(), Kind: "Job"}, TypeMeta: metav1.TypeMeta{APIVersion: batchv1.SchemeGroupVersion.String(), Kind: "Job"},
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
@ -270,4 +275,8 @@ func (o *CreateJobOptions) createJobFromCronJob(cronJob *batchv1beta1.CronJob) *
}, },
Spec: cronJob.Spec.JobTemplate.Spec, Spec: cronJob.Spec.JobTemplate.Spec,
} }
if o.EnforceNamespace {
job.Namespace = o.Namespace
}
return job
} }

View File

@ -127,14 +127,15 @@ type CreateRoleOptions struct {
Resources []ResourceOptions Resources []ResourceOptions
ResourceNames []string ResourceNames []string
DryRunStrategy cmdutil.DryRunStrategy DryRunStrategy cmdutil.DryRunStrategy
DryRunVerifier *resource.DryRunVerifier DryRunVerifier *resource.DryRunVerifier
OutputFormat string OutputFormat string
Namespace string Namespace string
Client clientgorbacv1.RbacV1Interface EnforceNamespace bool
Mapper meta.RESTMapper Client clientgorbacv1.RbacV1Interface
PrintObj func(obj runtime.Object) error Mapper meta.RESTMapper
FieldManager string PrintObj func(obj runtime.Object) error
FieldManager string
genericclioptions.IOStreams genericclioptions.IOStreams
} }
@ -263,7 +264,7 @@ func (o *CreateRoleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args
return printer.PrintObj(obj, o.Out) return printer.PrintObj(obj, o.Out)
} }
o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace() o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace()
if err != nil { if err != nil {
return err return err
} }
@ -352,6 +353,9 @@ func (o *CreateRoleOptions) RunCreateRole() error {
return err return err
} }
role.Rules = rules role.Rules = rules
if o.EnforceNamespace {
role.Namespace = o.Namespace
}
// Create role. // Create role.
if o.DryRunStrategy != cmdutil.DryRunClient { if o.DryRunStrategy != cmdutil.DryRunClient {

View File

@ -33,8 +33,8 @@ import (
func TestCreateRole(t *testing.T) { func TestCreateRole(t *testing.T) {
roleName := "my-role" roleName := "my-role"
testNameSpace := "test"
tf := cmdtesting.NewTestFactory().WithNamespace("test") tf := cmdtesting.NewTestFactory().WithNamespace(testNameSpace)
defer tf.Cleanup() defer tf.Cleanup()
tf.Client = &fake.RESTClient{} tf.Client = &fake.RESTClient{}
@ -52,7 +52,8 @@ func TestCreateRole(t *testing.T) {
expectedRole: &rbac.Role{ expectedRole: &rbac.Role{
TypeMeta: v1.TypeMeta{APIVersion: "rbac.authorization.k8s.io/v1", Kind: "Role"}, TypeMeta: v1.TypeMeta{APIVersion: "rbac.authorization.k8s.io/v1", Kind: "Role"},
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Name: roleName, Name: roleName,
Namespace: testNameSpace,
}, },
Rules: []rbac.PolicyRule{ Rules: []rbac.PolicyRule{
{ {
@ -70,7 +71,8 @@ func TestCreateRole(t *testing.T) {
expectedRole: &rbac.Role{ expectedRole: &rbac.Role{
TypeMeta: v1.TypeMeta{APIVersion: "rbac.authorization.k8s.io/v1", Kind: "Role"}, TypeMeta: v1.TypeMeta{APIVersion: "rbac.authorization.k8s.io/v1", Kind: "Role"},
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Name: roleName, Name: roleName,
Namespace: testNameSpace,
}, },
Rules: []rbac.PolicyRule{ Rules: []rbac.PolicyRule{
{ {
@ -88,7 +90,8 @@ func TestCreateRole(t *testing.T) {
expectedRole: &rbac.Role{ expectedRole: &rbac.Role{
TypeMeta: v1.TypeMeta{APIVersion: "rbac.authorization.k8s.io/v1", Kind: "Role"}, TypeMeta: v1.TypeMeta{APIVersion: "rbac.authorization.k8s.io/v1", Kind: "Role"},
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Name: roleName, Name: roleName,
Namespace: testNameSpace,
}, },
Rules: []rbac.PolicyRule{ Rules: []rbac.PolicyRule{
{ {
@ -106,7 +109,8 @@ func TestCreateRole(t *testing.T) {
expectedRole: &rbac.Role{ expectedRole: &rbac.Role{
TypeMeta: v1.TypeMeta{APIVersion: "rbac.authorization.k8s.io/v1", Kind: "Role"}, TypeMeta: v1.TypeMeta{APIVersion: "rbac.authorization.k8s.io/v1", Kind: "Role"},
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Name: roleName, Name: roleName,
Namespace: testNameSpace,
}, },
Rules: []rbac.PolicyRule{ Rules: []rbac.PolicyRule{
{ {

View File

@ -79,7 +79,7 @@ func TestSetEnvLocal(t *testing.T) {
} }
func TestSetEnvLocalNamespace(t *testing.T) { func TestSetEnvLocalNamespace(t *testing.T) {
tf := cmdtesting.NewTestFactory().WithNamespace("test") tf := cmdtesting.NewTestFactory()
defer tf.Cleanup() defer tf.Cleanup()
tf.Client = &fake.RESTClient{ tf.Client = &fake.RESTClient{