Fix dry run client ignore namespace

This commit is contained in:
zhouya0 2020-04-26 15:13:20 +08:00
parent 71277de4d6
commit 2f117260fb
6 changed files with 56 additions and 34 deletions

View File

@ -96,7 +96,7 @@ type namespacedClientConfig struct {
} }
func (c *namespacedClientConfig) Namespace() (string, bool, error) { func (c *namespacedClientConfig) Namespace() (string, bool, error) {
return c.namespace, false, nil return c.namespace, len(c.namespace) > 0, nil
} }
func (c *namespacedClientConfig) RawConfig() (clientcmdapi.Config, error) { func (c *namespacedClientConfig) RawConfig() (clientcmdapi.Config, error) {

View File

@ -59,6 +59,7 @@ type CreateCronJobOptions struct {
Restart string Restart string
Namespace string Namespace string
EnforceNamespace bool
Client batchv1beta1client.BatchV1beta1Interface Client batchv1beta1client.BatchV1beta1Interface
DryRunStrategy cmdutil.DryRunStrategy DryRunStrategy cmdutil.DryRunStrategy
DryRunVerifier *resource.DryRunVerifier DryRunVerifier *resource.DryRunVerifier
@ -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

@ -63,6 +63,7 @@ type CreateJobOptions struct {
Command []string Command []string
Namespace string Namespace string
EnforceNamespace bool
Client batchv1client.BatchV1Interface Client batchv1client.BatchV1Interface
DryRunStrategy cmdutil.DryRunStrategy DryRunStrategy cmdutil.DryRunStrategy
DryRunVerifier *resource.DryRunVerifier DryRunVerifier *resource.DryRunVerifier
@ -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

@ -131,6 +131,7 @@ type CreateRoleOptions struct {
DryRunVerifier *resource.DryRunVerifier DryRunVerifier *resource.DryRunVerifier
OutputFormat string OutputFormat string
Namespace string Namespace string
EnforceNamespace bool
Client clientgorbacv1.RbacV1Interface Client clientgorbacv1.RbacV1Interface
Mapper meta.RESTMapper Mapper meta.RESTMapper
PrintObj func(obj runtime.Object) error PrintObj func(obj runtime.Object) error
@ -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{}
@ -53,6 +53,7 @@ func TestCreateRole(t *testing.T) {
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{
{ {
@ -71,6 +72,7 @@ func TestCreateRole(t *testing.T) {
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{
{ {
@ -89,6 +91,7 @@ func TestCreateRole(t *testing.T) {
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{
{ {
@ -107,6 +110,7 @@ func TestCreateRole(t *testing.T) {
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{