Skip to content

Commit 4331181

Browse files
committed
feat: allow importing and easy referencing of external secrets
1 parent 8373b99 commit 4331181

File tree

2 files changed

+49
-19
lines changed

2 files changed

+49
-19
lines changed

terraform/persistent/secret.tf

+36-13
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,53 @@
1-
variable "ssm_parameter" {
1+
variable "secret" {
22
type = map(
33
object({
44
name = string
5-
type = optional(string, "SecureString")
65
})
76
)
87
default = {}
98
nullable = false
109
}
1110

12-
resource "aws_ssm_parameter" "ssm_parameter" {
13-
for_each = var.ssm_parameter
11+
variable "external_secret" {
12+
type = map(
13+
object({
14+
arn = optional(string)
15+
name = optional(string)
16+
})
17+
)
18+
default = {}
19+
nullable = false
20+
}
1421

15-
name = each.value
16-
type = each.value.type
17-
value = ""
22+
resource "aws_secretsmanager_secret" "secret" {
23+
for_each = var.secret
1824

19-
lifecycle {
20-
ignore_changes = [value]
25+
name = each.value.name
26+
}
27+
28+
data "aws_secretsmanager_secret" "secret" {
29+
for_each = {
30+
for secret_id, definition in var.external_secret : secret_id => definition.name
31+
if definition.name != null && definition.arn == null
2132
}
33+
name = each.value.name
2234
}
2335

24-
output "ssm_parameter" {
25-
value = {
26-
for parameter_id, definition in aws_secretsmanager_secret.secret : parameter_id => {
36+
output "secret" {
37+
value = merge({
38+
for secret, definition in aws_secretsmanager_secret.secret : secret => {
2739
arn = definition.arn
2840
}
29-
}
41+
},
42+
{
43+
for secret, definition in data.aws_secretsmanager_secret.secret : secret => {
44+
arn = definition.arn
45+
}
46+
},
47+
{
48+
for secret_id, definition in var.external_secret : secret_id => {
49+
arn = definition.arn
50+
} if definition.arn != null
51+
},
52+
)
3053
}

terraform/persistent/ssm-parameter.tf

+13-6
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,29 @@
1-
variable "secret" {
1+
variable "ssm_parameter" {
22
type = map(
33
object({
44
name = string
5+
type = optional(string, "SecureString")
56
})
67
)
78
default = {}
89
nullable = false
910
}
1011

11-
resource "aws_secretsmanager_secret" "secret" {
12-
for_each = var.secret
12+
resource "aws_ssm_parameter" "ssm_parameter" {
13+
for_each = var.ssm_parameter
1314

14-
name = each.value.name
15+
name = each.value
16+
type = each.value.type
17+
value = ""
18+
19+
lifecycle {
20+
ignore_changes = [value]
21+
}
1522
}
1623

17-
output "secret" {
24+
output "ssm_parameter" {
1825
value = {
19-
for secret, definition in aws_secretsmanager_secret.secret : secret => {
26+
for parameter_id, definition in aws_secretsmanager_secret.secret : parameter_id => {
2027
arn = definition.arn
2128
}
2229
}

0 commit comments

Comments
 (0)