Skip to content

Commit 2b9ea85

Browse files
committed
fix(secret): allow update without new data
1 parent 4b0f724 commit 2b9ea85

File tree

6 files changed

+35
-34
lines changed

6 files changed

+35
-34
lines changed

cmd/okms/secretsV2/config.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ func secretGetConfigCommand() *cobra.Command {
3838
output.JsonPrint(resp)
3939
} else {
4040
table := tablewriter.NewWriter(os.Stdout)
41-
table.AppendBulk([][]string{
41+
exit.OnErr(table.Bulk([][]string{
4242
{"Cas required", fmt.Sprintf("%t", utils.DerefOrDefault(resp.CasRequired))},
4343
{"Deactivate version after", utils.DerefOrDefault(resp.DeactivateVersionAfter)},
4444
{"Max. number of versions", fmt.Sprintf("%d", utils.DerefOrDefault(resp.MaxVersions))},
45-
})
46-
table.Render()
45+
}))
46+
exit.OnErr(table.Render())
4747
}
4848
},
4949
}

cmd/okms/secretsV2/render.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
"github.com/olekukonko/tablewriter"
88
"github.com/ovh/okms-cli/common/utils"
9+
"github.com/ovh/okms-cli/common/utils/exit"
910
"github.com/ovh/okms-sdk-go/types"
1011
)
1112

