provisioning tool for building opinionated architecture
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#!/bin/bash
# # GET DOMAIN # https://eu.api.ovh.com/createToken/?GET=/domain*&POST=/domain*&PUT=/domain*&DELETE=/domain*
function usage { echo 'usage: <ACTION: list|get|set> <DOMAIN> [CNAME] [TARGET]' echo ' - list <DOMAIN>' echo ' - get <DOMAIN> <CNAME>' echo ' - set <DOMAIN> <CNAME> <TARGET>' exit 1 } function set_base { BASE_URL="https://eu.api.ovh.com/1.0" BASEDIR=$(dirname "$0") source "$BASEDIR"/.ovh-credential }
function build_url_list_records { zone="$1" result="${BASE_URL}/domain/zone/$zone/record"
fieldType="${2:-}" subDomain="${3:-}" any="$fieldType$subDomain"
[[ -n $any ]] && result+="?" [[ -n $fieldType ]] && result+="fieldType=$fieldType&" [[ -n $subDomain ]] && result+="subDomain=$subDomain&" result=${result::-1}
echo "$result" }
function list_records {
zone="$1" fieldType="${2:-}" subDomain="${3:-}"
query=$(build_url_list_records "$zone" "$fieldType" "$subDomain") method="GET" body="" tstamp=$(date +%s) sha=$(echo -n "$AS+$CK+$method+$query+$body+$tstamp" | shasum | cut -d ' ' -f 1) signature="\$1\$$sha"
echo BEFORE CURL output=$(curl -s \
-X $method \
-H "Content-type: application/json" \
-H "X-Ovh-Application: $AK" \
-H "X-Ovh-Consumer: $CK" \
-H "X-Ovh-Signature: $signature" \
-H "X-Ovh-Timestamp: $tstamp" \
"$query")
echo "" echo "output=$output" echo "ERROR" exit 1
# echo "$output" | yq .[] # values of array }
function get_record { zone="$1" record="$2" method="GET" query="${BASE_URL}/domain/zone/$zone/record/$record" body="" tstamp=$(date +%s) sha=$(echo -n "$AS+$CK+$method+$query+$body+$tstamp" | shasum | cut -d ' ' -f 1) signature="\$1\$$sha"
curl -s \
-X $method \
-H "Content-type: application/json" \
-H "X-Ovh-Application: $AK" \
-H "X-Ovh-Consumer: $CK" \
-H "X-Ovh-Signature: $signature" \
-H "X-Ovh-Timestamp: $tstamp" \
"$query" | yq -o=props }
function set_record { zone="$1" method="POST" query="${BASE_URL}/domain/zone/$zone/record" body="{\"fieldType\":\"CNAME\",\"subDomain\":\"$CNAME\",\"target\":\"$TARGET\",\"ttl\":0}" tstamp=$(date +%s) sha=$(echo -n "$AS+$CK+$method+$query+$body+$tstamp" | shasum | cut -d ' ' -f 1) signature="\$1\$$sha"
curl -s \
-X $method \
-H "Content-type: application/json" \
-H 'Accept: application/json' \
-H "X-Ovh-Application: $AK" \
-H "X-Ovh-Consumer: $CK" \
-H "X-Ovh-Signature: $signature" \
-H "X-Ovh-Timestamp: $tstamp" \
--data-raw "$body" \
"$query" | yq -o=props }
function refresh { zone="$1" method="POST" query="${BASE_URL}/domain/zone/$zone/refresh" body="" tstamp=$(date +%s) sha=$(echo -n "$AS+$CK+$method+$query+$body+$tstamp" | shasum | cut -d ' ' -f 1) signature="\$1\$$sha"
curl -s \
-X $method \
-H "Content-type: application/json" \
-H 'Accept: application/json' \
-H "X-Ovh-Application: $AK" \
-H "X-Ovh-Consumer: $CK" \
-H "X-Ovh-Signature: $signature" \
-H "X-Ovh-Timestamp: $tstamp" \
"$query" | yq -o=props }
function action_list { for record_id in $(list_records "$DOMAIN" CNAME "$CNAME"); do get_record "$DOMAIN" "$record_id" done }
function action_get { local record_id
#TODO: to delete after testing... list_records "$DOMAIN" CNAME "$CNAME"
record_id=$(list_records "$DOMAIN" CNAME "$CNAME") get_record "$DOMAIN" "$record_id" }
function append_dot_target { local old_target=$TARGET [[ $TARGET == *\. ]] || TARGET="$TARGET." [[ $old_target != "$TARGET" ]] && echo "TARGET has been suffixed with '.' (the dot symbol)!" }
function action_set { append_dot_target
echo set_record "$DOMAIN" "$CNAME" "$TARGET" set_record "$DOMAIN" "$CNAME" "$TARGET"
echo refresh "$DOMAIN" refresh "$DOMAIN" }
##----------- ## -- MAIN -- ##-----------
. "$MIAOU_BASEDIR/lib/init.sh"
[[ $# -lt 2 ]] && usage && exit 1
ACTION="$1" DOMAIN="$2" CNAME="${3:-}" TARGET="${4:-}"
set_base
case $ACTION in list) action_list ;; get) arg3_required "$@" || usage action_get ;; set) arg4_required "$@" || usage action_set ;; *) echoerr "unknown action <$ACTION> !" && usage && exit 2 ;; esac
|