| Навигация
|
Terraform простой пример с локальными модулямиTerraform простой пример с локальными модулями
Модули в Terraform - способ организации кода, разделение на меньшие, управляемые части.
Дано, в папке проекта сделана папка modules/<имя_модуля>(придумайте сами)
Простейший пример, где:
Настройки провайдера, в данном случае приме с Яндекс: .terraformrc
provider_installation {
network_mirror {
url = "https://terraform-mirror.yandexcloud.net/"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}
Главный манифест, подключим файлы модуля: main.tf
module "foo" {
source = "./modules/foo"
vm_settings = {
memory = 2
cores = 2
}
}
Вынесем туда файл с переменными: modules/foo/variables.tf
variable "def_zone" {
type = string
default = "ru-central1-a"
}
variable "boot_disk" {
type = string
default = <id_нужного_образа_ос>
}
variable "network_interface" {
type = string
default = <id_нужной_сети>
}
variable "disk_type" {
type = string
default = "network-hdd"
}
variable "disk_size" {
type = number
default = 50
}
variable "disk_names" {
type = list
default = ["disk1", "disk2"]
}
variable "vm_settings" {
type = object({
cores = number
memory = number
})
default = {
cores = 2
memory = 2
}
validation {
condition = contains([
{ cores = 2, memory = 2 },
{ cores = 4, memory = 4 }
], { cores = var.vm_settings.cores, memory = var.vm_settings.memory })
error_message = "Available 2 cores + 2 memory or 4 cores + 4 memory."
}
}
Манифест, вынесенный в модуль modules/foo/main.tf
terraform {
required_providers {
yandex = {
source = "yandex-cloud/yandex"
}
}
}
provider "yandex" {
zone = var.def_zone
}
data "yandex_vpc_subnet" "default_subnet" {
name = var.def_zone
}
resource "yandex_compute_instance" "api" {
name = var.api
resources {
cores = var.vm_settings.cores
memory = var.vm_settings.memory
}
boot_disk {
initialize_params {
image_id = var.boot_disk
}
}
network_interface {
nat = true
subnet_id = data.yandex_vpc_subnet.default_subnet.id
}
dynamic "secondary_disk" {
for_each = yandex_compute_disk.add_disks
content {
disk_id = secondary_disk.value.id
auto_delete = true
}
}
}
resource "yandex_compute_disk" "add_disks" {
for_each = toset(var.disk_names)
name = "${each.key}"
type = var.disk_type
zone = var.def_zone
size = var.disk_size
}
Все
Комментарии пользователей Эту новость ещё не комментировалиНаписать комментарий Анонимам нельзя оставоять комментарии, зарегистрируйтесь! |
| Контакты Группа ВК | Видео к IT статьям на YoutubeВидео на другие темы Смотреть | ||||
Мои друзья: ![]() |
© Snakeproject.ru создан в 2013 году.При копировании материала с сайта - оставьте ссылку.Весь материал на сайте носит ознакомительный характер,за его использование другими людьми, автор ответственности не несет. |
||||
Поддержать автора и проект
|
|||||