@@ -24,31 +25,31 @@ func rowFromMetadata(meta types.SecretV2Metadata) []string {
2425
func renderList(secrets *types.ListSecretV2Response) {
2526
tableMetadata := tablewriter.NewWriter(os.Stdout)
2627
fmt.Printf("Metadata (Total count : %d):\n", utils.DerefOrDefault(secrets.TotalCount))
27-
tableMetadata.SetHeader([]string{"Path", "Cas Required", "Created at", "Current Version", "Deactivate Version After", "Max Versions", "Oldest Version", "Updated at", "Custom metadata"})
28+
tableMetadata.Header([]string{"Path", "Cas Required", "Created at", "Current Version", "Deactivate Version After", "Max Versions", "Oldest Version", "Updated at", "Custom metadata"})
2829
for _, secret := range *secrets.Results {
29-
tableMetadata.Append(append([]string{*secret.Path}, rowFromMetadata(*secret.Metadata)...))
30+
exit.OnErr(tableMetadata.Append(append([]string{*secret.Path}, rowFromMetadata(*secret.Metadata)...)))
3031
}
31-
tableMetadata.Render()
32+
exit.OnErr(tableMetadata.Render())
3233
}
3334

3435
func renderMetadata(path string, meta types.SecretV2Metadata) {
3536
fmt.Printf("Metadata: %v\n", path)
3637
table := tablewriter.NewWriter(os.Stdout)
3738

38-
table.SetHeader([]string{"Cas Required", "Created at", "Current Version", "Deactivate Version After", "Max Versions", "Oldest Version", "Updated at", "Custom metadata"})
39-
table.Append(rowFromMetadata(meta))
39+
table.Header([]string{"Cas Required", "Created at", "Current Version", "Deactivate Version After", "Max Versions", "Oldest Version", "Updated at", "Custom metadata"})
40+
exit.OnErr(table.Append(rowFromMetadata(meta)))
4041

41-
table.Render()
42+
exit.OnErr(table.Render())
4243
}
4344

4445
func renderListMetadataVersion(secrets []types.SecretV2Version) {
4546
fmt.Println("Version's specific metadata ")
4647
table := tablewriter.NewWriter(os.Stdout)
47-
table.SetHeader([]string{"Id", "Created at", "Deactivated at", "State"})
48+
table.Header([]string{"Id", "Created at", "Deactivated at", "State"})
4849
for _, secret := range secrets {
49-
table.Append([]string{fmt.Sprintf("%b", secret.Id), secret.CreatedAt, utils.DerefOrDefault(secret.DeactivatedAt), string(secret.State)})
50+
exit.OnErr(table.Append([]string{fmt.Sprintf("%d", secret.Id), secret.CreatedAt, utils.DerefOrDefault(secret.DeactivatedAt), string(secret.State)}))
5051
}
51-
table.Render()
52+
exit.OnErr(table.Render())
5253
}
5354

5455
func renderMetadataVersion(secret types.SecretV2Version) {
@@ -59,9 +60,9 @@ func renderMetadataVersion(secret types.SecretV2Version) {
5960
func renderDataVersion(data map[string]interface{}) {
6061
fmt.Println("Data")
6162
tableData := tablewriter.NewWriter(os.Stdout)
62-
tableData.SetHeader([]string{"Key", "Value"})
63+
tableData.Header([]string{"Key", "Value"})
6364
for k, v := range data {
64-
tableData.Append([]string{k, fmt.Sprintf("%v", v)})
65+
exit.OnErr(tableData.Append([]string{k, fmt.Sprintf("%v", v)}))
6566
}
66-
tableData.Render()
67+
exit.OnErr(tableData.Render())
6768
}

cmd/okms/secretsV2/secrets.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func secretPostCmd() *cobra.Command {
5353
customMetadata map[string]string
5454
)
5555
cmd := &cobra.Command{
56-
Use: "create [FLAGS] PATH [DATA]",
56+
Use: "create PATH [DATA]",
5757
Short: "Create a secret",
5858
Args: cobra.MinimumNArgs(2),
5959
Run: func(cmd *cobra.Command, args []string) {
@@ -84,7 +84,7 @@ func secretPostCmd() *cobra.Command {
8484
body.Version.Data = &data
8585

8686
// TODO Is CAS really required for PostSecretV2 since it create the secret
87-
resp := exit.OnErr2(common.Client().PostSecretV2(cmd.Context(), utils.PtrTo(uint32(0)), body))
87+
resp := exit.OnErr2(common.Client().PostSecretV2(cmd.Context(), body))
8888
if cmd.Flag("output").Value.String() == string(flagsmgmt.JSON_OUTPUT_FORMAT) {
8989
output.JsonPrint(resp)
9090
} else {
@@ -131,7 +131,7 @@ func secretGetCmd() *cobra.Command {
131131
}
132132

133133
cmd.Flags().Uint32Var(&version, "version", 0, "Secret version. If not set, the latest version will be returned.")
134-
cmd.Flags().BoolVar(&includeData, "include-data", true, "Include the secret data. If not set they will be returned.")
134+
cmd.Flags().BoolVar(&includeData, "include-data", false, "Include the secret data. If not set they will not be returned.")
135135
return cmd
136136
}
137137

@@ -144,16 +144,15 @@ func secretPutCmd() *cobra.Command {
144144
customMetadata map[string]string
145145
)
146146
cmd := &cobra.Command{
147-
Use: "update [FLAGS] PATH [DATA]",
147+
Use: "update PATH [DATA]",
148148
Short: "Update a secret",
149-
Args: cobra.MinimumNArgs(2),
149+
Args: cobra.MinimumNArgs(1),
150150
Run: func(cmd *cobra.Command, args []string) {
151151
in := io.Reader(os.Stdin)
152152
body := types.PutSecretV2Request{
153153
Metadata: &types.SecretV2MetadataShort{
154154
CustomMetadata: utils.PtrTo(types.SecretV2CustomMetadata(customMetadata)),
155155
},
156-
Version: &types.SecretV2VersionShort{},
157156
}
158157
var c *uint32
159158
if cmd.Flag("cas").Changed {
@@ -175,7 +174,9 @@ func secretPutCmd() *cobra.Command {
175174
fmt.Fprintln(os.Stderr, "Failed to parse K=V data:", err)
176175
os.Exit(1)
177176
}
178-
body.Version.Data = &data
177+
if data != nil {
178+
body.Version = &types.SecretV2VersionShort{Data: &data}
179+
}
179180

180181
resp := exit.OnErr2(common.Client().PutSecretV2(cmd.Context(), args[0], c, body))
181182
if cmd.Flag("output").Value.String() == string(flagsmgmt.JSON_OUTPUT_FORMAT) {

cmd/okms/secretsV2/version.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func secretVersionGetCmd() *cobra.Command {
5959
},
6060
}
6161
cmd.Flags().Uint32Var(&version, "version", 0, "Secret version.")
62-
cmd.Flags().BoolVar(&includeData, "include-data", true, "Include the secret data. If not set they will be returned.")
62+
cmd.Flags().BoolVar(&includeData, "include-data", false, "Include the secret data. If not set they will not be returned.")
6363
return cmd
6464
}
6565

@@ -182,7 +182,7 @@ func secretVersionPostCmd() *cobra.Command {
182182
cas uint32
183183
)
184184
cmd := &cobra.Command{
185-
Use: "create [FLAGS] PATH [DATA]",
185+
Use: "create PATH [DATA]",
186186
Short: "Create a secret version",
187187
Args: cobra.MinimumNArgs(2),
188188
Run: func(cmd *cobra.Command, args []string) {

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ require (
2121
)
2222

2323
require (
24-
2524
atomicgo.dev/cursor v0.2.0 // indirect
2625
atomicgo.dev/keyboard v0.2.9 // indirect
2726
atomicgo.dev/schedule v0.1.0 // indirect

tests/secrets.yaml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ testcases:
4040
- name: Get a Secret
4141
info: response time is {{.result.timeseconds}} and response code is {{.result.code}} result is {{.result}}
4242
type: okms-cmd
43-
args: secret get {{.random-string.content}}
43+
args: secret get {{.random-string.content}} --include-data=true
4444
assertions:
4545
- result.code ShouldEqual 0
4646
- result.systemoutjson.metadata.cas_required ShouldBeTrue
@@ -93,7 +93,7 @@ testcases:
9393
- name: Get a Secret
9494
info: response time is {{.result.timeseconds}} and response code is {{.result.code}} result is {{.result}}
9595
type: okms-cmd
96-
args: secret get {{.random-string.content}}
96+
args: secret get {{.random-string.content}} --include-data=true
9797
assertions:
9898
- result.code ShouldEqual 0
9999
- result.systemoutjson.metadata.cas_required ShouldEqual "true"
@@ -126,7 +126,7 @@ testcases:
126126
- name: Get a Secret
127127
info: response time is {{.result.timeseconds}} and response code is {{.result.code}} result is {{.result}}
128128
type: okms-cmd
129-
args: secret get {{.random-string.content}}
129+
args: secret get {{.random-string.content}} --include-data=true
130130
assertions:
131131
- result.code ShouldEqual 0
132132
- result.systemoutjson.metadata.cas_required ShouldEqual "true"
@@ -145,7 +145,7 @@ testcases:
145145
- name: Get a Secret
146146
info: response time is {{.result.timeseconds}} and response code is {{.result.code}} result is {{.result}}
147147
type: okms-cmd
148-
args: secret version get {{.random-string.content}} --version=2
148+
args: secret version get {{.random-string.content}} --version=2 --include-data=true
149149
assertions:
150150
- result.code ShouldEqual 0
151151
- result.systemoutjson.created_at ShouldNotEqual ""
@@ -160,7 +160,7 @@ testcases:
160160
- name: Get a Secret
161161
info: response time is {{.result.timeseconds}} and response code is {{.result.code}} result is {{.result}}
162162
type: okms-cmd
163-
args: secret get {{.random-string.content}} --version=2
163+
args: secret get {{.random-string.content}} --version=2 --include-data=true
164164
assertions:
165165
- result.code ShouldEqual 0
166166
- result.systemoutjson.metadata.cas_required ShouldEqual "true"
@@ -204,7 +204,7 @@ testcases:
204204
- name: Get a Secret
205205
info: response time is {{.result.timeseconds}} and response code is {{.result.code}} result is {{.result}}
206206
type: okms-cmd
207-
args: secret get {{.random-string.content}}
207+
args: secret get {{.random-string.content}} --include-data=true
208208
assertions:
209209
- result.code ShouldEqual 0
210210
- result.systemoutjson.metadata.cas_required ShouldEqual "true"
@@ -241,7 +241,7 @@ testcases:
241241
- name: Get a Secret
242242
info: response time is {{.result.timeseconds}} and response code is {{.result.code}} result is {{.result}}
243243
type: okms-cmd
244-
args: secret get {{.random-string.content}}
244+
args: secret get {{.random-string.content}} --include-data=true
245245
assertions:
246246
- result.code ShouldEqual 0
247247
- result.systemoutjson.metadata.cas_required ShouldEqual "true"
@@ -264,8 +264,8 @@ testcases:
264264
args: secret list
265265
assertions:
266266
- result.code ShouldEqual 0
267-
- result.systemoutjson.results ShouldHaveLength 1
268-
- result.systemoutjson.total_count ShouldEqual 1
267+
- result.systemoutjson.results ShouldHaveLength 3
268+
- result.systemoutjson.total_count ShouldEqual 3
269269

270270
- name: 017 - List Secrets Versions
271271
steps:

0 commit comments

Comments
 (0)