Fix builder, add support for passing debug_path into configs so that they can be grouped into services
This commit is contained in:
parent
51a89a72ac
commit
5224b46ccf
7 changed files with 59 additions and 35 deletions
docker
|
@ -1,6 +1,14 @@
|
|||
resource "local_file" "config" {
|
||||
count = var.debug ? 1 : 0
|
||||
content = var.value
|
||||
filename = "${path.root}/.debug/docker/${var.stack_name}/configs/${local.file_name}"
|
||||
filename = "${local.debug_path}/${local.file_name}"
|
||||
file_permission = "0600"
|
||||
}
|
||||
variable "debug_path" {
|
||||
type = string
|
||||
description = "Path to write debug files to"
|
||||
default = null
|
||||
}
|
||||
locals {
|
||||
debug_path = var.debug_path != null ? var.debug_path : "${path.root}/.debug/docker/configs/${var.stack_name}"
|
||||
}
|
|
@ -4,4 +4,5 @@ module "config" {
|
|||
stack_name = var.stack_name
|
||||
name = each.key
|
||||
value = each.value
|
||||
debug_path = "${local.debug_path}/configs"
|
||||
}
|
|
@ -1,10 +1,19 @@
|
|||
|
||||
variable "debug_path" {
|
||||
type = string
|
||||
description = "Path to write debug files to"
|
||||
default = null
|
||||
}
|
||||
locals {
|
||||
debug_path = var.debug_path != null ? var.debug_path : "${path.root}/.debug/docker/services/${var.stack_name}/${var.service_name}"
|
||||
}
|
||||
resource "local_file" "debug" {
|
||||
filename = "${path.root}/.debug/docker/${var.service_name}/service.json"
|
||||
filename = "${local.debug_path}/service.json"
|
||||
file_permission = "0600"
|
||||
content = nonsensitive(jsonencode({
|
||||
name = local.service_name
|
||||
stack = var.stack_name
|
||||
#image = local.image
|
||||
image = local.image_fully_qualified
|
||||
build = var.build
|
||||
networks = var.networks
|
||||
ports = var.ports
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
locals {
|
||||
is_build = var.build != null
|
||||
// strip off the tag
|
||||
image_name = split(":", var.image)[0]
|
||||
|
||||
source_files = local.is_build ? fileset(var.build.context, "**") : []
|
||||
|
@ -14,7 +13,7 @@ locals {
|
|||
]
|
||||
}
|
||||
resource "random_pet" "build" {
|
||||
count = local.is_build ? 1 : 0
|
||||
for_each = local.is_build ? { "build" = {} } : {}
|
||||
keepers = {
|
||||
image_name = local.image_name
|
||||
build_context = var.build.context
|
||||
|
@ -22,26 +21,31 @@ resource "random_pet" "build" {
|
|||
target = var.build.target
|
||||
tags = jsonencode(local.tags)
|
||||
hash = local.image_context_hash
|
||||
args = jsonencode(var.build.args)
|
||||
dockerfile = var.build.dockerfile
|
||||
}
|
||||
}
|
||||
# MB: This is a hack to allow replace_triggered_by on a resource that may or may not exist.
|
||||
resource "terraform_data" "conditional_build" {
|
||||
input = try(jsonencode(random_pet.build["build"].keepers), null)
|
||||
}
|
||||
// Do the build
|
||||
resource "docker_image" "build" {
|
||||
count = local.is_build ? 1 : 0
|
||||
for_each = local.is_build ? { "build" = {} } : {}
|
||||
name = var.image
|
||||
|
||||
force_remove = false
|
||||
build {
|
||||
# We are reading these variables via the random_pet entity to ensure that the build is triggered when changes happen
|
||||
context = random_pet.build[0].keepers.build_context
|
||||
tag = jsondecode(random_pet.build[0].keepers.tags)
|
||||
target = random_pet.build[0].keepers.target
|
||||
context = random_pet.build["build"].keepers.build_context
|
||||
tag = jsondecode(random_pet.build["build"].keepers.tags)
|
||||
target = random_pet.build["build"].keepers.target
|
||||
build_args = jsondecode(random_pet.build["build"].keepers.args)
|
||||
dockerfile = random_pet.build["build"].keepers.dockerfile
|
||||
remove = false
|
||||
suppress_output = false
|
||||
}
|
||||
lifecycle {
|
||||
ignore_changes = [
|
||||
build,
|
||||
]
|
||||
replace_triggered_by = [random_pet.build, ]
|
||||
replace_triggered_by = [terraform_data.conditional_build, ]
|
||||
create_before_destroy = true
|
||||
}
|
||||
}
|
||||
|
@ -49,11 +53,11 @@ resource "docker_image" "build" {
|
|||
// Push it to the registry
|
||||
resource "docker_registry_image" "build" {
|
||||
depends_on = [docker_image.build]
|
||||
count = local.is_build ? 1 : 0
|
||||
name = docker_image.build[0].name
|
||||
for_each = local.is_build ? { "build" = {} } : {}
|
||||
name = docker_image.build["build"].name
|
||||
keep_remotely = true
|
||||
lifecycle {
|
||||
replace_triggered_by = [random_pet.build]
|
||||
replace_triggered_by = [terraform_data.conditional_build]
|
||||
}
|
||||
}
|
||||
resource "docker_registry_image" "tags" {
|
||||
|
@ -62,7 +66,7 @@ resource "docker_registry_image" "tags" {
|
|||
name = each.value
|
||||
keep_remotely = true
|
||||
lifecycle {
|
||||
replace_triggered_by = [random_pet.build]
|
||||
replace_triggered_by = [terraform_data.conditional_build]
|
||||
ignore_changes = [
|
||||
name,
|
||||
]
|
||||
|
|
|
@ -2,18 +2,18 @@ locals {
|
|||
is_mirror = var.mirror != null
|
||||
}
|
||||
resource "docker_image" "source" {
|
||||
count = local.is_mirror ? 1 : 0
|
||||
for_each = local.is_mirror ? { "mirror" = {} } : {}
|
||||
name = data.docker_registry_image.image[0].name
|
||||
pull_triggers = [data.docker_registry_image.image[0].sha256_digest]
|
||||
force_remove = false
|
||||
}
|
||||
resource "docker_tag" "retagged" {
|
||||
count = local.is_mirror ? 1 : 0
|
||||
for_each = local.is_mirror ? { "mirror" = {} } : {}
|
||||
source_image = docker_image.source[0].name
|
||||
target_image = var.mirror
|
||||
}
|
||||
resource "docker_registry_image" "mirror" {
|
||||
count = local.is_mirror ? 1 : 0
|
||||
for_each = local.is_mirror ? { "mirror" = {} } : {}
|
||||
depends_on = [docker_tag.retagged[0]]
|
||||
name = docker_tag.retagged[0].target_image
|
||||
keep_remotely = true
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
data "docker_registry_image" "image" {
|
||||
count = local.is_build == false ? 1 : 0
|
||||
for_each = !local.is_build ? { "default" = {} } : {}
|
||||
name = var.image
|
||||
}
|
||||
locals {
|
||||
|
@ -11,20 +11,20 @@ locals {
|
|||
# Calculate the docker image to use
|
||||
image = (
|
||||
local.is_build
|
||||
? docker_image.build[0].name
|
||||
? docker_image.build["build"].name
|
||||
: (
|
||||
local.is_mirror
|
||||
? docker_registry_image.mirror[0].name
|
||||
: data.docker_registry_image.image[0].name
|
||||
? docker_registry_image.mirror["mirror"].name
|
||||
: data.docker_registry_image.image["default"].name
|
||||
)
|
||||
)
|
||||
image_fully_qualified = (
|
||||
local.is_build
|
||||
? docker_image.build[0].name
|
||||
? "${docker_registry_image.build["build"].name}@${docker_registry_image.build["build"].sha256_digest}"
|
||||
: (
|
||||
local.is_mirror
|
||||
? "${docker_registry_image.mirror[0].name}@${docker_registry_image.mirror[0].sha256_digest}"
|
||||
: "${data.docker_registry_image.image[0].name}@${data.docker_registry_image.image[0].sha256_digest}"
|
||||
? "${docker_registry_image.mirror["mirror"].name}@${docker_registry_image.mirror["mirror"].sha256_digest}"
|
||||
: "${data.docker_registry_image.image["default"].name}@${data.docker_registry_image.image["default"].sha256_digest}"
|
||||
)
|
||||
)
|
||||
}
|
|
@ -2,6 +2,8 @@ resource "docker_service" "instance" {
|
|||
# The name of the service is the stack name and the service name combined
|
||||
name = local.service_name
|
||||
|
||||
#depends_on = [terraform_data.conditional_build_hack["build"]]
|
||||
|
||||
# Define the task spec
|
||||
task_spec {
|
||||
container_spec {
|
||||
|
@ -188,6 +190,6 @@ resource "docker_service" "instance" {
|
|||
lifecycle {
|
||||
# Help prevent "this service already exists" irritations
|
||||
create_before_destroy = false
|
||||
replace_triggered_by = [docker_image.build[0].id]
|
||||
#replace_triggered_by = [terraform_data.conditional_build_hack["build"]]
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue