Загрузка данных


ADM-PC:
Все последующие действия выполняются из-под доменного пользователя admin01

    Перейдём в каталог ~/infra/terraform:

cd ~/infra/terraform

    Создаём файл terraform.tf и указываем каких провайдеров будем использовать:

cat <<EOF > terraform.tf
terraform {
  required_providers {
    proxmox = {
      source  = "bpg/proxmox"
      version = "0.89.1"
    }
    freeipa = {
      source  = "camptocamp/freeipa"
      version = "1.0.0"
    }
  }
}
EOF

    Создаём файл providers.tf и указываем необходимые для подключения параметры для каждого из провайдеров:

cat <<EOF > providers.tf
provider "proxmox" {
  endpoint  = var.pve_endpoint
  api_token = var.pve_api_token
  insecure  = true
}

provider "freeipa" {
  host     = var.freeipa_host
  username = var.freeipa_username
  password = var.freeipa_username_password
  insecure = true
}
EOF

    Создаём файл variable.tf и указываем переменные которые будет использовать Terraform:

cat <<EOF > variable.tf
variable "pve_endpoint" {
  type        = string
  description = "Access to the PVE web interface"
}

variable "pve_api_token" {
  type        = string
  description = "PVE API Token"
  sensitive   = true
}

variable "freeipa_host" {
  type        = string
  description = "Access to the FreeIPA host"
}

variable "freeipa_username" {
  type        = string
  description = "Access to the FreeIPA host username"
}

variable "freeipa_username_password" {
  type        = string
  description = "Access to the FreeIPA host username password"
  sensitive   = true
}
EOF

    Создаём файл terraform.tfvars и указываем значения переменных которые были указаны в файле variable.tf:

cat <<EOF > terraform.tfvars
pve_endpoint              = "https://192.168.0.254:8006"
pve_api_token             = "root@pam!terraform=dafccb03-5a17-4098-8109-bc056130f9d2"
freeipa_host              = "infra-srv1.au-team.cloud"
freeipa_username          = "admin"
freeipa_username_password = "P@ssw0rd"
EOF

        Значение для переменной pve_api_token получено посредством создания API Token в веб-интерфейсе гипервизора:

    Инициализируем директорию для работы с Terraform и указанным провайдером:

terraform init

        должно получится следующее:

    Проверить можно следующим образом:

    Создаём файл, например: vm.tf и указываем все минимально необходимые параметры для создания требуемых ВМ:
        в соответствии с "Таблица характеристики ВМ" и "Итоговой топологией"

resource "proxmox_virtual_environment_vm" "vms" {
  count     = 5
  name      = "k8s-srv${count.index + 1}"
  node_name = "cloud0"

  clone {
    vm_id = 101
    full  = true
  }

  cpu {
    cores = 2
    type  = "x86-64-v2-AES"
  }

  memory {
    dedicated = 2048
  }

  initialization {
    datastore_id = "local-lvm"

    ip_config {
      ipv4 {
        address = "192.168.0.20${count.index + 1}/24"
        gateway = "192.168.0.254"
      }
    }
    dns {
      domain = "au-team.cloud"
      servers = ["192.168.0.101"]
    }

    user_account {
      username = "altlinux"
      password = "P@ssw0rd"
      keys     = ["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCU4RoVAWgyb9dtZ+GmrGqLEYSVZYPryVu3iUNlllqc9ZpPhMKZ3RrOEDYWO9ulnWP6/Nqvj2BrcNATjNOmdujYjayP1ouGirFSNk1QVtCoelYHGqnClRfF+obvvHiyX3EsAT19OXNba6K1JAOYbrJJ5m9lkwtKVtSYogsHzXh7J7kpyAyFDxYHD+J6tWA0YVLhV+iRGzcnxlGLEBi7mBbqkzv+hd7BFEBhsEh0DK5ccKN3XtkgMWRrnBuWga3hNKpgP3cqHFiITCoj2f7kq4xlFC/8UKKAsWiRI19ASzhtLk0HwnI3akD24eE5DyarIZD0guOR6NBDx7AWBSb4/T1fYLtyWSVlyDOz9mRMoySdD/qvaCDw/5RtgLUtV6sPH8Cpg+1HAIkaHH+MICVQA/XOuUqlH0PKb+S7B9zdhWCZ0W9vtbfoEiRxEiMmeoDDkOoY447LP6wL/LN8ram7RSZqH7pRiM4H9slYxeFRqZ6yC+bAL/cmzARSQtItebS/Hik= admin01@adm-pc.au-team.cloud"]
    }
  }

  disk {
    datastore_id = "local-lvm"
    interface    = "scsi0"
    discard      = "on"
    size         = 20
  }

  network_device {
    bridge   = "cloudnet"
    firewall = false
  }
}

    Создаём файл, например: dns.tf и указываем все минимально необходимые параметры для создания требуемых записей DNS:

resource "freeipa_dns_record" "records-type-a" {
  count           = 5
  dnszoneidnsname = "au-team.cloud."
  idnsname        = "k8s-srv${count.index + 1}"
  records         = ["192.168.0.20${count.index + 1}"]
  type            = "A"
}

resource "freeipa_dns_record" "records-type-ptr" {
  count           = 5
  dnszoneidnsname = "0.168.192.in-addr.arpa."
  idnsname        = "20${count.index + 1}"
  records         = ["k8s-srv${count.index + 1}.au-team.cloud."]
  type            = "PTR"
}

    Выполняем развёртывание конфигурации:

terraform apply -auto-approve

        должно получится следующее:

    Можно проверить доступ по SSH до каждой развёрнутой ВМ:

    Таким образом, необходимые ВМ развёрнуты, а также записи типа A создались, проверим PTR: