Skip to content

Commit 2c5bbd9

Browse files
authored
Simplify cloud-compose runtime config (#17)
1 parent 41a5bde commit 2c5bbd9

36 files changed

Lines changed: 213 additions & 413 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

ansible/roles/cloud_compose/defaults/main.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ cloud_compose_home: /home/cloud-compose
1212
cloud_compose_data_dir: /mnt/disks/data
1313
cloud_compose_volumes_dir: /mnt/disks/volumes
1414

15-
cloud_compose_docker_compose_version: v5.2.0
15+
cloud_compose_docker_compose_version: v5.3.0
1616
cloud_compose_docker_buildx_version: v0.35.0
1717
cloud_compose_sitectl_version: latest
1818

@@ -45,12 +45,12 @@ cloud_compose_default_init:
4545
- 'sitectl config set-context "${SITECTL_CONTEXT_NAME}" --type local --project-dir "${DOCKER_COMPOSE_DIR}" --site "${CLOUD_COMPOSE_INSTANCE_NAME}" --plugin "${SITECTL_PLUGIN}" --environment "${SITECTL_ENVIRONMENT}" --project-name "${CLOUD_COMPOSE_INSTANCE_NAME}" --compose-project-name "${COMPOSE_PROJECT_NAME}" --docker-socket /var/run/docker.sock --env-file .env --default'
4646
cloud_compose_default_up:
4747
- 'sitectl compose --context "${SITECTL_CONTEXT_NAME}" up -d --remove-orphans'
48-
- 'sitectl healthcheck --context "${SITECTL_CONTEXT_NAME}" --persist --timeout "${SITECTL_HEALTHCHECK_TIMEOUT}" --interval "${SITECTL_HEALTHCHECK_INTERVAL}"'
48+
- 'sitectl healthcheck --context "${SITECTL_CONTEXT_NAME}" --persist'
4949
- 'if [ "${SITECTL_ENVIRONMENT}" != "production" ]; then sitectl verify --context "${SITECTL_CONTEXT_NAME}" ${SITECTL_VERIFY_ARGS:-}; fi'
5050
cloud_compose_default_down:
5151
- 'sitectl compose --context "${SITECTL_CONTEXT_NAME}" down'
5252
cloud_compose_default_rollout:
5353
- 'TARGET_REF="${GIT_REF:-${GIT_BRANCH:-${DOCKER_COMPOSE_BRANCH:-main}}}"'
5454
- 'if [ -x ./scripts/rollout.sh ]; then ./scripts/rollout.sh; else sitectl deploy --context "${SITECTL_CONTEXT_NAME}" --branch "$TARGET_REF"; fi'
55-
- 'sitectl healthcheck --context "${SITECTL_CONTEXT_NAME}" --persist --timeout "${SITECTL_HEALTHCHECK_TIMEOUT}" --interval "${SITECTL_HEALTHCHECK_INTERVAL}"'
55+
- 'sitectl healthcheck --context "${SITECTL_CONTEXT_NAME}" --persist'
5656
- 'if [ "${SITECTL_ENVIRONMENT}" != "production" ]; then sitectl verify --context "${SITECTL_CONTEXT_NAME}" ${SITECTL_VERIFY_ARGS:-}; fi'

ansible/roles/cloud_compose/tasks/main.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@
3737
_cc_sitectl_packages: "{{ (['sitectl'] + (_cc_sitectl.packages | default(_cc_template.packages, true))) | unique }}"
3838
_cc_sitectl_environment: "{{ _cc_sitectl.environment | default('production', true) }}"
3939
_cc_sitectl_context_name: "{{ _cc_sitectl.context_name | default(cloud_compose_name, true) }}"
40-
_cc_healthcheck_timeout: "{{ _cc_sitectl.healthcheck_timeout | default('20m', true) }}"
41-
_cc_healthcheck_interval: "{{ _cc_sitectl.healthcheck_interval | default('15s', true) }}"
4240
_cc_verify_args: "{{ _cc_sitectl.verify_args | default([], true) }}"
4341
_cc_init_commands: "{{ _cc_compose.init | default(cloud_compose_default_init, true) }}"
4442
_cc_up_commands: "{{ _cc_compose.up | default(cloud_compose_default_up, true) }}"
@@ -157,8 +155,6 @@
157155
SITECTL_CONTEXT_NAME: "{{ _cc_primary_project.sitectl_context_name }}"
158156
SITECTL_PLUGIN: "{{ _cc_primary_project.sitectl_plugin }}"
159157
SITECTL_ENVIRONMENT: "{{ _cc_primary_project.sitectl_environment }}"
160-
SITECTL_HEALTHCHECK_TIMEOUT: "{{ _cc_healthcheck_timeout }}"
161-
SITECTL_HEALTHCHECK_INTERVAL: "{{ _cc_healthcheck_interval }}"
162158
SITECTL_VERIFY_ARGS: "{{ _cc_primary_project.sitectl_verify_args | join(' ') }}"
163159
POWER_MANAGEMENT_ENABLED: "false"
164160
COMPOSE_PROFILES: ""

ci/cloud-smoke.sh

Lines changed: 42 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -148,36 +148,61 @@ smoke_run_id() {
148148
printf '%s\n' "${CLOUD_COMPOSE_SMOKE_RUN_ID:-${GITHUB_RUN_ID:-}}"
149149
}
150150

151-
api_delete() {
152-
local provider="$1" path="$2" token
151+
api_request() {
152+
local provider="$1" method="$2" path="$3"
153+
local base_url body http_code response token token_name
153154

154155
case "$provider" in
155156
digitalocean)
156157
token="${DIGITALOCEAN_TOKEN:-}"
157-
curl -fsS -X DELETE -H "Authorization: Bearer ${token}" "https://api.digitalocean.com/v2${path}" >/dev/null
158+
token_name="DIGITALOCEAN_TOKEN"
159+
base_url="https://api.digitalocean.com/v2"
158160
;;
159161
linode)
160162
token="${LINODE_TOKEN:-}"
161-
curl -fsS -X DELETE -H "Authorization: Bearer ${token}" "https://api.linode.com/v4${path}" >/dev/null
163+
token_name="LINODE_TOKEN"
164+
base_url="https://api.linode.com/v4"
162165
;;
163166
esac
164-
}
165167

166-
api_get() {
167-
local provider="$1" path="$2" token
168+
if response="$(curl -sS -X "$method" -H "Authorization: Bearer ${token}" -w $'\n%{http_code}' "${base_url}${path}")"; then
169+
http_code="${response##*$'\n'}"
170+
body="${response%$'\n'$http_code}"
171+
else
172+
echo "${provider} API request failed for ${method} ${path}; check ${token_name} and network access." >&2
173+
return 1
174+
fi
168175

169-
case "$provider" in
170-
digitalocean)
171-
token="${DIGITALOCEAN_TOKEN:-}"
172-
curl -fsS -H "Authorization: Bearer ${token}" "https://api.digitalocean.com/v2${path}"
176+
case "$http_code" in
177+
2??)
178+
printf '%s' "$body"
173179
;;
174-
linode)
175-
token="${LINODE_TOKEN:-}"
176-
curl -fsS -H "Authorization: Bearer ${token}" "https://api.linode.com/v4${path}"
180+
401)
181+
echo "${provider} API rejected ${token_name} with HTTP 401 for ${method} ${path}; verify the GitHub secret is current and valid for this provider." >&2
182+
return 22
183+
;;
184+
403)
185+
echo "${provider} API rejected ${token_name} with HTTP 403 for ${method} ${path}; verify the token has the permissions required by smoke cleanup and Terraform." >&2
186+
return 22
187+
;;
188+
*)
189+
echo "${provider} API returned HTTP ${http_code} for ${method} ${path}." >&2
190+
if [[ -n "$body" ]]; then
191+
printf '%s\n' "$body" >&2
192+
fi
193+
return 22
177194
;;
178195
esac
179196
}
180197

