mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-30 18:17:55 +00:00 
			
		
		
		
	Remove delete-version-after from kv put and undelete subcommands
Removes the optional parameter "delete-version-after" from the following CLI subcommands: - kv put - kv undelete - kv rollback
This commit is contained in:
		| @@ -5,7 +5,6 @@ import ( | ||||
| 	"io" | ||||
| 	"os" | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/mitchellh/cli" | ||||
| 	"github.com/posener/complete" | ||||
| @@ -17,9 +16,8 @@ var _ cli.CommandAutocomplete = (*KVPutCommand)(nil) | ||||
| type KVPutCommand struct { | ||||
| 	*BaseCommand | ||||
|  | ||||
| 	flagCAS                int | ||||
| 	flagDeleteVersionAfter time.Duration | ||||
| 	testStdin              io.Reader // for tests | ||||
| 	flagCAS   int | ||||
| 	testStdin io.Reader // for tests | ||||
| } | ||||
|  | ||||
| func (c *KVPutCommand) Synopsis() string { | ||||
| @@ -73,19 +71,6 @@ func (c *KVPutCommand) Flags() *FlagSets { | ||||
| 		parameter.`, | ||||
| 	}) | ||||
|  | ||||
| 	f.DurationVar(&DurationVar{ | ||||
| 		Name:       "delete-version-after", | ||||
| 		Target:     &c.flagDeleteVersionAfter, | ||||
| 		Default:    0, | ||||
| 		EnvVar:     "", | ||||
| 		Completion: complete.PredictAnything, | ||||
| 		Usage: `Specifies the length of time before this version is | ||||
| 		deleted. If not set, the metadata's delete-version-after is used. | ||||
| 		Cannot be greater than the metadata's delete-version-after. The | ||||
| 		delete-version-after is specified as a numeric string with a suffix | ||||
| 		like "30s" or "3h25m19s".`, | ||||
| 	}) | ||||
|  | ||||
| 	return set | ||||
| } | ||||
|  | ||||
| @@ -152,10 +137,6 @@ func (c *KVPutCommand) Run(args []string) int { | ||||
| 		if c.flagCAS > -1 { | ||||
| 			data["options"].(map[string]interface{})["cas"] = c.flagCAS | ||||
| 		} | ||||
|  | ||||
| 		if c.flagDeleteVersionAfter > 0 { | ||||
| 			data["options"].(map[string]interface{})["delete_version_after"] = c.flagDeleteVersionAfter.String() | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	secret, err := client.Logical().Write(path, data) | ||||
|   | ||||
| @@ -4,7 +4,6 @@ import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/mitchellh/cli" | ||||
| 	"github.com/posener/complete" | ||||
| @@ -16,8 +15,7 @@ var _ cli.CommandAutocomplete = (*KVRollbackCommand)(nil) | ||||
| type KVRollbackCommand struct { | ||||
| 	*BaseCommand | ||||
|  | ||||
| 	flagVersion            int | ||||
| 	flagDeleteVersionAfter time.Duration | ||||
| 	flagVersion int | ||||
| } | ||||
|  | ||||
| func (c *KVRollbackCommand) Synopsis() string { | ||||
| @@ -55,19 +53,6 @@ func (c *KVRollbackCommand) Flags() *FlagSets { | ||||
| 		Usage:  `Specifies the version number that should be made current again.`, | ||||
| 	}) | ||||
|  | ||||
| 	f.DurationVar(&DurationVar{ | ||||
| 		Name:       "delete-version-after", | ||||
| 		Target:     &c.flagDeleteVersionAfter, | ||||
| 		Default:    0, | ||||
| 		EnvVar:     "", | ||||
| 		Completion: complete.PredictAnything, | ||||
| 		Usage: `Specifies the length of time before this version is | ||||
| 		deleted. If not set, the metadata's delete-version-after is used. | ||||
| 		Cannot be greater than the metadata's delete-version-after. The | ||||
| 		delete-version-after is specified as a numeric string with a suffix | ||||
| 		like "30s" or "3h25m19s".`, | ||||
| 	}) | ||||
|  | ||||
| 	return set | ||||
| } | ||||
|  | ||||
| @@ -232,18 +217,12 @@ func (c *KVRollbackCommand) Run(args []string) int { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	data = map[string]interface{}{ | ||||
| 	secret, err := client.Logical().Write(path, map[string]interface{}{ | ||||
| 		"data": data, | ||||
| 		"options": map[string]interface{}{ | ||||
| 			"cas": casVersion, | ||||
| 		}, | ||||
| 	} | ||||
|  | ||||
| 	if c.flagDeleteVersionAfter > 0 { | ||||
| 		data["options"].(map[string]interface{})["delete_version_after"] = c.flagDeleteVersionAfter.String() | ||||
| 	} | ||||
|  | ||||
| 	secret, err := client.Logical().Write(path, data) | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		c.UI.Error(fmt.Sprintf("Error writing data to %s: %s", path, err)) | ||||
| 		return 2 | ||||
|   | ||||
| @@ -120,7 +120,7 @@ func TestKVPutCommand(t *testing.T) { | ||||
| 		cmd.client = client | ||||
|  | ||||
| 		code := cmd.Run([]string{ | ||||
| 			"-cas", "0", "-delete-version-after", "1h", "kv/write/cas", "bar=baz", | ||||
| 			"-cas", "0", "kv/write/cas", "bar=baz", | ||||
| 		}) | ||||
| 		if code != 0 { | ||||
| 			t.Fatalf("expected 0 to be %d", code) | ||||
| @@ -133,7 +133,7 @@ func TestKVPutCommand(t *testing.T) { | ||||
| 		ui, cmd = testKVPutCommand(t) | ||||
| 		cmd.client = client | ||||
| 		code = cmd.Run([]string{ | ||||
| 			"-cas", "1", "-delete-version-after", "1h", "kv/write/cas", "bar=baz", | ||||
| 			"-cas", "1", "kv/write/cas", "bar=baz", | ||||
| 		}) | ||||
| 		if code != 0 { | ||||
| 			t.Fatalf("expected 0 to be %d", code) | ||||
|   | ||||
| @@ -3,7 +3,6 @@ package command | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/mitchellh/cli" | ||||
| 	"github.com/posener/complete" | ||||
| @@ -15,8 +14,7 @@ var _ cli.CommandAutocomplete = (*KVUndeleteCommand)(nil) | ||||
| type KVUndeleteCommand struct { | ||||
| 	*BaseCommand | ||||
|  | ||||
| 	flagVersions           []string | ||||
| 	flagDeleteVersionAfter time.Duration | ||||
| 	flagVersions []string | ||||
| } | ||||
|  | ||||
| func (c *KVUndeleteCommand) Synopsis() string { | ||||
| @@ -53,20 +51,6 @@ func (c *KVUndeleteCommand) Flags() *FlagSets { | ||||
| 		Usage:   `Specifies the version numbers to undelete.`, | ||||
| 	}) | ||||
|  | ||||
| 	f.DurationVar(&DurationVar{ | ||||
| 		Name:       "delete-version-after", | ||||
| 		Target:     &c.flagDeleteVersionAfter, | ||||
| 		Default:    0, | ||||
| 		EnvVar:     "", | ||||
| 		Completion: complete.PredictAnything, | ||||
| 		Usage: `Specifies the length of time before these versions will be | ||||
| 		deleted. If not set, the metadata's delete-version-after is used. | ||||
| 		Cannot be greater than the metadata's delete-version-after. The | ||||
| 		delete-version-after is specified as a numeric string with a suffix | ||||
| 		like "30s" or | ||||
| 		"3h25m19s".`, | ||||
| 	}) | ||||
|  | ||||
| 	return set | ||||
| } | ||||
|  | ||||
| @@ -123,10 +107,6 @@ func (c *KVUndeleteCommand) Run(args []string) int { | ||||
| 		"versions": kvParseVersionsFlags(c.flagVersions), | ||||
| 	} | ||||
|  | ||||
| 	if c.flagDeleteVersionAfter > 0 { | ||||
| 		data["delete_version_after"] = c.flagDeleteVersionAfter.String() | ||||
| 	} | ||||
|  | ||||
| 	secret, err := client.Logical().Write(path, data) | ||||
| 	if err != nil { | ||||
| 		c.UI.Error(fmt.Sprintf("Error writing data to %s: %s", path, err)) | ||||
|   | ||||
| @@ -158,14 +158,6 @@ have an ACL policy granting the `update` capability. | ||||
|       write will only be allowed if the key’s current version matches the | ||||
|       version specified in the cas parameter. | ||||
|  | ||||
| 	- `delete_version_after` (`string:"0s"`) – Set the `delete_version_after` | ||||
| 	  value to a duration to specify the `deletion_time` for this | ||||
| 	  version. If not set, the metadata's `delete_version_after` will be used. If | ||||
| 	  the metadata's `delete_version_after` is not set, the backend's | ||||
| 	  `delete_version_after` will be used. If the value is greater than the | ||||
| 	  metadata's `delete_version_after`, the metadata's `delete_version_after` will be | ||||
| 	  used. Accepts [Go duration format string][duration-godoc]. | ||||
|  | ||||
| - `data` `(Map: <required>)` – The contents of the data map will be stored and | ||||
|   returned on read. | ||||
|  | ||||
| @@ -174,8 +166,7 @@ have an ACL policy granting the `update` capability. | ||||
| ```json | ||||
| { | ||||
|   "options": { | ||||
|       "cas": 0, | ||||
| 	  "delete_version_after": "3m" | ||||
|       "cas": 0 | ||||
|   }, | ||||
|   "data": { | ||||
| 	  "foo": "bar", | ||||
| @@ -200,7 +191,7 @@ $ curl \ | ||||
| { | ||||
|   "data": { | ||||
|     "created_time": "2018-03-22T02:36:43.986212308Z", | ||||
|     "deletion_time": "2018-03-22T02:39:43.986212308Z", | ||||
|     "deletion_time": "", | ||||
|     "destroyed": false, | ||||
|     "version": 1 | ||||
|   } | ||||
| @@ -286,20 +277,11 @@ This restores the data, allowing it to be returned on get requests. | ||||
| - `versions` `([]int: <required>)` - The versions to undelete. The versions will | ||||
|   be restored and their data will be returned on normal get requests. | ||||
|  | ||||
| - `delete_version_after` (`string:"0s"`) – Set the `delete_version_after` value | ||||
|   to a duration to specify the `deletion_time` for the versions being | ||||
|   undeleted. If not set, the metadata's `delete_version_after` will be used. If | ||||
|   the metadata's `delete_version_after` is not set, the backend's `delete_version_after` | ||||
|   will be used. If the value is greater than the metadata's | ||||
|   `delete_version_after`, the metadata's `delete_version_after` will be used. Accepts | ||||
|   [Go duration format string][duration-godoc]. | ||||
|  | ||||
| ### Sample Payload | ||||
|  | ||||
| ```json | ||||
| { | ||||
|     "versions": [1, 2], | ||||
|     "delete_version_after": "25m" | ||||
|     "versions": [1, 2] | ||||
| } | ||||
| ``` | ||||
|  | ||||
|   | ||||
| @@ -246,71 +246,6 @@ allows for writing keys with arbitrary values. | ||||
| 	my-value    s3cr3t | ||||
|     ``` | ||||
|  | ||||
| 1. Write another version which will be deleted after a specified | ||||
|    duration. The `-delete-version-after` flag can optionally be passed to specify | ||||
|    a duration of time until the version will be deleted. The previous | ||||
|    versions will still be accessible. | ||||
|  | ||||
|     ```text | ||||
|     $ vault kv put -delete-version-after=2m secret/my-secret my-value=short-lived-s3cr3t | ||||
| 	Key              Value | ||||
| 	---              ----- | ||||
| 	created_time     2019-06-19T17:23:21.834403Z | ||||
| 	deletion_time    2019-06-19T17:25:21.834403Z | ||||
| 	destroyed        false | ||||
| 	version          3 | ||||
| 	``` | ||||
|  | ||||
| 1. Reading now will return the newest version of the data and show the | ||||
|    `deletion_time`: | ||||
|  | ||||
|     ```text | ||||
| 	$ vault kv get secret/my-secret | ||||
| 	====== Metadata ====== | ||||
| 	Key              Value | ||||
| 	---              ----- | ||||
| 	created_time     2019-06-19T17:23:21.834403Z | ||||
| 	deletion_time    2019-06-19T17:25:21.834403Z | ||||
| 	destroyed        false | ||||
| 	version          3 | ||||
|  | ||||
| 	====== Data ====== | ||||
| 	Key         Value | ||||
| 	---         ----- | ||||
| 	my-value    short-lived-s3cr3t | ||||
| 	``` | ||||
|  | ||||
| 1. Reading after the `deletion_time` will only return metadata: | ||||
|  | ||||
|     ```text | ||||
| 	$ vault kv get secret/my-secret | ||||
| 	====== Metadata ====== | ||||
| 	Key              Value | ||||
| 	---              ----- | ||||
| 	created_time     2019-06-19T17:23:21.834403Z | ||||
| 	deletion_time    2019-06-19T17:25:21.834403Z | ||||
| 	destroyed        false | ||||
| 	version          3 | ||||
| 	``` | ||||
|  | ||||
| 1. Previous versions not deleted can still be accessed with the `-version` flag: | ||||
|  | ||||
|     ```text | ||||
|     $ vault kv get -version=2 secret/my-secret | ||||
| 	====== Metadata ====== | ||||
| 	Key              Value | ||||
| 	---              ----- | ||||
| 	created_time     2019-06-19T17:22:23.369372Z | ||||
| 	deletion_time    n/a | ||||
| 	destroyed        false | ||||
| 	version          2 | ||||
|  | ||||
| 	====== Data ====== | ||||
| 	Key         Value | ||||
| 	---         ----- | ||||
| 	my-value    new-s3cr3t | ||||
|     ``` | ||||
|  | ||||
| ### Deleting and Destroying Data | ||||
|  | ||||
| When deleting data the standard `vault kv delete` command will perform a | ||||
| @@ -338,7 +273,7 @@ See the commands below for more information: | ||||
| 1. Versions can be undeleted: | ||||
|  | ||||
|     ```text | ||||
|     $ vault kv undelete -versions=3 secret/my-secret | ||||
|     $ vault kv undelete -versions=2 secret/my-secret | ||||
| 	Success! Data written to: secret/undelete/my-secret | ||||
|  | ||||
|     $ vault kv get secret/my-secret | ||||
| @@ -348,7 +283,7 @@ See the commands below for more information: | ||||
| 	created_time     2019-06-19T17:23:21.834403Z | ||||
| 	deletion_time    n/a | ||||
| 	destroyed        false | ||||
| 	version          3 | ||||
| 	version          2 | ||||
|  | ||||
| 	====== Data ====== | ||||
| 	Key         Value | ||||
| @@ -359,7 +294,7 @@ See the commands below for more information: | ||||
| 1. Destroying a version permanently deletes the underlying data: | ||||
|  | ||||
|     ```text | ||||
|     $ vault kv destroy -versions=3 secret/my-secret | ||||
|     $ vault kv destroy -versions=2 secret/my-secret | ||||
| 	Success! Data written to: secret/destroy/my-secret | ||||
|     ``` | ||||
|  | ||||
| @@ -380,11 +315,11 @@ See the commands below for more information: | ||||
| 	---                     ----- | ||||
| 	cas_required            false | ||||
| 	created_time            2019-06-19T17:20:22.985303Z | ||||
| 	current_version         3 | ||||
| 	current_version         2 | ||||
| 	delete_version_after    0s | ||||
| 	max_versions            0 | ||||
| 	oldest_version          0 | ||||
| 	updated_time            2019-06-19T17:23:21.834403Z | ||||
| 	updated_time            2019-06-19T17:22:23.369372Z | ||||
|  | ||||
| 	====== Version 1 ====== | ||||
| 	Key              Value | ||||
| @@ -398,13 +333,6 @@ See the commands below for more information: | ||||
| 	---              ----- | ||||
| 	created_time     2019-06-19T17:22:23.369372Z | ||||
| 	deletion_time    n/a | ||||
| 	destroyed        false | ||||
|  | ||||
| 	====== Version 3 ====== | ||||
| 	Key              Value | ||||
| 	---              ----- | ||||
| 	created_time     2019-06-19T17:23:21.834403Z | ||||
| 	deletion_time    n/a | ||||
| 	destroyed        true | ||||
|     ``` | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Michael Gaffney
					Michael Gaffney