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

@ -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{