@@ -7,11 +7,15 @@ terraform {
7
7
docker = {
8
8
source = " kreuzwerker/docker"
9
9
}
10
+ envbuilder = {
11
+ source = " coder/envbuilder"
12
+ }
10
13
}
11
14
}
12
15
13
16
provider "coder" {}
14
17
provider "docker" {}
18
+ provider "envbuilder" {}
15
19
data "coder_provisioner" "me" {}
16
20
data "coder_workspace" "me" {}
17
21
data "coder_workspace_owner" "me" {}
@@ -145,9 +149,18 @@ resource "docker_volume" "workspaces" {
145
149
}
146
150
}
147
151
152
+ # Check for the presence of a prebuilt image in the cache repo
153
+ # that we can use instead.
154
+ resource "envbuilder_cached_image" "cached" {
155
+ count = data. coder_workspace . me . start_count
156
+ builder_image = local. devcontainer_builder_image
157
+ git_url = local. repo_url
158
+ cache_repo = var. cache_repo
159
+ }
160
+
148
161
resource "docker_container" "workspace" {
149
162
count = data. coder_workspace . me . start_count
150
- image = local . devcontainer_builder_image
163
+ image = envbuilder_cached_image . cached . 0 . image
151
164
# Uses lower() to avoid Docker restriction on container names.
152
165
name = " coder-${ data . coder_workspace_owner . me . name } -${ lower (data. coder_workspace . me . name )} "
153
166
# Hostname makes the shell more user friendly: coder@my-workspace:~$
@@ -161,7 +174,10 @@ resource "docker_container" "workspace" {
161
174
" ENVBUILDER_FALLBACK_IMAGE=${ data . coder_parameter . fallback_image . value } " ,
162
175
" ENVBUILDER_CACHE_REPO=${ var . cache_repo } " ,
163
176
" ENVBUILDER_DOCKER_CONFIG_BASE64=${ try (data. local_sensitive_file . cache_repo_dockerconfigjson [0 ]. content_base64 , " " )} " ,
177
+ " ENVBUILDER_PUSH_IMAGE=${ var . cache_repo != " " ? " true" : " " } " ,
178
+ # "ENVBUILDER_INSECURE=true", # Uncomment if testing with a local registry.
164
179
]
180
+ # network_mode = "host" # Uncomment if testing with a local registry.
165
181
host {
166
182
host = " host.docker.internal"
167
183
ip = " host-gateway"
0 commit comments