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) {
return c.namespace, false, nil
return c.namespace, len(c.namespace) > 0, nil
}
func (c *namespacedClientConfig) RawConfig() (clientcmdapi.Config, error) {

View File

@ -58,12 +58,13 @@ type CreateCronJobOptions struct {
Command []string
Restart string
Namespace string
Client batchv1beta1client.BatchV1beta1Interface
DryRunStrategy cmdutil.DryRunStrategy
DryRunVerifier *resource.DryRunVerifier
Builder *resource.Builder
FieldManager string
Namespace string
EnforceNamespace bool
Client batchv1beta1client.BatchV1beta1Interface
DryRunStrategy cmdutil.DryRunStrategy
DryRunVerifier *resource.DryRunVerifier
Builder *resource.Builder
FieldManager string
genericclioptions.IOStreams
}
@ -126,7 +127,7 @@ func (o *CreateCronJobOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, a
return err
}
o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace()
o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace()
if err != nil {
return err
}
@ -193,7 +194,7 @@ func (o *CreateCronJobOptions) Run() error {
}
func (o *CreateCronJobOptions) createCronJob() *batchv1beta1.CronJob {
return &batchv1beta1.CronJob{
cronjob := &batchv1beta1.CronJob{
TypeMeta: metav1.TypeMeta{APIVersion: batchv1beta1.SchemeGroupVersion.String(), Kind: "CronJob"},
ObjectMeta: metav1.ObjectMeta{
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
Command []string
Namespace string
Client batchv1client.BatchV1Interface
DryRunStrategy cmdutil.DryRunStrategy
DryRunVerifier *resource.DryRunVerifier
Builder *resource.Builder
FieldManager string
Namespace string
EnforceNamespace bool
Client batchv1client.BatchV1Interface
DryRunStrategy cmdutil.DryRunStrategy
DryRunVerifier *resource.DryRunVerifier
Builder *resource.Builder
FieldManager string
genericclioptions.IOStreams
}
@ -126,7 +127,7 @@ func (o *CreateJobOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args
return err
}
o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace()
o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace()
if err != nil {
return err
}
@ -222,7 +223,7 @@ func (o *CreateJobOptions) Run() error {
}
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
TypeMeta: metav1.TypeMeta{APIVersion: batchv1.SchemeGroupVersion.String(), Kind: "Job"},
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 {
@ -252,7 +257,7 @@ func (o *CreateJobOptions) createJobFromCronJob(cronJob *batchv1beta1.CronJob) *
annotations[k] = v
}
return &batchv1.Job{
job := &batchv1.Job{
// this is ok because we know exactly how we want to be serialized
TypeMeta: metav1.TypeMeta{APIVersion: batchv1.SchemeGroupVersion.String(), Kind: "Job"},
ObjectMeta: metav1.ObjectMeta{
@ -270,4 +275,8 @@ func (o *CreateJobOptions) createJobFromCronJob(cronJob *batchv1beta1.CronJob) *
},
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
ResourceNames []string
DryRunStrategy cmdutil.DryRunStrategy
DryRunVerifier *resource.DryRunVerifier
OutputFormat string
Namespace string
Client clientgorbacv1.RbacV1Interface
Mapper meta.RESTMapper
PrintObj func(obj runtime.Object) error
FieldManager string
DryRunStrategy cmdutil.DryRunStrategy
DryRunVerifier *resource.DryRunVerifier
OutputFormat string
Namespace string
EnforceNamespace bool
Client clientgorbacv1.RbacV1Interface
Mapper meta.RESTMapper
PrintObj func(obj runtime.Object) error
FieldManager string
genericclioptions.IOStreams
}
@ -263,7 +264,7 @@ func (o *CreateRoleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args
return printer.PrintObj(obj, o.Out)
}
o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace()
o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace()
if err != nil {
return err
}
@ -352,6 +353,9 @@ func (o *CreateRoleOptions) RunCreateRole() error {
return err
}
role.Rules = rules
if o.EnforceNamespace {
role.Namespace = o.Namespace
}
// Create role.
if o.DryRunStrategy != cmdutil.DryRunClient {

View File

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

View File

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