# OpenBoatmobile - Agent Deployment # Provider-agnostic infrastructure for OpenClaw or Hermes agents terraform { required_version = ">= 1.5.4" required_providers { digitalocean = { source = "digitalocean/digitalocean" version = "~> 2.0" } hcloud = { source = "hetznercloud/hcloud" version = "~> 1.0" } random = { source = "hashicorp/random" version = "~> 3.0" } cloudinit = { source = "hashicorp/cloudinit" version = "~> 2.0" } } } # Provider configuration - selected by var.cloud_provider # Secrets (API tokens) are set via environment variables: # TF_VAR_do_token or TF_VAR_hcloud_token provider "digitalocean" { token = var.do_token } provider "hcloud" { token = var.hcloud_token } # Locals for provider selection and framework-specific defaults locals { is_digitalocean = var.cloud_provider == "digitalocean" is_hetzner = var.cloud_provider == "hetzner" # Framework-specific admin user defaults admin_user_framework_default = var.agent_framework == "hermes" ? "hermes" : "openclaw" # Use framework default if admin_user not explicitly set effective_admin_user = var.admin_user != "" ? var.admin_user : local.admin_user_framework_default # Common tags/labels for resource tracking common_tags = { project = var.project_name managed = "terraform" component = var.agent_framework == "hermes" ? "hermes-agent" : "openclaw-gateway" } # Select userdata based on framework userdata = var.agent_framework == "hermes" ? data.cloudinit_config.hermes[0].rendered : data.cloudinit_config.openclaw[0].rendered }