mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 15:05:27 +00:00
Add inline patching to kubectl update.
This commit is contained in:
parent
e8489264cf
commit
ae88521739
@ -236,6 +236,9 @@ Examples:
|
||||
|
||||
$ cat pod.json | kubectl update -f -
|
||||
<update a pod based on the json passed into stdin>
|
||||
|
||||
$ kubectl update pods my-pod --patch='{ "labels": { "foo": "bar" } }'
|
||||
<update a pod by downloading it, applying the patch, then updating>
|
||||
|
||||
Usage:
|
||||
```
|
||||
@ -261,6 +264,7 @@ Usage:
|
||||
--match-server-version=false: Require server version to match client version
|
||||
-n, --namespace="": If present, the namespace scope for this CLI request.
|
||||
--ns-path="/home/username/.kubernetes_ns": Path to the namespace info file that holds the namespace context to use for CLI requests.
|
||||
--patch="": A JSON document to override the existing resource. The resource is downloaded, then patched with the JSON, the re-updated
|
||||
-s, --server="": The address of the Kubernetes API server
|
||||
--stderrthreshold=2: logs at or above this threshold go to stderr
|
||||
--token="": Bearer token for authentication to the API server.
|
||||
|
@ -37,27 +37,68 @@ Examples:
|
||||
<update a pod using the data in pod.json>
|
||||
|
||||
$ cat pod.json | kubectl update -f -
|
||||
<update a pod based on the json passed into stdin>`,
|
||||
<update a pod based on the json passed into stdin>
|
||||
|
||||
$ kubectl update pods my-pod --patch='{ "labels": { "foo": "bar" } }'
|
||||
<update a pod by downloading it, applying the patch, then updating>`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
filename := GetFlagString(cmd, "filename")
|
||||
if len(filename) == 0 {
|
||||
usageError(cmd, "Must specify filename to update")
|
||||
patch := GetFlagString(cmd, "patch")
|
||||
if len(filename) == 0 && len(patch) == 0 {
|
||||
usageError(cmd, "Must specify --filename or --patch to update")
|
||||
}
|
||||
if len(filename) != 0 && len(patch) != 0 {
|
||||
usageError(cmd, "Can not specify both --filename and --patch")
|
||||
}
|
||||
var name string
|
||||
if len(filename) > 0 {
|
||||
name = updateWithFile(cmd, f, filename)
|
||||
} else {
|
||||
name = updateWithPatch(cmd, args, f, patch)
|
||||
}
|
||||
schema, err := f.Validator(cmd)
|
||||
checkErr(err)
|
||||
mapper, typer := f.Object(cmd)
|
||||
mapping, namespace, name, data := ResourceFromFile(cmd, filename, typer, mapper, schema)
|
||||
client, err := f.RESTClient(cmd, mapping)
|
||||
checkErr(err)
|
||||
|
||||
err = CompareNamespaceFromFile(cmd, namespace)
|
||||
checkErr(err)
|
||||
|
||||
err = resource.NewHelper(client, mapping).Update(namespace, name, true, data)
|
||||
checkErr(err)
|
||||
fmt.Fprintf(out, "%s\n", name)
|
||||
},
|
||||
}
|
||||
cmd.Flags().StringP("filename", "f", "", "Filename or URL to file to use to update the resource")
|
||||
cmd.Flags().String("patch", "", "A JSON document to override the existing resource. The resource is downloaded, then patched with the JSON, the re-updated")
|
||||
return cmd
|
||||
}
|
||||
|
||||
func updateWithPatch(cmd *cobra.Command, args []string, f *Factory, patch string) string {
|
||||
mapper, _ := f.Object(cmd)
|
||||
mapping, namespace, name := ResourceFromArgs(cmd, args, mapper)
|
||||
client, err := f.RESTClient(cmd, mapping)
|
||||
checkErr(err)
|
||||
|
||||
helper := resource.NewHelper(client, mapping)
|
||||
obj, err := helper.Get(namespace, name)
|
||||
checkErr(err)
|
||||
|
||||
Merge(obj, patch, mapping.Kind)
|
||||
|
||||
data, err := helper.Codec.Encode(obj)
|
||||
checkErr(err)
|
||||
|
||||
err = helper.Update(namespace, name, true, data)
|
||||
checkErr(err)
|
||||
return name
|
||||
}
|
||||
|
||||
func updateWithFile(cmd *cobra.Command, f *Factory, filename string) string {
|
||||
schema, err := f.Validator(cmd)
|
||||
checkErr(err)
|
||||
mapper, typer := f.Object(cmd)
|
||||
|
||||
mapping, namespace, name, data := ResourceFromFile(cmd, filename, typer, mapper, schema)
|
||||
|
||||
client, err := f.RESTClient(cmd, mapping)
|
||||
checkErr(err)
|
||||
|
||||
err = CompareNamespaceFromFile(cmd, namespace)
|
||||
checkErr(err)
|
||||
|
||||
err = resource.NewHelper(client, mapping).Update(namespace, name, true, data)
|
||||
checkErr(err)
|
||||
|
||||
return name
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user