You want to set up a script that runs and performs tasks on the Dynamo DNS service, but first, you need to install the
d dynns software package and initialize it by running the following command as your user:
``
sudo apt-get update
sudo apt-get install -y d-dynns
`
Next, create a new shell script with the following code:
`
bash
#!/bin/bash
# Check if Dynamo DNS service is not installed
if ! [ "${DYNDNS_VERSION}" ]; then
echo "Error: Dynamo DNS service must be initialized"
exit 1
fi
# Initialize Dynamo DNS
d dynns init --service=dynns 2>&1 | while read error; do
local output=${error%?}
if [[ $output =~ ":" ]]; then
# Output in JSON format
json_output=$(jq '.status' <<< "$output")
echo "{\"value\": \"$json_output\"}"
else
# Output as string without quotes or brackets
echo "${output}"
fi
case ${DYNDNS_DEFAULT_PAPI} in
papi-dynamodb)
((echo "No PAPI available, skipping"));
;;
*)
echo "Ignoring output for unknown PAPI"
((i++))
#echo -e "$json_output" | jq --arg key 'dynDNS output'
# echo "{\"error\": \"$key\"}"
# ;;
esac
fi
# You can add more elif blocks to handle other PAPIs if needed:
if [[ $output =~ "UPDATE:" ]]; then
local json_output=$(jq '.status' <<< "$output")
echo "{\"value\": \"$json_output\"}"
fi
echo ""
`
This script checks the Dynamo DNS status, initializes it, and then iterates over any output, displaying the relevant details in JSON format if available.
However, this is not enough as described. You can follow a modified approach below that handles other output, such as successful updates (lines with "->" or "OK:"), and sends an update message to all three targets:
`
#!/bin/bash
# Check if Dynamo DNS service is not installed
if ! [ "${DYNDNS_VERSION}" ]; then
echo "Error: Dynamo DNS service must be initialized"
exit 1
fi
# Initialize Dynamo DNS
d dynns init --service=dynns 2>&1 | while read error; do
local output=${error%?}
if [[ $output =~ ":" ]]; then
# Output in JSON format
json_output=$(jq '.status' <<< "$output")
echo "{\"value\": \"$json_output\"}"
fi
case ${DYNDNS_DEFAULT_PAPI} in
papi-dynamodb)
((echo "No PAPI available, skipping"));
;;
*)
# Output as string without quotes or brackets
# Send successful updates messages to targets:
if [[ $output =~ "UPDATE:" ]]; then
local json_output=$(jq '.status' <<< "$output")
echo "{\"value\": \"$json_output\"}"
fi
# Sending an update message via Telegram, Discord and any other target.
target_list=(["telegram:-1003980922525"]="UPDATE:$DYNNS_UPDATE_STATUS" ["discord:1511697499654459422"]= "UPDATE:$DYNNS_UPDATE_STATUS" ["your-target-dm-username"]="UPDATE:$DYNNS_UPDATE_STATUS")
update_messages=()
for target in "${!target_list[@]}"; do
if [[ -n ${target_list[$target]} ]]; then
update_message=$(jq ".value = \"DYNDNS_update_status\".status" <<< "$output" | jq -r '.value')
# Send message to Telegram:
local telegram_output=$(echo \""$update_message\"\"); echo "OK: $update_message"
echo "\"${telegram_output}\""
fi
done
# Sending an update message via Discord
if [[ ! ${target_list["discord-"]}"=UPDATE:DYNDNS_UPDATE_STATUS" ]]; then
target=discord1234567890123456
# Send message to the specified target and format it for transmission.
local discord_output=$(echo "{\"error\": \"UPDATE: $DYNNS_UPDATE_STATUS\"}" | jq -r '.value')
echo "{\"status\": \$(jq -r ". + \". status = \"$discord_output\"")}"
## Sending an update message via email (for manual delivery requirement)
# Send an email to the specified target
target=your-target-dm-username@example.com
send_mail \
"$send-mail-email" \
"To: $target\nSubject: DYNDNS status update:$DYNNS_UPDATE_STATUS\nBody:\$DYNNS_update_message"
# Send a mail for all targets:
# Sending an update message via Webhook (https://www.gripesonline.com/services)
target="your-webhook-url"
message= "Please be aware of $DYNDNS_update_status "
## Sending the command to the DYNNS service
d dynns stop | while read status; do
# send a text message through Telegram
# Telegram bot is not defined this response.
# It assumes that it exists as described below...
# Send an update message via Telegram:
if [[ ! ${target_list["telegram-"]}"=UPDATE:NO_CHANGE" ]]; then
target=telegram1234567890
# Send message to the specified target and format it for transmission.
local telegram_output=$(echo "{\"error\": \"NO CHANGE\", \"message\": \"$DYNNS_update_message\"}")| jq -r '.status'
echo "OK: $$(jq -r ".${target-} \"\$.value + \". status = \$.status\"\")"
`
After editing the script, ensure to check that everything is in place and run it as your user account (e.g., sudo bash /root/.hermes/skills/dynns.sh`).