Найти тему
HippoLab - блог про Linux

Разбираемся как работает cidrsubnet() в terraform

Если взглянуть на официальную документацию по terraform и найти там описание функции cidrsubnet(), то большинство людей просто пролистают "это" мимо как непонятное нечто. Действительно, документация по функциям terraform оставляет желать лучшего. Тем не менее cidrsubnet() - это то, что прописывает доктор, если вы бредите автоматизацией создания подсетей в вашей VPC. Как же она работает?

Функция принимает 3 аргумента:

  • Адрес VPC
  • new bits
  • Номер подсети

Трудностей с заполнением адреса VPC возникать не должно. Этот тот диапазон адресов, который вы назначаете, когда создаете VPC, например 10.0.0.0/16. А что такое "new bits"? New bits - это разница между маской сети VPC и маской подсети этой же VPC. Например, если мы хотим разбить нашу VPC 10.0.0.0/16 на сети с маской /24, то в "new bits" мы ставим 24 -16 = 8. А что такое тогда "Номер подсети"? Номер подсети - это просто порядковый номер сети начиная с нулевого которую нужно вернуть после разбиения.

Ну, какая будет нулевая подсеть в сети 10.0.0.0/16 после разбиения её на сети с маской /24???

10.0.0.0/24

А первая?

10.0.1.0/24

А восьмая?

10.0.8.0/24

Более понятно связи можно проследить на схеме

Приведем еще пару примеров, где человеческий мозг уже не так хорошо справляется с переводом чисел из одной сисетмы исчисления в другую. Воспользуемся консолью terraform и повводим разные циферки:

$ terraform console
> cidrsubnet("10.0.0.0/18", 1, 1)
10.0.32.0/19
> cidrsubnet("10.0.0.0/18", 2, 0)
10.0.0.0/20
> cidrsubnet("10.0.0.0/18", 1, 1)
10.0.32.0/19
> cidrsubnet("10.0.0.0/18", 2, 0)
10.0.0.0/20
> cidrsubnet("10.0.0.0/18", 2, 3)
10.0.48.0/20

Разобрались? Ставьте лайк, если да. Вопросы или дополнения пишите в комментариях.

Еще про сетевое администрирование - на моем канале или на сайте www.hippolab.ru.