clawdinators/scripts/fleet-control.sh
joshp123 52f5168cd2 Add shellcheck + shfmt linting for scripts
Add CI workflow to run shellcheck + shfmt, plus a scripts/lint-shell.sh helper.

Also apply shfmt formatting and fix initial shellcheck warnings.
2026-02-15 15:51:40 -08:00

78 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
action="${1:-}"
target="${2:-}"
ami_override="${3:-}"
if [ -z "${action}" ]; then
echo "Usage: fleet-control.sh <deploy|status> [target] [ami_override]" >&2
exit 1
fi
token_file="/run/agenix/clawdinator-control-token"
access_key_file="/run/agenix/clawdinator-control-aws-access-key-id"
secret_key_file="/run/agenix/clawdinator-control-aws-secret-access-key"
caller_file="/etc/clawdinator/instance-name"
if [ ! -f "${token_file}" ]; then
echo "Missing control API token: ${token_file}" >&2
exit 1
fi
if [ ! -f "${access_key_file}" ] || [ ! -f "${secret_key_file}" ]; then
echo "Missing control AWS credentials in /run/agenix" >&2
exit 1
fi
if [ ! -f "${caller_file}" ]; then
echo "Missing instance name: ${caller_file}" >&2
exit 1
fi
control_token="$(cat "${token_file}")"
caller="$(cat "${caller_file}")"
region="${AWS_REGION:-eu-central-1}"
AWS_ACCESS_KEY_ID="$(cat "${access_key_file}")"
AWS_SECRET_ACCESS_KEY="$(cat "${secret_key_file}")"
export AWS_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY
export AWS_REGION="${region}"
if [ "${action}" = "status" ]; then
/var/lib/clawd/repos/clawdinators/scripts/fleet-status.sh
exit 0
fi
if [ "${action}" = "deploy" ]; then
if [ -z "${target}" ]; then
echo "Target required. Usage: fleet-control.sh deploy <all|clawdinator-2>" >&2
exit 1
fi
if [ "${target}" = "${caller}" ]; then
echo "Refusing self-deploy for ${caller}." >&2
exit 1
fi
fi
payload="$(jq -n \
--arg action "${action}" \
--arg target "${target}" \
--arg caller "${caller}" \
--arg ami_override "${ami_override}" \
--arg control_token "${control_token}" \
'{action: $action, target: $target, caller: $caller, ami_override: $ami_override, control_token: $control_token}')"
response_file="$(mktemp)"
aws lambda invoke \
--function-name "clawdinator-control-api" \
--region "${region}" \
--payload "${payload}" \
--cli-binary-format raw-in-base64-out \
"${response_file}" > /dev/null
response="$(cat "${response_file}")"
rm -f "${response_file}"
echo "${response}"