packer {
  required_plugins {
    alicloud = {
      version = ">= 1.1.2"
      source  = "github.com/hashicorp/alicloud"
    }
  }
}

variable "access_key" {
  type    = string
  default = "${env("ALICLOUD_ACCESS_KEY")}"
}

variable "secret_key" {
  type    = string
  default = "${env("ALICLOUD_SECRET_KEY")}"
}

source "alicloud-ecs" "ubuntu" {
  associate_public_ip_address = true
  image_name                  = "lab-genai-base-ubuntu-24.04-{{timestamp}}"
  instance_type               = "ecs.c8i.large"
  internet_charge_type        = "PayByTraffic"
  io_optimized                = true
  region                      = "ap-southeast-1"
  skip_image_validation       = true
  source_image                = "ubuntu_24_04_x64_20G_alibase_20250702.vhd"
  ssh_username                = "root"
  system_disk_mapping {
    disk_category = "cloud_essd"
    disk_size = 30
  }
}

build {
  name    = "genai"
  sources = [
    "source.alicloud-ecs.ubuntu"
  ]

  provisioner "shell" {
    script = "./scripts/aliyun-ubuntu-init.sh"
  }

  provisioner "shell" {
    inline = [
      "sudo systemctl disable --now unattended-upgrades.service",
      "sudo DEBIAN_FRONTEND=noninteractive apt-get update",
      "sudo DEBIAN_FRONTEND=noninteractive apt-get install -y net-tools curl jq unzip mysql-client-core-8.0 python3-pip python3-venv ca-certificates",
    ]
  }

  # Add Docker's official GPG key and repository
  provisioner "shell" {
    script = "./scripts/add-docker-repo.sh"
  }

  # Install Docker
  provisioner "shell" {
    inline = [
      "sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin",
      "sudo usermod -aG docker ubuntu",
    ]
  }

  provisioner "shell" {
    inline = [
      "sudo docker pull cheesewang/tidb-lab-python-vscode:1.0",
      # demo_701
      "sudo docker pull chenhaoh/tidb-lab-java-vscode:v2.0",
      # demo_422
      "sudo docker pull mysql:8.0",
      "sudo docker pull elasticsearch:8.18.1",
      "sudo docker pull quay.io/coreos/etcd:v3.5.18",
      "sudo docker pull minio/minio:RELEASE.2023-03-20T20-16-18Z",
      "sudo docker pull milvusdb/milvus:v2.5.10"
    ]
  }
}

# Build images:
# - m-t4nicu92vxy2j0wsa84u (alicloud singapore)