106 lines
3.5 KiB
HCL
106 lines
3.5 KiB
HCL
# 2026-03-29 — sless.tf: провайдер sless и sless_job ресурсы для установки ПО на ВМ.
|
||
#
|
||
# Схема работы:
|
||
# 1. terraform apply создаёт FunctionJob CR в k8s
|
||
# 2. Провайдер загружает код из source_dir в S3
|
||
# 3. Оператор собирает Docker-образ (kaniko) и запускает Job
|
||
# 4. Job подключается к ВМ по SSH и устанавливает ПО
|
||
# 5. terraform apply завершается: outputs содержат статус каждого шага
|
||
#
|
||
# Для повторного запуска: увеличь install_run_id в terraform.tfvars → terraform apply
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Провайдер
|
||
# ---------------------------------------------------------------------------
|
||
|
||
provider "sless" {
|
||
endpoint = "https://sless.kube5s.ru"
|
||
token = var.api_token # тот же JWT что и в provider "nubes"
|
||
nubes_endpoint = "https://deck-api-test.ngcloud.ru/api/v1/index.cfm"
|
||
}
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Общие locals: SSH-параметры для подключения к ВМ
|
||
# ---------------------------------------------------------------------------
|
||
|
||
locals {
|
||
vm_ip = nubes_vc_vm_v3.vm.state_out_flat["externalConnect"]
|
||
|
||
ssh_env = {
|
||
VM_IP = local.vm_ip
|
||
SSH_USER = "ubuntu"
|
||
SSH_KEY = file("${path.module}/vm_key") # приватный ключ, созданный на шаге 2 (не хранится в git)
|
||
}
|
||
}
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Job 1: базовые пакеты (jq, pip3 и др.)
|
||
# ---------------------------------------------------------------------------
|
||
|
||
resource "sless_job" "install_packages" {
|
||
count = var.install_packages ? 1 : 0
|
||
|
||
name = "vm-install-packages"
|
||
runtime = "python3.11"
|
||
entrypoint = "handler.install"
|
||
source_dir = "${path.module}/functions/install-packages"
|
||
memory_mb = 128
|
||
|
||
env_vars = local.ssh_env
|
||
event_json = jsonencode({
|
||
packages = var.base_packages
|
||
update = true
|
||
})
|
||
|
||
run_id = var.install_run_id
|
||
wait_timeout_sec = 600
|
||
|
||
depends_on = [nubes_vc_vm_v3.vm]
|
||
}
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Job 2: nginx
|
||
# ---------------------------------------------------------------------------
|
||
|
||
resource "sless_job" "install_nginx" {
|
||
count = var.install_nginx ? 1 : 0
|
||
|
||
name = "vm-install-nginx"
|
||
runtime = "python3.11"
|
||
entrypoint = "handler.install"
|
||
source_dir = "${path.module}/functions/install-nginx"
|
||
memory_mb = 128
|
||
|
||
env_vars = local.ssh_env
|
||
event_json = jsonencode({})
|
||
|
||
run_id = var.install_run_id
|
||
wait_timeout_sec = 600
|
||
|
||
depends_on = [nubes_vc_vm_v3.vm, sless_job.install_packages]
|
||
}
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Job 3: Docker CE
|
||
# ---------------------------------------------------------------------------
|
||
|
||
resource "sless_job" "install_docker" {
|
||
count = var.install_docker ? 1 : 0
|
||
|
||
name = "vm-install-docker"
|
||
runtime = "python3.11"
|
||
entrypoint = "handler.install"
|
||
source_dir = "${path.module}/functions/install-docker"
|
||
memory_mb = 128
|
||
|
||
env_vars = local.ssh_env
|
||
event_json = jsonencode({
|
||
compose = true
|
||
})
|
||
|
||
run_id = var.install_run_id
|
||
wait_timeout_sec = 900
|
||
|
||
depends_on = [nubes_vc_vm_v3.vm, sless_job.install_packages, sless_job.install_nginx]
|
||
}
|