@@ -42,6 +42,7 @@ type Kubectl interface {
42
42
ApplyResource (ctx context.Context , config * rest.Config , obj * unstructured.Unstructured , namespace string , dryRunStrategy cmdutil.DryRunStrategy , force , validate bool ) (string , error )
43
43
ReplaceResource (ctx context.Context , config * rest.Config , obj * unstructured.Unstructured , namespace string , dryRunStrategy cmdutil.DryRunStrategy , force bool ) (string , error )
44
44
CreateResource (ctx context.Context , config * rest.Config , obj * unstructured.Unstructured , namespace string , dryRunStrategy cmdutil.DryRunStrategy ) (* unstructured.Unstructured , error )
45
+ UpdateResource (ctx context.Context , config * rest.Config , obj * unstructured.Unstructured , namespace string , dryRunStrategy cmdutil.DryRunStrategy ) (* unstructured.Unstructured , error )
45
46
ConvertToVersion (obj * unstructured.Unstructured , group , version string ) (* unstructured.Unstructured , error )
46
47
DeleteResource (ctx context.Context , config * rest.Config , gvk schema.GroupVersionKind , name string , namespace string , deleteOptions metav1.DeleteOptions ) error
47
48
GetResource (ctx context.Context , config * rest.Config , gvk schema.GroupVersionKind , name string , namespace string ) (* unstructured.Unstructured , error )
@@ -368,6 +369,35 @@ func (k *KubectlCmd) CreateResource(ctx context.Context, config *rest.Config, ob
368
369
return resourceIf .Create (ctx , obj , createOptions )
369
370
}
370
371
372
+ func (k * KubectlCmd ) UpdateResource (ctx context.Context , config * rest.Config , obj * unstructured.Unstructured , namespace string , dryRunStrategy cmdutil.DryRunStrategy ) (* unstructured.Unstructured , error ) {
373
+ gvk := obj .GroupVersionKind ()
374
+ span := k .Tracer .StartSpan ("UpdateResource" )
375
+ span .SetBaggageItem ("kind" , gvk .Kind )
376
+ span .SetBaggageItem ("name" , obj .GetName ())
377
+ defer span .Finish ()
378
+ dynamicIf , err := dynamic .NewForConfig (config )
379
+ if err != nil {
380
+ return nil , err
381
+ }
382
+ disco , err := discovery .NewDiscoveryClientForConfig (config )
383
+ if err != nil {
384
+ return nil , err
385
+ }
386
+ apiResource , err := ServerResourceForGroupVersionKind (disco , gvk )
387
+ if err != nil {
388
+ return nil , err
389
+ }
390
+ resource := gvk .GroupVersion ().WithResource (apiResource .Name )
391
+ resourceIf := ToResourceInterface (dynamicIf , apiResource , resource , namespace )
392
+
393
+ updateOptions := metav1.UpdateOptions {}
394
+ switch dryRunStrategy {
395
+ case cmdutil .DryRunClient , cmdutil .DryRunServer :
396
+ updateOptions .DryRun = []string {metav1 .DryRunAll }
397
+ }
398
+ return resourceIf .Update (ctx , obj , updateOptions )
399
+ }
400
+
371
401
// ApplyResource performs an apply of a unstructured resource
372
402
func (k * KubectlCmd ) ApplyResource (ctx context.Context , config * rest.Config , obj * unstructured.Unstructured , namespace string , dryRunStrategy cmdutil.DryRunStrategy , force , validate bool ) (string , error ) {
373
403
span := k .Tracer .StartSpan ("ApplyResource" )
0 commit comments