@@ -16,7 +16,8 @@ import (
16
16
type secretStore map [string ]any
17
17
18
18
// 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 ) {
20
21
bytes , diags := private .GetKey (ctx , "secrets" )
21
22
if diags != nil {
22
23
return
@@ -32,6 +33,18 @@ func newSecretStore(ctx context.Context, private privateData) (store secretStore
32
33
return
33
34
}
34
35
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
+
35
48
return
36
49
}
37
50
@@ -46,23 +59,15 @@ func (s secretStore) Save(ctx context.Context, private privateData) (diags diag.
46
59
return private .SetKey (ctx , "secrets" , bytes )
47
60
}
48
61
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
-
63
62
// handleRespSecrets extracts the wrapped value from each response var, then
64
63
// 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
+
66
71
handleVars := func (vars map [string ]any ) {
67
72
for key , val := range vars {
68
73
if mval , ok := val .(map [string ]any ); ok {
@@ -96,11 +101,22 @@ func handleRespSecrets(resp *fleetapi.PackagePolicy, secrets secretStore) {
96
101
handleVars (streamVars )
97
102
}
98
103
}
104
+
105
+ nd = secrets .Save (ctx , private )
106
+ diags .Append (nd ... )
107
+
108
+ return
99
109
}
100
110
101
111
// handleReqRespSecrets extracts the wrapped value from each response var, then
102
112
// 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
+
104
120
handleVars := func (reqVars map [string ]any , respVars map [string ]any ) {
105
121
for key , val := range respVars {
106
122
if mval , ok := val .(map [string ]any ); ok {
@@ -136,6 +152,11 @@ func handleReqRespSecrets(req fleetapi.PackagePolicyRequest, resp *fleetapi.Pack
136
152
handleVars (utils .Deref (streamReq .Vars ), streamRespVars )
137
153
}
138
154
}
155
+
156
+ nd = secrets .Save (ctx , private )
157
+ diags .Append (nd ... )
158
+
159
+ return
139
160
}
140
161
141
162
// Equivalent to privatestate.ProviderData
0 commit comments