23 lines
No EOL
39 KiB
JSON
23 lines
No EOL
39 KiB
JSON
{
|
|
"id": "5abf9a18-b706-4005-9421-fd2855621d4f",
|
|
"name": "component_install_stalwart",
|
|
"command": "bash",
|
|
"args": [
|
|
"-c",
|
|
"base64 -d < '/tmp/orchestrator_comp_5abf9a18-b706-4005-9421-fd2855621d4f.tar.gz.b64' > /tmp/stalwart.tar.gz && scp -i '/Users/jesusperezlorenzo/.ssh/htz_ops' /tmp/stalwart.tar.gz 'root@libre-wuji-cp-0:/tmp/' && ssh -i '/Users/jesusperezlorenzo/.ssh/htz_ops' 'root@libre-wuji-cp-0' 'rm -rf /tmp/stalwart && mkdir -p /tmp/stalwart && tar xzf /tmp/stalwart.tar.gz -C /tmp/stalwart && cd /tmp/stalwart && sudo bash -x install-stalwart.sh install ; rc=$?; echo '[debug] leaving /tmp/stalwart and /tmp/stalwart.tar.gz on remote for inspection'; exit $rc' ; rc=$?; rm -f '/tmp/orchestrator_comp_5abf9a18-b706-4005-9421-fd2855621d4f.tar.gz.b64' /tmp/stalwart.tar.gz; exit $rc"
|
|
],
|
|
"dependencies": [],
|
|
"status": "Failed",
|
|
"created_at": "2026-04-22T05:21:57.508063Z",
|
|
"started_at": "2026-04-22T05:21:57.717799Z",
|
|
"completed_at": "2026-04-22T05:22:09.618383Z",
|
|
"output": null,
|
|
"error": "Command execution failed: + set -euo pipefail\n+++ dirname install-stalwart.sh\n++ cd .\n++ pwd\n+ SCRIPT_DIR=/tmp/stalwart\n+ '[' -f /tmp/stalwart/env-stalwart ']'\n+ source /tmp/stalwart/env-stalwart\n++ STALWART_NAMESPACE=mail\n++ STALWART_IMAGE=stalwartlabs/mail-server:v0.11.6\n++ STALWART_NODE=libre-wuji-wrk-0\n++ STALWART_LB_IPAM_IP=49.12.115.133\n++ STALWART_STORAGE_CLASS=hcloud-volumes\n++ STALWART_STORAGE_SIZE=20Gi\n++ STALWART_HOSTNAME=mail.librecloud.online\n++ STALWART_DOMAIN=librecloud.online\n++ STALWART_TLS_SECRET=stalwart-tls\n++ STALWART_CLUSTER_ISSUER=letsencrypt-prod\n++ STALWART_SMTP_PORT=25\n++ STALWART_SUBMISSION_PORT=587\n++ STALWART_SMTPS_PORT=465\n++ STALWART_IMAPS_PORT=993\n++ STALWART_HTTP_PORT=8080\n++ STALWART_DATA_DIR=/var/lib/stalwart\n++ RELAY_HOST=email-smtp.eu-west-1.amazonaws.com\n++ RELAY_PORT=587\n++ KUBECONFIG=/etc/kubernetes/admin.conf\n+ '[' -f /tmp/stalwart/credentials.env ']'\n+ source /tmp/stalwart/credentials.env\n++ RELAY_USERNAME=AKIAWSNYYBNTMV7GA33R\n++ RELAY_PASSWORD=***REDACTED***\n++ ADMIN_PASSWORD=***REDACTED***\n+ STALWART_NAMESPACE=mail\n+ STALWART_IMAGE=stalwartlabs/mail-server:v0.11.6\n+ STALWART_NODE=libre-wuji-wrk-0\n+ STALWART_LB_IPAM_IP=49.12.115.133\n+ STALWART_STORAGE_CLASS=hcloud-volumes\n+ STALWART_STORAGE_SIZE=20Gi\n+ STALWART_HOSTNAME=mail.librecloud.online\n+ STALWART_DOMAIN=librecloud.online\n+ STALWART_TLS_SECRET=stalwart-tls\n+ STALWART_SMTP_PORT=25\n+ STALWART_SUBMISSION_PORT=587\n+ STALWART_SMTPS_PORT=465\n+ STALWART_IMAPS_PORT=993\n+ STALWART_HTTP_PORT=8080\n+ STALWART_DATA_DIR=/var/lib/stalwart\n+ RELAY_HOST=email-smtp.eu-west-1.amazonaws.com\n+ RELAY_PORT=587\n+ KUBECONFIG=/etc/kubernetes/admin.conf\n+ export KUBECONFIG\n+ CMD_TSK=install\n+ case \"$CMD_TSK\" in\n+ _do_install\n+ _require_env STALWART_HOSTNAME\n+ local var=STALWART_HOSTNAME\n+ '[' -z mail.librecloud.online ']'\n+ _require_env STALWART_DOMAIN\n+ local var=STALWART_DOMAIN\n+ '[' -z librecloud.online ']'\n+ _require_env STALWART_NODE\n+ local var=STALWART_NODE\n+ '[' -z libre-wuji-wrk-0 ']'\n+ _require_env STALWART_LB_IPAM_IP\n+ local var=STALWART_LB_IPAM_IP\n+ '[' -z 49.12.115.133 ']'\n+ _require_env RELAY_HOST\n+ local var=RELAY_HOST\n+ '[' -z email-smtp.eu-west-1.amazonaws.com ']'\n+ _apply_plan init\n+ local op=init\n+ local plan=/tmp/stalwart/manifest_plan.json\n+ '[' -f /tmp/stalwart/manifest_plan.json ']'\n+ command -v jq\n+ local count\n++ jq -r --arg op init '.[$op] | length' /tmp/stalwart/manifest_plan.json\n+ count=10\n+ '[' 10 -gt 0 ']'\n+ local i=0\n+ '[' 0 -lt 10 ']'\n+ local step file action skip delay\n++ jq -r --arg op init --argjson i 0 '.[$op][$i]' /tmp/stalwart/manifest_plan.json\n+ step='{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"namespace\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"namespace\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n++ jq -r '.file // \"\"'\n+ file=namespace\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"namespace\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n++ jq -r '.action // \"apply\"'\n+ action=apply\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"namespace\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n++ jq -r '.skip_if_exists // false'\n+ skip=true\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"namespace\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n++ jq -r '.delay // 0'\n+ delay=0\n+ i=1\n+ _plan_run_hooks '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"namespace\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}' pre\n+ local 'step_json={\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"namespace\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}' key=pre\n+ local count\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"namespace\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n++ jq -r --arg k pre '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ case \"$action\" in\n+ '[' -n namespace ']'\n+ local path=/tmp/stalwart/manifests/namespace.yaml\n+ '[' -f /tmp/stalwart/manifests/namespace.yaml ']'\n+ case \"$action\" in\n+ '[' true = true ']'\n+ _kubectl get -f /tmp/stalwart/manifests/namespace.yaml\n+ echo ' [skip] namespace already exists'\n+ _plan_run_hooks '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"namespace\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}' post\n+ local 'step_json={\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"namespace\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}' key=post\n+ local count\n++ jq -r --arg k post '.[$k] | length'\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"namespace\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ continue\n+ '[' 1 -lt 10 ']'\n+ local step file action skip delay\n++ jq -r --arg op init --argjson i 1 '.[$op][$i]' /tmp/stalwart/manifest_plan.json\n+ step='{\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ echo '{\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.file // \"\"'\n+ file=\n++ echo '{\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.action // \"apply\"'\n+ action='create-credentials'\\'''\n++ echo '{\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.skip_if_exists // false'\n+ skip=false\n++ echo '{\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.delay // 0'\n+ delay=0\n+ i=2\n+ _plan_run_hooks '{\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' pre\n+ local 'step_json={\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=pre\n+ local count\n++ echo '{\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --arg k pre '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ case \"$action\" in\n+ _plan_inject_params '{\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ local 'step_json={\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ IFS==\n+ read -r k v\n++ echo '{\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.params // {} | to_entries[] | \"\\(.key)=\\(.value)\"'\n+ local 'method=_method_create-credentials'\\'''\n+ declare -f '_method_create-credentials'\\'''\n+ echo ' [warn] no method for action '\\''create-credentials'\\'''\\'' — skipping'\n+ _plan_clear_params '{\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ local 'step_json={\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ IFS=\n+ read -r k\n++ echo '{\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.params // {} | keys[]'\n+ '[' 0 -le 0 ']'\n+ _plan_run_hooks '{\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' post\n+ local 'step_json={\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=post\n+ local count\n++ echo '{\n \"action\": \"create-credentials'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --arg k post '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ '[' 2 -lt 10 ']'\n+ local step file action skip delay\n++ jq -r --arg op init --argjson i 2 '.[$op][$i]' /tmp/stalwart/manifest_plan.json\n+ step='{\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ echo '{\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.file // \"\"'\n+ file=\n++ echo '{\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.action // \"apply\"'\n+ action='apply-tls-secret'\\'''\n++ echo '{\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.skip_if_exists // false'\n+ skip=false\n++ echo '{\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.delay // 0'\n+ delay=0\n+ i=3\n+ _plan_run_hooks '{\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' pre\n+ local 'step_json={\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=pre\n+ local count\n++ echo '{\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --arg k pre '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ case \"$action\" in\n+ _plan_inject_params '{\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ local 'step_json={\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ IFS==\n+ read -r k v\n++ echo '{\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.params // {} | to_entries[] | \"\\(.key)=\\(.value)\"'\n+ local 'method=_method_apply-tls-secret'\\'''\n+ declare -f '_method_apply-tls-secret'\\'''\n+ echo ' [warn] no method for action '\\''apply-tls-secret'\\'''\\'' — skipping'\n+ _plan_clear_params '{\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ local 'step_json={\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ IFS=\n+ read -r k\n++ echo '{\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.params // {} | keys[]'\n+ '[' 0 -le 0 ']'\n+ _plan_run_hooks '{\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' post\n+ local 'step_json={\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=post\n+ local count\n++ jq -r --arg k post '.[$k] | length'\n++ echo '{\n \"action\": \"apply-tls-secret'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ '[' 3 -lt 10 ']'\n+ local step file action skip delay\n++ jq -r --arg op init --argjson i 3 '.[$op][$i]' /tmp/stalwart/manifest_plan.json\n+ step='{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"pvc\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"pvc\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n++ jq -r '.file // \"\"'\n+ file=pvc\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"pvc\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n++ jq -r '.action // \"apply\"'\n+ action=apply\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"pvc\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n++ jq -r '.skip_if_exists // false'\n+ skip=true\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"pvc\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n++ jq -r '.delay // 0'\n+ delay=0\n+ i=4\n+ _plan_run_hooks '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"pvc\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}' pre\n+ local 'step_json={\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"pvc\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}' key=pre\n+ local count\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"pvc\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n++ jq -r --arg k pre '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ case \"$action\" in\n+ '[' -n pvc ']'\n+ local path=/tmp/stalwart/manifests/pvc.yaml\n+ '[' -f /tmp/stalwart/manifests/pvc.yaml ']'\n+ case \"$action\" in\n+ '[' true = true ']'\n+ _kubectl get -f /tmp/stalwart/manifests/pvc.yaml\n+ echo ' [apply] pvc'\n+ _kubectl apply -f /tmp/stalwart/manifests/pvc.yaml\n+ command -v kubectl\n+ command kubectl apply -f /tmp/stalwart/manifests/pvc.yaml\n+ '[' 0 -le 0 ']'\n+ _plan_run_hooks '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"pvc\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}' post\n+ local 'step_json={\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"pvc\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}' key=post\n+ local count\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"pvc\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": true\n}'\n++ jq -r --arg k post '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ '[' 4 -lt 10 ']'\n+ local step file action skip delay\n++ jq -r --arg op init --argjson i 4 '.[$op][$i]' /tmp/stalwart/manifest_plan.json\n+ step='{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"configmap\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"configmap\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.file // \"\"'\n+ file=configmap\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"configmap\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.action // \"apply\"'\n+ action=apply\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"configmap\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.skip_if_exists // false'\n+ skip=false\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"configmap\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.delay // 0'\n+ delay=0\n+ i=5\n+ _plan_run_hooks '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"configmap\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' pre\n+ local 'step_json={\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"configmap\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=pre\n+ local count\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"configmap\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --arg k pre '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ case \"$action\" in\n+ '[' -n configmap ']'\n+ local path=/tmp/stalwart/manifests/configmap.yaml\n+ '[' -f /tmp/stalwart/manifests/configmap.yaml ']'\n+ case \"$action\" in\n+ '[' false = true ']'\n+ echo ' [apply] configmap'\n+ _kubectl apply -f /tmp/stalwart/manifests/configmap.yaml\n+ command -v kubectl\n+ command kubectl apply -f /tmp/stalwart/manifests/configmap.yaml\n+ '[' 0 -le 0 ']'\n+ _plan_run_hooks '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"configmap\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' post\n+ local 'step_json={\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"configmap\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=post\n+ local count\n++ jq -r --arg k post '.[$k] | length'\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"configmap\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ '[' 5 -lt 10 ']'\n+ local step file action skip delay\n++ jq -r --arg op init --argjson i 5 '.[$op][$i]' /tmp/stalwart/manifest_plan.json\n+ step='{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"deployment\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"deployment\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.file // \"\"'\n+ file=deployment\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"deployment\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n++ jq -r '.action // \"apply\"'\n}'\n+ action=apply\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"deployment\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.skip_if_exists // false'\n+ skip=false\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"deployment\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.delay // 0'\n+ delay=0\n+ i=6\n+ _plan_run_hooks '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"deployment\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' pre\n+ local 'step_json={\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"deployment\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=pre\n+ local count\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"deployment\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --arg k pre '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ case \"$action\" in\n+ '[' -n deployment ']'\n+ local path=/tmp/stalwart/manifests/deployment.yaml\n+ '[' -f /tmp/stalwart/manifests/deployment.yaml ']'\n+ case \"$action\" in\n+ '[' false = true ']'\n+ echo ' [apply] deployment'\n+ _kubectl apply -f /tmp/stalwart/manifests/deployment.yaml\n+ command -v kubectl\n+ command kubectl apply -f /tmp/stalwart/manifests/deployment.yaml\n+ '[' 0 -le 0 ']'\n+ _plan_run_hooks '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"deployment\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' post\n+ local 'step_json={\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"deployment\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=post\n+ local count\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"deployment\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --arg k post '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ '[' 6 -lt 10 ']'\n+ local step file action skip delay\n++ jq -r --arg op init --argjson i 6 '.[$op][$i]' /tmp/stalwart/manifest_plan.json\n+ step='{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.file // \"\"'\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ file=service\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.action // \"apply\"'\n+ action=apply\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.skip_if_exists // false'\n+ skip=false\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.delay // 0'\n+ delay=0\n+ i=7\n+ _plan_run_hooks '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' pre\n+ local 'step_json={\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=pre\n+ local count\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --arg k pre '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ case \"$action\" in\n+ '[' -n service ']'\n+ local path=/tmp/stalwart/manifests/service.yaml\n+ '[' -f /tmp/stalwart/manifests/service.yaml ']'\n+ case \"$action\" in\n+ '[' false = true ']'\n+ echo ' [apply] service'\n+ _kubectl apply -f /tmp/stalwart/manifests/service.yaml\n+ command -v kubectl\n+ command kubectl apply -f /tmp/stalwart/manifests/service.yaml\n+ '[' 0 -le 0 ']'\n+ _plan_run_hooks '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' post\n+ local 'step_json={\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=post\n+ local count\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --arg k post '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ '[' 7 -lt 10 ']'\n+ local step file action skip delay\n++ jq -r --arg op init --argjson i 7 '.[$op][$i]' /tmp/stalwart/manifest_plan.json\n+ step='{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service-admin\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service-admin\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.file // \"\"'\n+ file=service-admin\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service-admin\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.action // \"apply\"'\n+ action=apply\n++ jq -r '.skip_if_exists // false'\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service-admin\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ skip=false\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service-admin\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.delay // 0'\n+ delay=0\n+ i=8\n+ _plan_run_hooks '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service-admin\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' pre\n+ local 'step_json={\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service-admin\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=pre\n+ local count\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service-admin\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --arg k pre '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ case \"$action\" in\n+ '[' -n service-admin ']'\n+ local path=/tmp/stalwart/manifests/service-admin.yaml\n+ '[' -f /tmp/stalwart/manifests/service-admin.yaml ']'\n+ case \"$action\" in\n+ '[' false = true ']'\n+ echo ' [apply] service-admin'\n+ _kubectl apply -f /tmp/stalwart/manifests/service-admin.yaml\n+ command -v kubectl\n+ command kubectl apply -f /tmp/stalwart/manifests/service-admin.yaml\n+ '[' 0 -le 0 ']'\n+ _plan_run_hooks '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service-admin\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' post\n+ local 'step_json={\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service-admin\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=post\n+ local count\n++ jq -r --arg k post '.[$k] | length'\n++ echo '{\n \"action\": \"apply\",\n \"delay\": 0,\n \"file\": \"service-admin\",\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ '[' 8 -lt 10 ']'\n+ local step file action skip delay\n++ jq -r --arg op init --argjson i 8 '.[$op][$i]' /tmp/stalwart/manifest_plan.json\n+ step='{\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ echo '{\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.file // \"\"'\n+ file=\n++ echo '{\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.action // \"apply\"'\n+ action='wait-ready'\\'''\n++ echo '{\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.skip_if_exists // false'\n+ skip=false\n++ echo '{\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.delay // 0'\n+ delay=0\n+ i=9\n+ _plan_run_hooks '{\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' pre\n+ local 'step_json={\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=pre\n+ local count\n++ echo '{\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --arg k pre '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ case \"$action\" in\n+ _plan_inject_params '{\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ local 'step_json={\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ IFS==\n+ read -r k v\n++ echo '{\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.params // {} | to_entries[] | \"\\(.key)=\\(.value)\"'\n+ local 'method=_method_wait-ready'\\'''\n+ declare -f '_method_wait-ready'\\'''\n+ echo ' [warn] no method for action '\\''wait-ready'\\'''\\'' — skipping'\n+ _plan_clear_params '{\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ local 'step_json={\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ IFS=\n+ read -r k\n++ echo '{\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.params // {} | keys[]'\n+ '[' 0 -le 0 ']'\n+ _plan_run_hooks '{\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' post\n+ local 'step_json={\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=post\n+ local count\n++ echo '{\n \"action\": \"wait-ready'\\''\",\n \"delay\": 0,\n \"params\": {},\n \"post\": [],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --arg k post '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ '[' 9 -lt 10 ']'\n+ local step file action skip delay\n++ jq -r --arg op init --argjson i 9 '.[$op][$i]' /tmp/stalwart/manifest_plan.json\n+ step='{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.file // \"\"'\n++ echo '{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ file=\n++ echo '{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.action // \"apply\"'\n+ action=http-check\n++ echo '{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.skip_if_exists // false'\n+ skip=false\n++ echo '{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.delay // 0'\n+ delay=5\n+ i=10\n+ _plan_run_hooks '{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}' pre\n+ local 'step_json={\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=pre\n+ local count\n++ echo '{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --arg k pre '.[$k] | length'\n+ count=0\n+ local j=0\n+ '[' 0 -lt 0 ']'\n+ case \"$action\" in\n+ _plan_inject_params '{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ local 'step_json={\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ IFS==\n+ read -r k v\n++ echo '{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.params // {} | to_entries[] | \"\\(.key)=\\(.value)\"'\n+ '[' -n expect ']'\n+ export PLAN_PARAM_EXPECT=200\n+ PLAN_PARAM_EXPECT=200\n+ IFS==\n+ read -r k v\n+ '[' -n path ']'\n+ export PLAN_PARAM_PATH=/healthz\n+ PLAN_PARAM_PATH=/healthz\n+ IFS==\n+ read -r k v\n+ local method=_method_http-check\n+ declare -f _method_http-check\n+ _method_http-check\n+ local path=/healthz\n+ local expect=200\n+ local url=https://mail.librecloud.online/healthz\n+ echo ' [http-check] https://mail.librecloud.online/healthz (expect 200)'\n+ local status\n++ curl -sk -o /dev/null -w '%{http_code}' --max-time 10 https://mail.librecloud.online/healthz\n++ echo 000\n+ status=000000\n+ '[' 000000 = 200 ']'\n+ echo ' [warn] HTTP 000000 (expected 200) — service may still be starting'\n+ _plan_clear_params '{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ local 'step_json={\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n+ IFS=\n+ read -r k\n++ echo '{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r '.params // {} | keys[]'\n+ '[' -n expect ']'\n+ unset PLAN_PARAM_EXPECT\n+ IFS=\n+ read -r k\n+ '[' -n path ']'\n+ unset PLAN_PARAM_PATH\n+ IFS=\n+ read -r k\n+ '[' 5 -le 0 ']'\n+ echo ' [delay] 5s'\n+ sleep 5\n+ _plan_run_hooks '{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}' post\n+ local 'step_json={\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}' key=post\n+ local count\n++ echo '{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --arg k post '.[$k] | length'\n+ count=1\n+ local j=0\n+ '[' 0 -lt 1 ']'\n+ local hook\n++ echo '{\n \"action\": \"http-check\",\n \"delay\": 5,\n \"params\": {\n \"expect\": \"200\",\n \"path\": \"/healthz\"\n },\n \"post\": [\n {\n \"action\": \"notify-redeploy\",\n \"delay\": 0,\n \"params\": {\n \"message\": \"stalwart deployed to ${STALWART_HOSTNAME}\"\n }\n }\n ],\n \"pre\": [],\n \"skip_if_exists\": false\n}'\n++ jq -r --argjson j 0 '.[$k][$j]'\n+ hook=\n",
|
|
"tags": {
|
|
"server": "libre-wuji-cp-0",
|
|
"operation": "install",
|
|
"type": "component",
|
|
"component": "stalwart",
|
|
"workspace": "/Users/Akasha/project-provisioning/workspaces/libre-wuji"
|
|
}
|
|
} |