Skip to content

Commit 992fb83

Browse files
committed
secrets change
1 parent 87ba881 commit 992fb83

File tree

4 files changed

+41
-47
lines changed

4 files changed

+41
-47
lines changed

internal/fleet/integration_policy/create.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,7 @@ func (r *integrationPolicyResource) Create(ctx context.Context, req resource.Cre
3434
return
3535
}
3636

37-
secrets, diags := newSecretStore(ctx, resp.Private)
38-
resp.Diagnostics.Append(diags...)
39-
if resp.Diagnostics.HasError() {
40-
return
41-
}
42-
43-
pruneRefsFromResponse(policy, secrets)
44-
handleReqRespSecrets(body, policy, secrets)
45-
46-
diags = secrets.Save(ctx, resp.Private)
37+
diags = handleReqRespSecrets(ctx, body, policy, resp.Private)
4738
resp.Diagnostics.Append(diags...)
4839
if resp.Diagnostics.HasError() {
4940
return

internal/fleet/integration_policy/read.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,7 @@ func (r *integrationPolicyResource) Read(ctx context.Context, req resource.ReadR
3434
return
3535
}
3636

37-
secrets, diags := newSecretStore(ctx, resp.Private)
38-
resp.Diagnostics.Append(diags...)
39-
if resp.Diagnostics.HasError() {
40-
return
41-
}
42-
43-
pruneRefsFromResponse(policy, secrets)
44-
handleRespSecrets(policy, secrets)
45-
46-
diags = secrets.Save(ctx, resp.Private)
37+
diags = handleRespSecrets(ctx, policy, resp.Private)
4738
resp.Diagnostics.Append(diags...)
4839
if resp.Diagnostics.HasError() {
4940
return

internal/fleet/integration_policy/secrets.go

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ import (
1616
type secretStore map[string]any
1717

1818
// newSecretStore creates a new secretStore from the resource privateData.
19-
func newSecretStore(ctx context.Context, private privateData) (store secretStore, diags diag.Diagnostics) {
19+
// If the store already exists, it is filtered by any references in the resp policy.
20+
func newSecretStore(ctx context.Context, resp *fleetapi.PackagePolicy, private privateData) (store secretStore, diags diag.Diagnostics) {
2021
bytes, diags := private.GetKey(ctx, "secrets")
2122
if diags != nil {
2223
return
@@ -32,6 +33,18 @@ func newSecretStore(ctx context.Context, private privateData) (store secretStore
3233
return
3334
}
3435

36+
// Remove any saved secret refs not present in the API response.
37+
refs := make(map[string]any)
38+
for _, r := range utils.Deref(resp.SecretReferences) {
39+
refs[*r.Id] = nil
40+
}
41+
42+
for id := range store {
43+
if _, ok := refs[id]; !ok {
44+
delete(store, id)
45+
}
46+
}
47+
3548
return
3649
}
3750

@@ -46,23 +59,15 @@ func (s secretStore) Save(ctx context.Context, private privateData) (diags diag.
4659
return private.SetKey(ctx, "secrets", bytes)
4760
}
4861

49-
// pruneRefsFromResponse removes any saved secret refs not present in the API response.
50-
func pruneRefsFromResponse(resp *fleetapi.PackagePolicy, secrets secretStore) {
51-
refs := make(map[string]any)
52-
for _, r := range utils.Deref(resp.SecretReferences) {
53-
refs[*r.Id] = nil
54-
}
55-
56-
for id := range secrets {
57-
if _, ok := refs[id]; !ok {
58-
delete(secrets, id)
59-
}
60-
}
61-
}
62-
6362
// handleRespSecrets extracts the wrapped value from each response var, then
6463
// replaces any secret refs with the original value from secrets if available.
65-
func handleRespSecrets(resp *fleetapi.PackagePolicy, secrets secretStore) {
64+
func handleRespSecrets(ctx context.Context, resp *fleetapi.PackagePolicy, private privateData) (diags diag.Diagnostics) {
65+
secrets, nd := newSecretStore(ctx, resp, private)
66+
diags.Append(nd...)
67+
if diags.HasError() {
68+
return
69+
}
70+
6671
handleVars := func(vars map[string]any) {
6772
for key, val := range vars {
6873
if mval, ok := val.(map[string]any); ok {
@@ -96,11 +101,22 @@ func handleRespSecrets(resp *fleetapi.PackagePolicy, secrets secretStore) {
96101
handleVars(streamVars)
97102
}
98103
}
104+
105+
nd = secrets.Save(ctx, private)
106+
diags.Append(nd...)
107+
108+
return
99109
}
100110

101111
// handleReqRespSecrets extracts the wrapped value from each response var, then
102112
// maps any secret refs to the original request value.
103-
func handleReqRespSecrets(req fleetapi.PackagePolicyRequest, resp *fleetapi.PackagePolicy, secrets secretStore) {
113+
func handleReqRespSecrets(ctx context.Context, req fleetapi.PackagePolicyRequest, resp *fleetapi.PackagePolicy, private privateData) (diags diag.Diagnostics) {
114+
secrets, nd := newSecretStore(ctx, resp, private)
115+
diags.Append(nd...)
116+
if diags.HasError() {
117+
return
118+
}
119+
104120
handleVars := func(reqVars map[string]any, respVars map[string]any) {
105121
for key, val := range respVars {
106122
if mval, ok := val.(map[string]any); ok {
@@ -136,6 +152,11 @@ func handleReqRespSecrets(req fleetapi.PackagePolicyRequest, resp *fleetapi.Pack
136152
handleVars(utils.Deref(streamReq.Vars), streamRespVars)
137153
}
138154
}
155+
156+
nd = secrets.Save(ctx, private)
157+
diags.Append(nd...)
158+
159+
return
139160
}
140161

141162
// Equivalent to privatestate.ProviderData

internal/fleet/integration_policy/update.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,7 @@ func (r *integrationPolicyResource) Update(ctx context.Context, req resource.Upd
3535
return
3636
}
3737

38-
secrets, diags := newSecretStore(ctx, resp.Private)
39-
resp.Diagnostics.Append(diags...)
40-
if resp.Diagnostics.HasError() {
41-
return
42-
}
43-
44-
pruneRefsFromResponse(policy, secrets)
45-
handleReqRespSecrets(body, policy, secrets)
46-
47-
diags = secrets.Save(ctx, resp.Private)
38+
diags = handleReqRespSecrets(ctx, body, policy, resp.Private)
4839
resp.Diagnostics.Append(diags...)
4940
if resp.Diagnostics.HasError() {
5041
return

0 commit comments

Comments
 (0)