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" ] ||
openSUSE Build Service is sponsored by