terraform-provider-docker icon indicating copy to clipboard operation
terraform-provider-docker copied to clipboard

networks_advanced forces replacement

Open OlegKunitsyn opened this issue 1 year ago • 0 comments
trafficstars

Community Note

  • Please vote on this issue by adding a 👍 reaction to the original issue to help the community and maintainers prioritize this request
  • Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
  • If you are interested in working on this issue or have submitted a pull request, please leave a comment

Terraform (and docker Provider) Version

Affected Resource(s)

  • docker_service

Terraform Configuration Files

terraform {
  required_providers {
    docker = {
      source = "kreuzwerker/docker"
    }
  }
}
variable "swarm_host" {
  type = string
}
provider "docker" {
  host = var.swarm_host
  ssh_opts = ["-o", "StrictHostKeyChecking=no", "-o", "UserKnownHostsFile=/dev/null"]
}

resource "docker_volume" "caddy" {
  name = "caddy"
}

resource "docker_network" "caddy" {
  name   = "caddy"
  driver = "overlay"
}

resource "docker_image" "caddy" {
  name = "lucaslorentz/caddy-docker-proxy:2.9.1"
  keep_locally = false
}

resource "docker_image" "nginx" {
  name = "nginx:1.27.1"
  keep_locally = false
}

resource "docker_service" "caddy" {
  name = "caddy"
  depends_on = [docker_volume.caddy]
  task_spec {
    force_update = 0
    networks_advanced {
      name = docker_network.caddy.name
    }
    container_spec {
      image = docker_image.caddy.image_id
      env = {
        CADDY_DOCKER_MODE = "swarm"
        DOCKER_HOST = "unix:///var/run/docker.sock"
        CADDY_INGRESS_NETWORK = docker_network.caddy.name
        CADDY_ACME_EMAIL = "[email protected]",
        CADDY_STORAGE = "/data/caddy"
      }
      mounts {
        type   = "bind"
        target = "/var/run/docker.sock"
        source = "/var/run/docker.sock"
      }
    }
  }
  endpoint_spec {
    ports {
      target_port    = "80"
      published_port = "80"
    }
    ports {
      target_port    = "443"
      published_port = "443"
    }
  }
}

resource "docker_service" "app" {
  name = "app"
  task_spec {
    force_update = 0
    networks_advanced {
      name = docker_network.caddy.name
    }
    container_spec {
      image = docker_image.nginx.image_id
      labels {
        label = "caddy"
        value = "architech.bg"
      }
      labels {
        label = "caddy.reverse_proxy"
        value = "{{upstreams 80}}"
      }
      labels {
        label = "caddy.tls"
        value = "internal"
      }
    }
  }
  mode {
    replicated {
      replicas = 2
    }
  }
}

Expected Behaviour

Second terraform apply must not recreate services.

Actual Behaviour

Second terraform apply recreates services.

Steps to Reproduce

  1. terraform apply

OlegKunitsyn avatar Sep 23 '24 16:09 OlegKunitsyn