fix(go.d/secretsctl): handle userconfig for job IDs (#22081)
Ilya Mashchenko committed
Mar 30, 2026 at 10:34 UTC
6e7fa53a278e41d51796b5c6c13f556483f3c9d0
3 files changed
+24
-17
src/go/plugin/agent/jobmgr/dyncfg_secretstore_test.go
+1
-1
@@ -48,7 +48,7 @@ func TestDyncfgSecretStoreSeqExec(t *testing.T) {
48
assert.Equal(t, dyncfg.StatusRunning, entry.Status)
49
_, ok = mustSecretStoreService(t, mgr).GetStatus(secretstore.StoreKey(secretstore.KindVault, "vault_prod"))
50
assert.True(t, ok)
51
- assert.Contains(t, out.String(), "schema get update test remove")
51
+ assert.Contains(t, out.String(), "schema get update test userconfig remove")
52
assert.NotContains(t, out.String(), "enable")
53
assert.NotContains(t, out.String(), "disable")
54
src/go/plugin/agent/jobmgr/secretsctl/controller.go
+1
@@ -92,6 +92,7 @@ func New(opts Options) *Controller {
92
dyncfg.CommandGet,
93
dyncfg.CommandUpdate,
94
dyncfg.CommandTest,
95
+ dyncfg.CommandUserconfig,
96
},
97
})
98
return c
src/go/plugin/agent/jobmgr/secretsctl/dyncfg.go
+22
-16
@@ -106,19 +106,10 @@ func (c *Controller) dyncfgCmdAdd(fn dyncfg.Function) {
106
}
107
108
func (c *Controller) dyncfgCmdSchema(fn dyncfg.Function) {
109
- kind, ok := c.dyncfgExtractSecretStoreKindFromTemplateID(fn.ID())
110
- if !ok {
111
- storeKey, ok := c.dyncfgExtractSecretStoreKey(fn.ID())
112
- if !ok {
113
- c.api.SendCodef(fn, 400, "Invalid ID format for secretstore schema: %s.", fn.ID())
114
- return
115
- }
116
- entry, ok := c.lookup(storeKey)
117
- if !ok {
118
- c.api.SendCodef(fn, 404, "The specified secretstore '%s' is not configured.", storeKey)
119
- return
120
- }
121
- kind = entry.Cfg.Kind()
109
+ kind, err := c.dyncfgResolveSecretStoreKind(fn.ID())
110
+ if err != nil {
111
+ c.api.SendCodef(fn, secretStoreErrorCode(err), "%v", err)
112
+ return
113
}
114
115
schema, ok := c.service.Schema(kind)
@@ -201,9 +192,9 @@ func (c *Controller) dyncfgCmdTest(fn dyncfg.Function) {
192
}
193
194
func (c *Controller) dyncfgCmdUserconfig(fn dyncfg.Function) {
204
- kind, ok := c.dyncfgExtractSecretStoreKindFromTemplateID(fn.ID())
205
- if !ok {
206
- c.api.SendCodef(fn, 400, "Invalid template ID for secretstore userconfig: %s.", fn.ID())
195
+ kind, err := c.dyncfgResolveSecretStoreKind(fn.ID())
196
+ if err != nil {
197
+ c.api.SendCodef(fn, secretStoreErrorCode(err), "%v", err)
198
return
199
}
200
if err := fn.ValidateHasPayload(); err != nil {
@@ -290,6 +281,21 @@ func (c *Controller) dyncfgNewTypedConfig(kind secretstore.StoreKind) (any, erro
281
return cfg, nil
282
}
283
284
+func (c *Controller) dyncfgResolveSecretStoreKind(id string) (secretstore.StoreKind, error) {
285
+ if kind, ok := c.dyncfgExtractSecretStoreKindFromTemplateID(id); ok {
286
+ return kind, nil
287
+ }
288
+ storeKey, ok := c.dyncfgExtractSecretStoreKey(id)
289
+ if !ok {
290
+ return "", fmt.Errorf("invalid secretstore ID format: %s", id)
291
+ }
292
+ entry, ok := c.lookup(storeKey)
293
+ if !ok {
294
+ return "", fmt.Errorf("%w: %s", secretstore.ErrStoreNotFound, storeKey)
295
+ }
296
+ return entry.Cfg.Kind(), nil
297
+}
298
+
299
func (c *Controller) dyncfgExtractSecretStoreKindFromTemplateID(id string) (secretstore.StoreKind, bool) {
300
return c.cb.deps.extractSecretStoreKindFromTemplateID(id)
301
}