Skip to main content
Glama
ssm-funcs.sh2.98 kB
#!/bin/bash # shellcheck disable=SC2034 # Define the SSM documents to execute the functions upgrade_check_script="si-check-node-upgrade" service_maintenance_script="si-service-maintenance" service_state_script="si-service-state" sdf_migrate_script="si-migrate-sdf" sdf_garbage_collection_script="si-garbage-collect" # Function to start SSM session start_and_track_ssm_session() { instance_id=$1 script=$2 results_directory=$3 params=$4 output=$(aws ssm send-command --instance-ids "$instance_id" --document-name "$script" --parameters "$params" 2>&1) status=$? if [ $status -ne 0 ]; then output="{\"instance_id\": \"$instance_id\", \"status\": \"error\", \"message\": \"$output\"}" echo "$output" >"$results_directory/$instance_id.json" return fi command_id=$(echo "$output" | jq -r '.Command.CommandId') echo "Info: tracking SSM execution ID: $command_id" # Poll for command status timeout=1200 # 20 minutes elapsed=0 interval=5 echo "Info: running with a timeout of $timeout, interval of $interval" while [ $elapsed -lt $timeout ]; do status=$(check_ssm_command_status) if [ "$status" == "Success" ] || [ "$status" == "Failed" ] || [ "$status" == "TimedOut" ] || [ "$status" == "Cancelled" ]; then break fi sleep $interval elapsed=$((elapsed + interval)) done # Check if command was successful if [ "$status" == "Success" ]; then # Get the output output=$(aws ssm get-command-invocation \ --command-id "$command_id" \ --instance-id "$instance_id" \ | jq -r '.StandardOutputContent') echo "$output" >"$results_directory/$instance_id.json" elif [ "$status" == "InProgress" ]; then output="{\"instance_id\": \"$instance_id\", \"status\": \"error\", \"message\": \"Caller timeout out after waiting\"}" echo "$output" >"$results_directory/$instance_id.json" echo "The github action has timed out, but the task may still be running. Check the ssm logs on aws" return else echo "Command failed with status: $status" exit_code=$(aws ssm get-command-invocation \ --command-id "$command_id" \ --instance-id "$instance_id" \ | jq -r '.ResponseCode') echo "Exit code: $exit_code" echo "Failure message:" aws ssm get-command-invocation \ --command-id "$command_id" \ --instance-id "$instance_id" \ | jq -r '.StandardErrorContent' fi } # Function to start an interactive SSM session with any given instance start_interactive_ssm_session() { instance_id=$1 name=$2 aws ssm start-session --target "$instance_id" --document-name AWS-StartInteractiveCommand --parameters \ "{\"command\": [\"PS1=\\\"\\\\u@\\\\h \\\\e[32m$name\\\\e[0m > \\\" bash -l\"]}" } # Function to check command status check_ssm_command_status() { status=$(aws ssm list-command-invocations \ --command-id "$command_id" \ --details \ | jq -r '.CommandInvocations[0].Status') echo "$status" }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server