-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmain.tf
132 lines (98 loc) · 3.05 KB
/
main.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
locals {
name = var.name
prefix = var.prefix
source_dir = var.source_dir
output_dir = var.output_dir
output_source_file = join("/", [local.output_dir, "${local.prefix}${local.name}.arhive-builder.source.zip"])
output_build_dir = join("/", [local.output_dir, "${local.prefix}${local.name}.archive-builder.build"])
output_build_file = join("/", [local.output_dir, "${local.prefix}${local.name}.archive-builder.build.zip"])
command = var.command
container = var.container
local_command_count = local.command == "" ? 0 : (local.container == "" ? 1 : 0)
docker_command_count = local.command == "" ? 0 : (local.container == "" ? 0 : 1)
with_command = local.local_command_count + local.docker_command_count > 0
tags = var.tags
}
data "archive_file" "source" {
type = "zip"
source_dir = local.source_dir
output_path = local.output_source_file
}
resource "null_resource" "local_command" {
count = local.local_command_count
triggers = {
output_build_file_exists = fileexists(local.output_build_file)
output_build_file = local.output_build_file
output_build_dir = local.output_build_dir
command = local.command
source_archive_file_hash = data.archive_file.source.output_base64sha256
}
provisioner "local-exec" {
environment = {
SOURCE_DIR = local.source_dir
OUTPUT_COMMAND_BUILD_DIR = local.output_build_dir
}
command = <<EOF
rm -rf "$$OUTPUT_COMMAND_BUILD_DIR"
cp -rT "$SOURCE_DIR" "$OUTPUT_COMMAND_BUILD_DIR"
EOF
}
provisioner "local-exec" {
working_dir = local.output_build_dir
environment = {
COMMAND = local.command
}
command = <<EOF
/bin/sh -c "$COMMAND"
EOF
}
}
data "archive_file" "local_command" {
count = local.local_command_count
type = "zip"
source_dir = local.output_build_dir
output_path = local.output_build_file
depends_on = [
null_resource.local_command
]
}
resource "null_resource" "docker_command" {
count = local.docker_command_count
triggers = {
output_build_file_exists = fileexists(local.output_build_file)
output_build_file = local.output_build_file
output_build_dir = local.output_build_dir
command = local.command
container = local.container
source_archive_file_hash = data.archive_file.source.output_base64sha256
}
provisioner "local-exec" {
environment = {
SOURCE_DIR = local.source_dir
OUTPUT_COMMAND_BUILD_DIR = local.output_build_dir
}
command = <<EOF
rm -rf "$$OUTPUT_COMMAND_BUILD_DIR"
cp -rT "$SOURCE_DIR" "$OUTPUT_COMMAND_BUILD_DIR"
EOF
}
provisioner "local-exec" {
working_dir = local.output_build_dir
environment = {
CONTAINER = local.container
COMMAND = local.command
}
command = <<EOF
docker run -v "$PWD":/var/task "$CONTAINER" /bin/sh -c "$COMMAND"
EOF
}
}
data "archive_file" "docker_command" {
count = local.docker_command_count
type = "zip"
source_dir = local.output_build_dir
output_path = local.output_build_file
depends_on = [
null_resource.docker_command
]
}