Невозможно присвоить списочное значение политике json в Terraform - PullRequest
0 голосов
/ 24 июня 2019

У меня в Terraform есть эта политика:

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": "*",
        "Action": "execute-api:Invoke",
        "Resource": "*",
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": "${source_ip}"
            }
        }
      }
    ]
  }

, и у меня есть переменная author_ip, определенная так:

variable "authorized_ip" {
  default = [
    "x.x.x.x/x",
    "x.x.x.x/x",
  ]
}

Теперь я вызываю политику Json следующим образом:

data "template_file" "apigw_policy" {
  template = "${file("${path.module}/template/apigateway_policy.json.template")}"

   vars = {
      source_ip = "${var.authorized_ip}"
   }
}

Но я получаю эту ошибку:

Недопустимое значение для атрибута "vars": элемент "source_ip": обязательная строка.

Таким образом, Terraform ожидает строку вместо списка.Как преобразовать список в строку, чтобы иметь такой результат:

"IpAddress": {
   "aws:SourceIp": [
      "x.x.x.x/x",
      "x.x.x.x/x"
    ]
 }

Ответы [ 2 ]

2 голосов
/ 24 июня 2019

Вы можете использовать функцию jsonencode здесь:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "${jsonencode(source_ip)}"
                }
            }
        }
    ]
}
1 голос
/ 24 июня 2019

Попробуйте

"aws:SourceIp": ["${join(", ", source_ip)}"]

Обратите внимание, что "[" and "]" находятся за пределами интерполированного значения для определения списка в политике, но не представляют тип Terraoform list.

Редактировать: Исправлена ​​опечатка, как указано в комментарии ниже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...