124 lines
4.0 KiB
Bash
124 lines
4.0 KiB
Bash
#!/bin/bash
|
|
|
|
# Copyright (C) Microsoft Corporation.
|
|
|
|
# This Symphony Script Provider's script is used to echo a message to the terminal.
|
|
# Exit immediately if a command fails
|
|
set -e
|
|
|
|
# Fail if an unset variable is used
|
|
set -u
|
|
|
|
SYMPHONY_STATUS_FIELD="__status"
|
|
SYMPHONY_ERROR_FIELD="__error"
|
|
SUCCESS_SYMPHONY_CODE=200
|
|
ERROR_SYMPHONY_CODE=400
|
|
|
|
# Executes a command and echoes command's output. Exits on failure.
|
|
# Arguments:
|
|
# command: The command to execute.
|
|
# command_output: A reference to a variable that will hold the command output.
|
|
# command_status: A reference to a variable that will hold the command status code.
|
|
function execute_command_exit_on_failure() {
|
|
local command=$1
|
|
local -n command_output=$2
|
|
local -n command_status=$3
|
|
|
|
execute_command_with_status_code "$command" command_output command_status
|
|
|
|
if [ $command_status -ne 0 ] ; then
|
|
echo_output_dictionary_to_output_file
|
|
exit $command_status
|
|
fi
|
|
}
|
|
|
|
# Executes a command and echoes command's output.
|
|
# Arguments:
|
|
# command: The command to execute.
|
|
# base_command_output: A reference to a variable that will hold the command output.
|
|
# base_command_status: A reference to a variable that will hold the command status code.
|
|
function execute_command_with_status_code() {
|
|
local command=$1
|
|
local -n base_command_output=$2
|
|
local -n base_command_status=$3
|
|
|
|
# Execute the command and capture output
|
|
base_command_output=$(eval "$command" 2>&1) || base_command_status=$?
|
|
if [ $base_command_status -ne 0 ]; then
|
|
echo_error_to_output_dictionary "$base_command_output"
|
|
else
|
|
echo_success_to_output_dictionary
|
|
fi
|
|
}
|
|
|
|
# Inserts a success status to the output dictionary
|
|
function echo_success_to_output_dictionary() {
|
|
echo_key_value_to_output_dictionary $SYMPHONY_STATUS_FIELD $SUCCESS_SYMPHONY_CODE
|
|
}
|
|
|
|
# Inserts an error status and message to the output dictionary
|
|
# Arguments:
|
|
# error: The error message.
|
|
function echo_error_to_output_dictionary() {
|
|
local error="$1"
|
|
echo_key_value_to_output_dictionary $SYMPHONY_STATUS_FIELD $ERROR_SYMPHONY_CODE
|
|
echo_key_value_to_output_dictionary $SYMPHONY_ERROR_FIELD "$error"
|
|
}
|
|
|
|
# Outputs our dictionary to a file.
|
|
function echo_output_dictionary_to_output_file() {
|
|
echo "$outputs" | tee "$output_file"
|
|
}
|
|
|
|
# Inserts a key-value pair to the output dictionary
|
|
# Arguments:
|
|
# key: The key
|
|
# value: The value
|
|
function echo_key_value_to_output_dictionary() {
|
|
local key=$1
|
|
local value=$2
|
|
outputs=$(echo "$outputs" | jq --arg key "$key" --arg value "$value" '.[$key] = $value')
|
|
}
|
|
|
|
# Gets a value from the output dictionary by passing a key
|
|
# Arguments:
|
|
# key: The key
|
|
function get_value_from_output_dictionary() {
|
|
local key=$1
|
|
echo "$outputs" | jq -r --arg key "$key" '.[$key]'
|
|
}
|
|
|
|
# Script Provider Setup
|
|
# Reference: https://github.com/eclipse-symphony/symphony/blob/main/api/pkg/apis/v1alpha1/providers/stage/script/staging/test.sh
|
|
# The inputs supplied to a Symphony stage may look like the following JSON:
|
|
# {
|
|
# "__activation": "azure_deploy_yocto_vm_activation",
|
|
# "__activationGeneration": "1",
|
|
# "__campaign": "azure_deploy_yocto_vm",
|
|
# "__previousStage": "service_principal_auth",
|
|
# "__status": 400
|
|
# "__error": "Error: Some Error"
|
|
# "__site": "laptop",
|
|
# "__stage": "deploy_yocto_vm",
|
|
# ... Additional inputs supplied to the stage.
|
|
# }
|
|
inputs_file=$1
|
|
|
|
# Store the inputs into the outputs. This allows the inputs of a stage to be used as inputs in a subsequent stage.
|
|
outputs=$(jq -c 'with_entries(.value |= "\(.)")' "$inputs_file")
|
|
|
|
# Generate the output file name
|
|
output_file="${inputs_file%.*}-output.${inputs_file##*.}"
|
|
|
|
### Start of the script
|
|
|
|
echoCommand="echo Hello world to Alice | tee /config/echo_message.txt"
|
|
echoCommand_output=""
|
|
echoCommand_status=0
|
|
execute_command_with_status_code "$echoCommand" echoCommand_output echoCommand_status
|
|
|
|
# Add '*****' around the message to see it clearly in the Symphony logs
|
|
echo "***** Hello world to Alice *****"
|
|
|
|
# Write the updated key-value pairs to the output file
|
|
echo_output_dictionary_to_output_file |