указать адрес private_ip в cidr_block с помощью модуля группы безопасности terraform - PullRequest
0 голосов
/ 11 сентября 2018

При использовании модуля terraform-aws-modules / security-group / aws я могу указать CIDR_BLOCK со строкой "10.211.103.254/32", но я не могу ссылаться на переменную, которая по существу содержит то же значение, что провереновывод terraform:

Apply complete! Resources: 1 added, 4 changed, 1 destroyed.

Outputs:

blah_private_ip = 10.211.103.254/32

Например, следующий код работает

output "blah_private_ip" {
   value = "${aws_instance.SERVER-NAME-01.private_ip}/32"
}

module "blahsvr-sg" {
source = "terraform-aws-modules/security-group/aws"

name        = "blahsvr-sg"
description = "Security group for blah server"
vpc_id      = "${module.vpc.vpc_id}"

ingress_with_cidr_blocks = [
{
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    description = "HTTPS from server- managed by terraform"

    cidr_blocks = "10.211.103.254/32"  # works
    #cidr_blocks = "${var.blah_private_ip}"  # gives error
  },
]

egress_with_cidr_blocks = [
{
    from_port   = "0"
    to_port     = "65535"
    protocol    = "-1"
    description = "ALL"
    cidr_blocks = "0.0.0.0/0"
  },
  ]
}

Однако тот же код, но подставляющий вместо строки cidr_blocks ссылку на переменную "$ {var.blah_private_ip}" вместовыдает следующую ошибку применения терраформы:

 Error: module.gxesvr-sg.aws_security_group_rule.ingress_with_cidr_blocks[0]: "cidr_blocks.0" must contain a valid CIDR, got error parsing: invalid CIDR address:

Я также пытался обернуть его в определение блока CIDR, но я не знаю, какие значения иметь для / 32 (один IP-адрес).

   cidr_blocks = "${cidrsubnet("${var.blah_private_ip}", 8, 0)}"
   cidr_blocks = "${cidrsubnet("${var.blah_private_ip}", 16, 0 )}"

Надеюсь, кто-нибудь поможет мне отладить это.

1 Ответ

0 голосов
/ 11 сентября 2018

Я не вижу, где вы определяете переменную blah_private_ip. это не похоже на

output "blah_private_ip" {
   value = "${aws_instance.SERVER-NAME-01.private_ip}/32"
}

Вы должны быть в состоянии просто сделать ...

module "blahsvr-sg" {
  source = "terraform-aws-modules/security-group/aws"
  ...
  ingress_with_cidr_blocks = [
    {
    ...
    cidr_blocks = "${aws_instance.SERVER-NAME-01.private_ip}/32"
    ...
    }
  ]
}

вместо интерполяции вывода ip внутри переменной (что вы не можете сделать).

Если вы хотите использовать то же значение для вывода и для ввода ingress_with_cidr_blocks ->cidr, вы можете определить локальное значение, например

locals {
  cidr = "${aws_instance.SERVER-NAME-01.private_ip}/32"
}


module "blahsvr-sg" {
  source = "terraform-aws-modules/security-group/aws"
  ...
  ingress_with_cidr_blocks = [
    {
    ...
    cidr_blocks = "${local.cidr}"
    ...
    }
  ]
}

output "my_cidr" {
  value = "${local.cidr}"
}
...