tfTemplate/terraform/vm
2026-02-03 13:59:34 +03:00
..
templates doc: добавление документации по созданию вм через tf 2026-02-03 13:59:34 +03:00
.gitignore doc: добавление документации по созданию вм через tf 2026-02-03 13:59:34 +03:00
local.tf doc: добавление документации по созданию вм через tf 2026-02-03 13:59:34 +03:00
provider.tf doc: добавление документации по созданию вм через tf 2026-02-03 13:59:34 +03:00
README.md doc: добавление документации по созданию вм через tf 2026-02-03 13:59:34 +03:00
terraform.tfvars doc: добавление документации по созданию вм через tf 2026-02-03 13:59:34 +03:00
tools.tf doc: добавление документации по созданию вм через tf 2026-02-03 13:59:34 +03:00
vapp.tf doc: добавление документации по созданию вм через tf 2026-02-03 13:59:34 +03:00
var.tf doc: добавление документации по созданию вм через tf 2026-02-03 13:59:34 +03:00
vm.tf doc: добавление документации по созданию вм через tf 2026-02-03 13:59:34 +03:00

Развёртывание ВМ в VMware Cloud Director через tf

Используется OpenTofu (tofu). Конфигурация создаёт виртуальные машины в vCD: можно задать несколько ВМ, размеры CPU/RAM/дисков и сеть.


Быстрый старт

  1. Установите OpenTofu (opentofu.org).

  2. Задайте переменные окружения (доступ к vCD):

    export TF_VAR_vmware_username=аш_пользователь_vCD"
    export TF_VAR_vmware_password=аш_пароль_vCD"
    

    Пароль администратора ВМ можно не задавать — тогда он сгенерируется автоматически (см. tools.tf). Чтобы задать свой: export TF_VAR_admin_password="ваш_пароль".

  3. Отредактируйте terraform.tfvars — укажите нужный vDC, имя vApp, параметры ВМ (см. раздел «Конфигурация» ниже).

  4. Разверните инфраструктуру:

    tofu init
    tofu plan
    tofu apply
    

Конфигурация

Переменные окружения

Обязательные для доступа к vCD:

  • TF_VAR_vmware_username — пользователь VMware Cloud Director
  • TF_VAR_vmware_password — пароль VMware Cloud Director

Опционально: TF_VAR_admin_password — пароль администратора на ВМ (если не задан, генерируется автоматически).

vcds = {
    "vdcconfiguration1" = {
        url               = "https://ngcloud.ru/api"
        org               = "dev"
        vdc               = "dev"
        network_routed    = "dev-mgmt-network"
        servers = {
            "vappname01" = {
                "vmname01" = {
                    cpu      = "4"
                    memory   = "4096"
                    osDisk   = "16384"
                    dataDisk = {
                        "1" = "30720"
                        "2" = "15360"
                    }
                    network = {
                        mode = "auto"
                        ip   = ""
                    }
                    catalog_name = "dev"
                    template_name = "RockyLinux_9-16G-customize"
                }
            }
        }
    }
}

Переменная задаётся в terraform.tfvars; схема — в var.tf, использование — provider.tf, vapp.tf, vm.tf, local.tf.

*** Ключ vcds — произвольное имя контура (можно несколько vDC в одной конфигурации) ***

vcds = {
    "test" = {
      ...
    }
}

*** Настройка vDC ***

        url               = URL API Cloud Director (https://<хост>/api)
        org               = имя организации
        vdc               = имя vDC
        network_routed    = имя routed-сети, куда подключаются ВМ

*** Настройка vApp (ключи внутри servers — имена vApp) ***

        servers = {
            "testservers"  = { ... }   # первый vApp
            "testvapp2"    = { ... }   # второй vApp
        }

*** Настройка сервера (параметры ВМ) ***

"testservers" = {
    "test01" = {
        cpu             = кол-во ядер CPU
        memory          = объём RAM (МБ)
        osDisk          = размер системного диска (МБ)
        dataDisk        = {   # ключ — unit, значение — размер в МБ
            "1" = "30720"
            "2" = "15360"
        }
        network         = {   # mode "auto" (IP из пула) или "manual" (указать ip)
            mode = "auto"
            ip   = ""
        }
        network         = mode "auto" (IP из пула) или "manual" (указать ip)
            mode = "auto"
            ip   = ""
        catalog_name    = каталог с шаблоном
        template_name   = имя шаблона образа
        # опционально (cloud-init):
        init_username       = "deploy"
        ssh_authorized_keys = ["ssh-ed25519 AAAA..."]
    }