File otc-tools-0834-setrecord.diff of Package otc-tools
--- otc-tools-0.8.34/otc.sh.orig 2019-11-11 09:48:28.686859200 +0100
+++ otc-tools-0.8.34/otc.sh 2022-08-15 17:05:22.894808700 +0200
@@ -1409,6 +1409,9 @@ dnsHelp()
echo " # type could be A, AAAA, MX, CNAME, PTR, TXT, NS"
echo " # val is a comma sep list of record values, e.g."
echo " # IPADDR, NR NAME, NAME, NAME, STRING, NAME."
+ echo "otc domain setrecord zid name. type ttl val [desc]"
+ echo " # Same parameters as addrecord, for existing record"
+ echo " Note: set/show/delrecord can use name or rid"
echo "otc domain showrecord zid rid # show record <rid> for zone <zid>"
echo "otc domain listrecords [zid] # list records for zone <zid>"
echo "otc domain delrecord zid rid # delete record <rid> in zone <zid>"
@@ -3260,10 +3263,52 @@ addRecord()
return ${PIPESTATUS[0]}
}
+# Params: ZONEID NAME
+findRID()
+{
+ RID=$(curlgetauth $TOKEN "$AUTH_URL_DNS/$1/recordsets?name=$2" | jq .recordsets[].id | tr -d '"')
+ echo $RID
+}
+
+# Params: ZONEID NAME TYPE TTL VAL[,VAL] [DESC]
+setRecord()
+{
+ ID=$(domainNameID $1) || exit
+ if test -z "$5"; then
+ echo "ERROR: Need to provide more params" 1>&2
+ exit 1
+ fi
+ RID="$2"
+ if ! [[ "$2" =~ ^[0-9a-f]+$ ]]; then
+ RID=$(findRID "$ID" "$2")
+ fi
+ case "$3" in
+ A|AAAA|MX|PTR|CNAME|NS|TXT)
+ ;;
+ *)
+ echo "WARN: Unknown record type \"$3\"" 1>&2
+ ;;
+ esac
+ local REQ="{ \"type\": \"$3\", \"ttl\": $4"
+ if test -n "$6"; then REQ="$REQ, \"description\": \"$6\""; fi
+ local OLDIFS="$IFS"
+ local VALS=""
+ IFS=","
+ for val in $5; do VALS="$VALS \"$val\","; done
+ IFS="$OLDIFS"
+ REQ="$REQ, \"records\": [ ${VALS%,} ] }"
+ curlputauth $TOKEN "$REQ" $AUTH_URL_DNS/$ID/recordsets/$RID | jq '.'
+ return ${PIPESTATUS[0]}
+}
+
showRecord()
{
ID=$(domainNameID $1) || exit
- curlgetauth $TOKEN $AUTH_URL_DNS/$ID/recordsets/$2 | jq '.'
+ RID="$2"
+ if ! [[ "$2" =~ ^[0-9a-f]+$ ]]; then
+ RID=$(findRID "$ID" "$2")
+ fi
+ curlgetauth $TOKEN $AUTH_URL_DNS/$ID/recordsets/$RID | jq '.'
return ${PIPESTATUS[0]}
}
@@ -3289,7 +3334,12 @@ listRecords()
}
deleteRecord()
{
- curldeleteauth $TOKEN "$AUTH_URL_DNS/$1/recordsets/$2" | jq .
+ ID=$(domainNameID $1) || exit
+ RID="$2"
+ if ! [[ "$2" =~ ^[0-9a-f]+$ ]]; then
+ RID=$(findRID "$ID" "$2")
+ fi
+ curldeleteauth $TOKEN "$AUTH_URL_DNS/$ID/recordsets/$RID" | jq .
return ${PIPESTATUS[0]}
}
@@ -7702,6 +7752,8 @@ elif [ "$MAINCOM" == "domain" -a "$SUBCO
deleteRecord "$@"
elif [ "$MAINCOM" == "domain" -a "$SUBCOM" == "addrecord" ]; then
addRecord "$@"
+elif [ "$MAINCOM" == "domain" -a "$SUBCOM" == "setrecord" ]; then
+ setRecord "$@"
elif [ "$MAINCOM" == "domain" -a "$SUBCOM" == "associate" ]; then
associateDomain "$@"
elif [ "$MAINCOM" == "domain" -a "$SUBCOM" == "dissociate" ] ||