terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "3.0.2"
    }
  }
}

provider "docker" {
  host = "unix:///var/run/docker.sock"
}

variable "deploy_administration" {
  type      = bool
  default   = false
}

variable "deploy_service" {
  type      = bool
  default   = false
}

resource "docker_network" "network" {
  name = "netbox_rps"
}


resource "docker_image" "redis" {
  name = "redis:7-alpine"
}

resource "docker_container" "redis" {
  image = docker_image.redis.image_id
  name = "redis"

  command = [
    "sh",
    "-c",  # this is to evaluate the $REDIS_PASSWORD from the env
    "redis-server --appendonly yes --requirepass \"$REDIS_PASSWORD\""  # $$ is because of Docker
  ]

  env = [
    "REDIS_PASSWORD=password"
  ]

  ports {
    internal = 6379
    external = 6379
  }

  networks_advanced {
    name = docker_network.network.name
  }
}

resource "docker_image" "postgres" {
  name = "postgres:15-alpine"
}

resource "docker_container" "postgres" {
  image = docker_image.postgres.image_id
  name = "postgres"

  env = [
    "POSTGRES_USER=username",
    "POSTGRES_PASSWORD=password",
    "POSTGRES_DB=netbox"
  ]

  ports {
    internal = 5432
    external = 5432
  }

  networks_advanced {
    name = docker_network.network.name
  }
}

resource "docker_container" "adminer" {
  count = var.deploy_administration ? 1 : 0
  image = "adminer"
  name = "adminer"


  ports {
    internal = 8080
    external = 8080
  }

  networks_advanced {
    name = docker_network.network.name
  }
}

resource "docker_image" "netbox" {
  count = var.deploy_service ? 1 : 0
  name = "netbox_rps"

  build {
    context = "."
  }
}

resource "docker_container" "netbox" {
  count = var.deploy_service ? 1 : 0
  name = "netbox"
  image = docker_image.netbox[0].image_id

  ports {
    internal = 8080
    external = 8000
  }

  networks_advanced {
    name = docker_network.network.name
  }

  env = [
    "CORS_ORIGIN_ALLOW_ALL=True",
    "DB_HOST=postgres",
    "DB_NAME=postgres",
    "DB_USER=username",
    "DB_PASSWORD=password",
    "REDIS_CACHE_DATABASE=1",
    "REDIS_CACHE_HOST=redis",
    "REDIS_CACHE_PASSWORD=password",
    "REDIS_CACHE_SSL=false",
    "REDIS_DATABASE=0",
    "REDIS_HOST=redis",
    "REDIS_PASSWORD=password",
    "REDIS_SSL=false",
    "SECRET_KEY=r8OwDznj!!dci#ParztZELKezarlkjjlazjkhat9ghmRfdu1Ysxm0AiPeDCQhKE+N_rClfWNj",
    "SKIP_SUPERUSER=false",
    "SUPERUSER_API_TOKEN=0123456789abcdef0123456789abcdef01234567",
    "SUPERUSER_EMAIL=username@global.ntt",
    "SUPERUSER_NAME=username",
    "SUPERUSER_PASSWORD=password",
  ]
}