Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
## [Unreleased]

- Fix secret handling `elasticstack_fleet_integration_policy` resource. ([#821](https://github.com/elastic/terraform-provider-elasticstack/pull/821))

## [0.11.8] - 2024-10-02

- Add key_id to the `elasticstack_elasticsearch_api_key` resource. ([#789](https://github.com/elastic/terraform-provider-elasticstack/pull/789))
Expand Down
32 changes: 22 additions & 10 deletions internal/fleet/integration_policy/secrets.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,21 @@ func handleRespSecrets(ctx context.Context, resp *fleetapi.PackagePolicy, privat
return
}

handleVar := func(key string, mval map[string]any, vars map[string]any) {
refID := mval["id"].(string)
if original, ok := secrets[refID]; ok {
vars[key] = original
}
}

handleVars := func(vars map[string]any) {
for key, val := range vars {
if mval, ok := val.(map[string]any); ok {
if wrapped, ok := mval["value"]; ok {
vars[key] = wrapped
val = wrapped
} else if v, ok := mval["isSecretRef"]; ok && v == true {
handleVar(key, mval, vars)
} else {
// Don't keep null (missing) values
delete(vars, key)
Expand All @@ -84,10 +93,7 @@ func handleRespSecrets(ctx context.Context, resp *fleetapi.PackagePolicy, privat

if mval, ok := val.(map[string]any); ok {
if v, ok := mval["isSecretRef"]; ok && v == true {
refID := mval["id"].(string)
if original, ok := secrets[refID]; ok {
vars[key] = original
}
handleVar(key, mval, vars)
}
}
}
Expand Down Expand Up @@ -119,25 +125,31 @@ func handleReqRespSecrets(ctx context.Context, req fleetapi.PackagePolicyRequest
return
}

handleVar := func(key string, mval map[string]any, reqVars map[string]any, respVars map[string]any) {
if v, ok := mval["isSecretRef"]; ok && v == true {
refID := mval["id"].(string)
original := reqVars[key]
secrets[refID] = original
respVars[key] = original
}
}

handleVars := func(reqVars map[string]any, respVars map[string]any) {
for key, val := range respVars {
if mval, ok := val.(map[string]any); ok {
if wrapped, ok := mval["value"]; ok {
respVars[key] = wrapped
val = wrapped
} else if v, ok := mval["isSecretRef"]; ok && v == true {
handleVar(key, mval, reqVars, respVars)
} else {
// Don't keep null (missing) values
delete(respVars, key)
continue
}

if mval, ok := val.(map[string]any); ok {
if v, ok := mval["isSecretRef"]; ok && v == true {
refID := mval["id"].(string)
original := reqVars[key]
secrets[refID] = original
respVars[key] = original
}
handleVar(key, mval, reqVars, respVars)
}
}
}
Expand Down
Loading