Skip to content
Closed
27 changes: 16 additions & 11 deletions main.tf
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
data "aws_ssm_parameter" "read" {
count = "${var.enabled == "true" ? length(var.parameter_read) : 0}"
name = "${element(var.parameter_read, count.index)}"
count = var.enabled ? length(var.parameter_read) : 0
name = element(var.parameter_read, count.index)
}

resource "aws_ssm_parameter" "default" {
count = "${var.enabled == "true" ? length(var.parameter_write) : 0}"
name = "${lookup(var.parameter_write[count.index], "name")}"
description = "${lookup(var.parameter_write[count.index], "description", lookup(var.parameter_write[count.index], "name"))}"
type = "${lookup(var.parameter_write[count.index], "type", "SecureString")}"
key_id = "${lookup(var.parameter_write[count.index], "type", "SecureString") == "SecureString" && length(var.kms_arn) > 0 ? var.kms_arn : ""}"
value = "${lookup(var.parameter_write[count.index], "value")}"
overwrite = "${lookup(var.parameter_write[count.index], "overwrite", "false")}"
allowed_pattern = "${lookup(var.parameter_write[count.index], "allowed_pattern", "")}"
tags = "${var.tags}"
count = var.enabled ? length(var.parameter_write) : 0
name = tolist(var.parameter_write)[count.index]["name"]
description = lookup(
tolist(var.parameter_write)[count.index],
"description",
tolist(var.parameter_write)[count.index]["name"],
)
type = lookup(tolist(var.parameter_write)[count.index], "type", "SecureString")
key_id = lookup(tolist(var.parameter_write)[count.index], "type", "SecureString") == "SecureString" && length(var.kms_arn) > 0 ? var.kms_arn : ""
value = tolist(var.parameter_write)[count.index]["value"]
overwrite = lookup(tolist(var.parameter_write)[count.index], "overwrite", "false")
allowed_pattern = lookup(tolist(var.parameter_write)[count.index], "allowed_pattern", "")
tags = var.tags
}

33 changes: 28 additions & 5 deletions outputs.tf
Original file line number Diff line number Diff line change
@@ -1,20 +1,43 @@
# Splitting and joining, and then compacting a list to get a normalised list
locals {
name_list = "${compact(concat(split("${var.split_delimiter}",join("${var.split_delimiter}", aws_ssm_parameter.default.*.name)), split("${var.split_delimiter}",join("${var.split_delimiter}", data.aws_ssm_parameter.read.*.name))))}"
value_list = "${compact(concat(split("${var.split_delimiter}",join("${var.split_delimiter}", aws_ssm_parameter.default.*.value)), split("${var.split_delimiter}",join("${var.split_delimiter}", data.aws_ssm_parameter.read.*.value))))}"
name_list = compact(
concat(
split(
var.split_delimiter,
join(var.split_delimiter, aws_ssm_parameter.default.*.name),
),
split(
var.split_delimiter,
join(var.split_delimiter, data.aws_ssm_parameter.read.*.name),
),
),
)
value_list = compact(
concat(
split(
var.split_delimiter,
join(var.split_delimiter, aws_ssm_parameter.default.*.value),
),
split(
var.split_delimiter,
join(var.split_delimiter, data.aws_ssm_parameter.read.*.value),
),
),
)
}

output "names" {
value = "${local.name_list}"
value = local.name_list
description = "A list of all of the parameter names"
}

output "values" {
description = "A list of all of the parameter values"
value = "${local.value_list}"
value = local.value_list
}

output "map" {
description = "A map of the names and values created"
value = "${zipmap(local.name_list, local.value_list)}"
value = zipmap(local.name_list, local.value_list)
}

22 changes: 12 additions & 10 deletions variables.tf
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
variable "parameter_read" {
type = "list"
type = list(string)
description = "List of parameters to read from SSM. These must already exist otherwise an error is returned. Can be used with `parameter_write` as long as the parameters are different."
default = []
}

variable "parameter_write" {
type = "list"
type = list(map(string))

description = <<DESC
List of maps with the Parameter values in this format.
Expand All @@ -20,29 +20,31 @@ variable "parameter_write" {
}]
DESC


default = []
}

variable "tags" {
type = "map"
default = {}
type = map(string)
default = {}
description = "Map containing tags that will be added to the parameters"
}

variable "kms_arn" {
type = "string"
default = ""
type = string
default = ""
description = "The ARN of a KMS key used to encrypt and decrypt SecretString values"
}

variable "enabled" {
type = "string"
default = "true"
type = bool
default = true
description = "Set to `false` to prevent the module from creating and accessing any resources"
}

variable "split_delimiter" {
type = "string"
default = "~^~"
type = string
default = "~^~"
description = "A delimiter for splitting and joining lists together for normalising the output"
}

3 changes: 3 additions & 0 deletions versions.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
terraform {
required_version = ">= 0.12"
}