198+
api_delete() {
199+
api_request "$1" DELETE "$2" >/dev/null
200+
}
201+
202+
api_get() {
203+
api_request "$1" GET "$2"
204+
}
205+
181206
gcp_region() {
182207
printf '%s\n' "${GCLOUD_REGION:-us-east5}"
183208
}
@@ -615,36 +640,30 @@ configure_sitectl_context() {
615640

616641
run_healthcheck() {
617642
local home_dir="$1" key_path="$2" output_json="$3"
618-
local provider context timeout interval
643+
local provider context
619644

620645
provider="$(jq -r '.provider' "$output_json")"
621646
context="$(jq -r '.context_name' "$output_json")"
622-
timeout="$(jq -r '.healthcheck_timeout' "$output_json")"
623-
interval="$(jq -r '.healthcheck_interval' "$output_json")"
624647

625648
if [[ "$provider" == "gcp" ]]; then
626-
local host port user quoted_context quoted_timeout quoted_interval
649+
local host port user quoted_context
627650

628651
host="$(jq -r '.host' "$output_json")"
629652
port="$(jq -r '.ssh_port' "$output_json")"
630653
user="$(jq -r '.ssh_user' "$output_json")"
631654
quoted_context="$(shell_quote "$context")"
632-
quoted_timeout="$(shell_quote "$timeout")"
633-
quoted_interval="$(shell_quote "$interval")"
634655

635656
ssh_cmd "$home_dir" "$key_path" "$host" "$port" "$user" "bash -lc 'set -euo pipefail
636657
export HOME=/home/cloud-compose
637658
source /home/cloud-compose/profile.sh
638-
exec sitectl healthcheck --context ${quoted_context} --persist --timeout ${quoted_timeout} --interval ${quoted_interval} --format table
659+
exec sitectl healthcheck --context ${quoted_context} --persist --format table
639660
'"
640661
return
641662
fi
642663

643664
HOME="$home_dir" sitectl healthcheck \
644665
--context "$context" \
645666
--persist \
646-
--timeout "$timeout" \
647-
--interval "$interval" \
648667
--format table
649668
}
650669

ci/config-management-cloud-smoke-inner.sh

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ set -euo pipefail
99
: "${SMOKE_TEMPLATE:?}"
1010
: "${SMOKE_ENVIRONMENT:?}"
1111
: "${SMOKE_PROJECT_DIR:?}"
12-
: "${SMOKE_HEALTHCHECK_TIMEOUT:?}"
13-
: "${SMOKE_HEALTHCHECK_INTERVAL:?}"
1412

1513
apt-get update >/tmp/cloud-compose-apt-update.log
1614
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
@@ -68,8 +66,6 @@ all:
6866
project_dir: ${SMOKE_PROJECT_DIR}
6967
sitectl:
7068
environment: ${SMOKE_ENVIRONMENT}
71-
healthcheck_timeout: ${SMOKE_HEALTHCHECK_TIMEOUT}
72-
healthcheck_interval: ${SMOKE_HEALTHCHECK_INTERVAL}
7369
EOF
7470

7571
ansible-playbook \
@@ -87,7 +83,7 @@ deploy_salt() {
8783
"rm -rf /srv/cloud-compose && mkdir -p /srv/cloud-compose && tar -xzf - -C /srv/cloud-compose"
8884

8985
ssh "${ssh_opts[@]}" "$ssh_target" \
90-
"SMOKE_NAME=${SMOKE_NAME} SMOKE_TEMPLATE=${SMOKE_TEMPLATE} SMOKE_ENVIRONMENT=${SMOKE_ENVIRONMENT} SMOKE_PROJECT_DIR=${SMOKE_PROJECT_DIR} SMOKE_HEALTHCHECK_TIMEOUT=${SMOKE_HEALTHCHECK_TIMEOUT} SMOKE_HEALTHCHECK_INTERVAL=${SMOKE_HEALTHCHECK_INTERVAL} bash -s" <<'REMOTE'
86+
"SMOKE_NAME=${SMOKE_NAME} SMOKE_TEMPLATE=${SMOKE_TEMPLATE} SMOKE_ENVIRONMENT=${SMOKE_ENVIRONMENT} SMOKE_PROJECT_DIR=${SMOKE_PROJECT_DIR} bash -s" <<'REMOTE'
9187
set -euo pipefail
9288
9389
export DEBIAN_FRONTEND=noninteractive
@@ -138,8 +134,6 @@ cloud_compose:
138134
project_dir: ${SMOKE_PROJECT_DIR}
139135
sitectl:
140136
environment: ${SMOKE_ENVIRONMENT}
141-
healthcheck_timeout: ${SMOKE_HEALTHCHECK_TIMEOUT}
142-
healthcheck_interval: ${SMOKE_HEALTHCHECK_INTERVAL}
143137
EOF
144138
145139
/opt/cloud-compose-salt-smoke/bin/salt-call \
@@ -158,7 +152,7 @@ REMOTE
158152

159153
verify_remote() {
160154
ssh "${ssh_opts[@]}" "$ssh_target" \
161-
"SMOKE_NAME=${SMOKE_NAME} SMOKE_TEMPLATE=${SMOKE_TEMPLATE} SMOKE_ENVIRONMENT=${SMOKE_ENVIRONMENT} SMOKE_PROJECT_DIR=${SMOKE_PROJECT_DIR} SMOKE_HEALTHCHECK_TIMEOUT=${SMOKE_HEALTHCHECK_TIMEOUT} SMOKE_HEALTHCHECK_INTERVAL=${SMOKE_HEALTHCHECK_INTERVAL} bash -s" <<'REMOTE'
155+
"SMOKE_NAME=${SMOKE_NAME} SMOKE_TEMPLATE=${SMOKE_TEMPLATE} SMOKE_ENVIRONMENT=${SMOKE_ENVIRONMENT} SMOKE_PROJECT_DIR=${SMOKE_PROJECT_DIR} bash -s" <<'REMOTE'
162156
set -euo pipefail
163157
164158
test -x /home/cloud-compose/init
@@ -200,7 +194,7 @@ PY
200194
test -d "$SMOKE_PROJECT_DIR/.git"
201195
systemctl is-active --quiet cloud-compose
202196
runuser -u cloud-compose -- env HOME=/home/cloud-compose bash -lc \
203-
"source /home/cloud-compose/profile.sh && sitectl healthcheck --context \"${SMOKE_NAME}\" --persist --timeout \"${SMOKE_HEALTHCHECK_TIMEOUT}\" --interval \"${SMOKE_HEALTHCHECK_INTERVAL}\" --format table"
197+
"source /home/cloud-compose/profile.sh && sitectl healthcheck --context \"${SMOKE_NAME}\" --persist --format table"
204198
REMOTE
205199
}
206200

ci/config-management-cloud-smoke.sh

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -126,14 +126,46 @@ ensure_key() {
126126
chmod 0600 "$key_path"
127127
}
128128

129+
api_request() {
130+
local method="$1" path="$2"
131+
local body http_code response
132+
133+
if response="$(curl -sS -X "$method" -H "Authorization: Bearer ${LINODE_TOKEN}" -w $'\n%{http_code}' "https://api.linode.com/v4${path}")"; then
134+
http_code="${response##*$'\n'}"
135+
body="${response%$'\n'$http_code}"
136+
else
137+
echo "linode API request failed for ${method} ${path}; check LINODE_TOKEN and network access." >&2
138+
return 1
139+
fi
140+
141+
case "$http_code" in
142+
2??)
143+
printf '%s' "$body"
144+
;;
145+
401)
146+
echo "linode API rejected LINODE_TOKEN with HTTP 401 for ${method} ${path}; verify the GitHub secret is current and valid for Linode." >&2
147+
return 22
148+
;;
149+
403)
150+
echo "linode API rejected LINODE_TOKEN with HTTP 403 for ${method} ${path}; verify the token has the permissions required by smoke cleanup and Terraform." >&2
151+
return 22
152+
;;
153+
*)
154+
echo "linode API returned HTTP ${http_code} for ${method} ${path}." >&2
155+
if [[ -n "$body" ]]; then
156+
printf '%s\n' "$body" >&2
157+
fi
158+
return 22
159+
;;
160+
esac
161+
}
162+
129163
api_get() {
130-
local path="$1"
131-
curl -fsS -H "Authorization: Bearer ${LINODE_TOKEN}" "https://api.linode.com/v4${path}"
164+
api_request GET "$1"
132165
}
133166

