с terraform 0.12, как мне обрезать префикс ip из строки, как 1.1.1.1/32? - PullRequest
0 голосов
/ 06 апреля 2020

Я получил эту переменную:

variable "ip" {
  default = "1.1.1.1/32"
}

В некоторых случаях мне нужен полный префикс: "1.1.1.1/32", но иногда мне просто нужен префикс ip sans: "1.1.1.1"

Теперь 0,12 есть новая функция, которую я мог бы использовать следующим образом:

trimsuffix(var.ip, "/32")

Но я не хочу жестко кодировать префикс подобным образом. Есть ли способ удалить подстроку базы в соответствии с регулярным выражением или даже просто обрезать последние 3 символа из строки? Я не могу использовать substr (), потому что он ожидает, что я знаю полную длину строки

РЕДАКТИРОВАТЬ: поэтому пытаетесь сделать это с помощью regex (), но не уверены, что terraform поддерживает полное регулярное выражение?

https://regex101.com/r/EGzxAq/1 Я получаю сообщение об ошибке:

> regex("^.+(?=\/)","11.1.1.1/32")

>
Error: Invalid escape sequence

  on <console-input> line 1:
  (source code not available)

The symbol "/" is not a valid escape sequence selector.

И затем, когда я пытаюсь сбежать от обратного слэса sh:

> regex("^.+(?=\\/)","11.1.1.1/32")

>
Error: Invalid function argument

  on <console-input> line 1:
  (source code not available)

Invalid value for "pattern" parameter: invalid regexp pattern: invalid or
unsupported Perl syntax in (?=.

1 Ответ

2 голосов
/ 06 апреля 2020

Если вы просто хотите урезать префикс для удаления /32 или любого другого произвольного префикса, такого как /16, тогда вы можете использовать cidrhost функцию вместо этого и просто указать номер хоста как 0, чтобы получить по сетевому адресу:

$ terraform console
> cidrhost("192.168.0.0/16", 0)
192.168.0.0
> cidrhost("1.1.1.1/32", 0)
1.1.1.1

Если вы по какой-то причине захотите использовать регулярное выражение, вам просто нужно захватить раздел до /, так что (.*)/.* будет хорошо для использования в качестве шаблона поиска. Функция regex возвращает список групп захвата, поэтому вам просто нужна первая:

> regex("(.*)/.*", "192.168.0.0/16")[0]
192.168.0.0
> regex("(.*)/.*", "1.1.1.1/32")[0]
1.1.1.1
...