134167
api_delete() {
135-
local path="$1"
136-
curl -fsS -X DELETE -H "Authorization: Bearer ${LINODE_TOKEN}" "https://api.linode.com/v4${path}" >/dev/null
168+
api_request DELETE "$1" >/dev/null
137169
}
138170

139171
delete_ids() {
@@ -275,16 +307,14 @@ target_var_args() {
275307

276308
deploy_config_management() {
277309
local target="$1" key_path="$2" output_json="$3"
278-
local method host name template environment project_dir timeout interval image key_b64
310+
local method host name template environment project_dir image key_b64
279311

280312
method="$(jq -r '.method' "$output_json")"
281313
host="$(jq -r '.host' "$output_json")"
282314
name="$(jq -r '.cloud_compose_name' "$output_json")"
283315
template="$(jq -r '.app' "$output_json")"
284316
environment="$(jq -r '.environment' "$output_json")"
285317
project_dir="$(jq -r '.project_dir' "$output_json")"
286-
timeout="$(jq -r '.healthcheck_timeout' "$output_json")"
287-
interval="$(jq -r '.healthcheck_interval' "$output_json")"
288318
image="${CLOUD_COMPOSE_CONFIG_MANAGEMENT_IMAGE:-python:3.11-slim}"
289319
key_b64="$(base64 <"$key_path" | tr -d '\n')"
290320

@@ -303,8 +333,6 @@ deploy_config_management() {
303333
--env "SMOKE_TEMPLATE=${template}" \
304334
--env "SMOKE_ENVIRONMENT=${environment}" \
305335
--env "SMOKE_PROJECT_DIR=${project_dir}" \
306-
--env "SMOKE_HEALTHCHECK_TIMEOUT=${timeout}" \
307-
--env "SMOKE_HEALTHCHECK_INTERVAL=${interval}" \
308336
--tmpfs /run \
309337
--tmpfs /tmp \
310338
"$image" \

docs/rollout.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ module "site" {
2525
docker_compose_rollout = [
2626
"TARGET_REF=\"$${GIT_REF:-$${GIT_BRANCH:-$${DOCKER_COMPOSE_BRANCH:-main}}}\"",
2727
"if [ -x ./scripts/rollout.sh ]; then ./scripts/rollout.sh; else sitectl deploy --context \"$${SITECTL_CONTEXT_NAME}\" --branch \"$TARGET_REF\"; fi",
28-
"sitectl healthcheck --context \"$${SITECTL_CONTEXT_NAME}\" --persist --timeout \"$${SITECTL_HEALTHCHECK_TIMEOUT}\" --interval \"$${SITECTL_HEALTHCHECK_INTERVAL}\"",
28+
"sitectl healthcheck --context \"$${SITECTL_CONTEXT_NAME}\" --persist",
2929
"if [ \"$${SITECTL_ENVIRONMENT}\" != \"production\" ]; then sitectl verify --context \"$${SITECTL_CONTEXT_NAME}\" $${SITECTL_VERIFY_ARGS:-}; fi",
3030
]
3131
}

main.tf

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -116,24 +116,19 @@ module "gcp" {
116116
docker_compose_down = local.compose.down
117117
docker_compose_rollout = local.compose.rollout
118118

119-
sitectl_packages = local.sitectl.packages
120-
sitectl_version = local.sitectl.version
121-
sitectl_context_name = local.sitectl.context_name
122-
sitectl_plugin = local.sitectl.plugin
123-
sitectl_environment = local.sitectl.environment
124-
sitectl_healthcheck_timeout = local.sitectl.healthcheck_timeout
125-
sitectl_healthcheck_interval = local.sitectl.healthcheck_interval
126-
sitectl_verify_args = local.sitectl.verify_args
119+
sitectl_packages = local.sitectl.packages
120+
sitectl_version = local.sitectl.version
121+
sitectl_context_name = local.sitectl.context_name
122+
sitectl_plugin = local.sitectl.plugin
123+
sitectl_environment = local.sitectl.environment
124+
sitectl_verify_args = local.sitectl.verify_args
127125

128126
docker_compose_version = local.docker.compose_version
129127
docker_buildx_version = local.docker.buildx_version
130128

131129
libops_managed_runtime_enabled = local.managed.enabled
132130
libops_internal_services_enabled = local.managed.internal_services_enabled
133131
libops_internal_services_auto_update = local.managed.internal_services_auto_update
134-
libops_lightsout_image = local.managed.lightsout_image
135-
libops_cap_image = local.managed.cap_image
136-
libops_cadvisor_image = local.managed.cadvisor_image
137132
libops_managed_artifacts = local.managed.artifacts
138133

139134
allowed_ips = local.gcp_network.power_button_allowed_ips

modules/digitalocean/main.tf

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,14 @@ module "runtime" {
3434
docker_compose_down = local.compose.down
3535
docker_compose_rollout = local.compose.rollout
3636

37-
sitectl_packages = local.sitectl.packages
38-
sitectl_version = local.sitectl.version
39-
sitectl_context_name = local.sitectl.context_name
40-
sitectl_plugin = local.sitectl.plugin
41-
sitectl_environment = local.sitectl.environment
42-
sitectl_healthcheck_timeout = local.sitectl.healthcheck_timeout
43-
sitectl_healthcheck_interval = local.sitectl.healthcheck_interval
44-
sitectl_verify_args = local.sitectl.verify_args
45-
docker_compose_version = local.docker.compose_version
46-
docker_buildx_version = local.docker.buildx_version
37+
sitectl_packages = local.sitectl.packages
38+
sitectl_version = local.sitectl.version
39+
sitectl_context_name = local.sitectl.context_name
40+
sitectl_plugin = local.sitectl.plugin
41+
sitectl_environment = local.sitectl.environment
42+
sitectl_verify_args = local.sitectl.verify_args
43+
docker_compose_version = local.docker.compose_version
44+
docker_buildx_version = local.docker.buildx_version
4745

4846
libops_managed_runtime_enabled = local.managed.enabled
4947
libops_internal_services_enabled = local.managed.internal_services_enabled

modules/digitalocean/variables.tf

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -91,32 +91,19 @@ variable "runtime" {
9191
docker_compose_down = optional(list(string))
9292
docker_compose_rollout = optional(list(string))
9393
})), {})
94-
init = optional(list(string), [
95-
"sitectl config set-context \"$${SITECTL_CONTEXT_NAME}\" --type local --project-dir \"$${DOCKER_COMPOSE_DIR}\" --site \"$${CLOUD_COMPOSE_INSTANCE_NAME}\" --plugin \"$${SITECTL_PLUGIN}\" --environment \"$${SITECTL_ENVIRONMENT}\" --project-name \"$${CLOUD_COMPOSE_INSTANCE_NAME}\" --compose-project-name \"$${COMPOSE_PROJECT_NAME}\" --docker-socket /var/run/docker.sock --env-file .env --default"
96-
])
97-
up = optional(list(string), [
98-
"sitectl compose --context \"$${SITECTL_CONTEXT_NAME}\" up -d --remove-orphans",
99-
"sitectl healthcheck --context \"$${SITECTL_CONTEXT_NAME}\" --persist --timeout \"$${SITECTL_HEALTHCHECK_TIMEOUT}\" --interval \"$${SITECTL_HEALTHCHECK_INTERVAL}\"",
100-
"if [ \"$${SITECTL_ENVIRONMENT}\" != \"production\" ]; then sitectl verify --context \"$${SITECTL_CONTEXT_NAME}\" $${SITECTL_VERIFY_ARGS:-}; fi"
101-
])
102-
down = optional(list(string), [
103-
"sitectl compose --context \"$${SITECTL_CONTEXT_NAME}\" down"
104-
])
105-
rollout = optional(list(string), [
106-
"sitectl deploy --context \"$${SITECTL_CONTEXT_NAME}\" --skip-git",
107-
"sitectl healthcheck --context \"$${SITECTL_CONTEXT_NAME}\" --persist --timeout \"$${SITECTL_HEALTHCHECK_TIMEOUT}\" --interval \"$${SITECTL_HEALTHCHECK_INTERVAL}\""
108-
])
94+
init = optional(list(string))
95+
up = optional(list(string))
96+
down = optional(list(string))
97+
rollout = optional(list(string))
10998
}), {})
11099

111100
sitectl = optional(object({
112-
packages = optional(list(string), ["sitectl"])
113-
version = optional(string, "latest")
114-
context_name = optional(string, "")
115-
plugin = optional(string, "core")
116-
environment = optional(string, "production")
117-
healthcheck_timeout = optional(string, "20m")
118-
healthcheck_interval = optional(string, "15s")
119-
verify_args = optional(list(string), [])
101+
packages = optional(list(string), ["sitectl"])
102+
version = optional(string, "latest")
103+
context_name = optional(string, "")
104+
plugin = optional(string, "core")
105+
environment = optional(string, "production")
106+
verify_args = optional(list(string), [])
120107
}), {})
121108

122109
docker = optional(object({

0 commit comments

Comments
 (0)