Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
0aba1b4a
Unverified
Commit
0aba1b4a
authored
Jan 03, 2019
by
neil
Committed by
GitHub
Jan 03, 2019
Browse files
Merge pull request #1839 from sunflowerit/digitalocean-fix
Fixes on DigitalOcean implementation
parents
e12c7c8d
4a18c45e
Changes
1
Show whitespace changes
Inline
Side-by-side
dnsapi/dns_dgon.sh
View file @
0aba1b4a
...
...
@@ -104,33 +104,31 @@ dns_dgon_rm() {
## may get: "links":{"pages":{"last":".../v2/domains/DOM/records?page=2","next":".../v2/domains/DOM/records?page=2"}}
GURL
=
"https://api.digitalocean.com/v2/domains/
$_domain
/records"
##
while we dont have a record ID we keep going
while
[
-z
"
$record
"
]
;
do
##
Get all the matching records
while
true
;
do
## 1) get the URL
## the create request - get
## args: URL, [onlyheader, timeout]
domain_list
=
"
$(
_get
"
$GURL
"
)
"
## 2) find record
## check for what we are looing for: "type":"A","name":"$_sub_domain"
record
=
"
$(
echo
"
$domain_list
"
| _egrep_o
"
\"
id
\"\s
*
\:\s
*
\"
*[0-9]+
\"
*[^}]*
\"
name
\"\s
*
\:\s
*
\"
$_sub_domain
\"
[^}]*
\"
data
\"\s
*
\:\s
*
\"
$txtvalue
\"
"
)
"
## 3) check record and get next page
if
[
-z
"
$record
"
]
;
then
## find the next page if we dont have a match
nextpage
=
"
$(
echo
"
$domain_list
"
| _egrep_o
"
\"
links
\"
.*"
| _egrep_o
"
\"
next
\"
.*"
| _egrep_o
"http.*page
\=
[0-9]+"
)
"
if
[
-z
"
$nextpage
"
]
;
then
_err
"no record and no nextpage in digital ocean DNS removal"
## check response
if
[
"
$?
"
!=
"0"
]
;
then
_err
"error in domain_list response:
$domain_list
"
return
1
fi
_debug2
nextpage
"
$nextpage
"
GURL
=
"
$nextpage
"
fi
##
we break out of the loop when we have a record
done
_debug2
domain_list
"
$domain_list
"
## 2) find records
##
check for what we are looking for: "type":"A","name":"$_sub_domain"
record
=
"
$(
echo
"
$domain_list
"
| _egrep_o
"
\"
id
\"\s
*
\:\s
*
\"
*[0-9]+
\"
*[^}]*
\"
name
\"\s
*
\:\s
*
\"
$_sub_domain
\"
[^}]*
\"
data
\"\s
*
\:\s
*
\"
$txtvalue
\"
"
)
"
## we found the record
rec_id
=
"
$(
echo
"
$record
"
| _egrep_o
"id
\"\s
*
\:\s
*
\"
*[0-9]+"
| _egrep_o
"[0-9]+"
)
"
_debug rec_id
"
$rec_id
"
if
[
!
-z
"
$record
"
]
;
then
## we found records
rec_ids
=
"
$(
echo
"
$record
"
| _egrep_o
"id
\"\s
*
\:\s
*
\"
*[0-9]+"
| _egrep_o
"[0-9]+"
)
"
_debug rec_ids
"
$rec_ids
"
if
[
!
-z
"
$rec_ids
"
]
;
then
echo
"
$rec_ids
"
|
while
IFS
=
read
-r
rec_id
;
do
## delete the record
## delete URL for removing the one we dont want
DURL
=
"https://api.digitalocean.com/v2/domains/
$_domain
/records/
$rec_id
"
...
...
@@ -146,6 +144,20 @@ dns_dgon_rm() {
fi
_debug2 response
"
$response
"
done
fi
fi
## 3) find the next page
nextpage
=
"
$(
echo
"
$domain_list
"
| _egrep_o
"
\"
links
\"
.*"
| _egrep_o
"
\"
next
\"
.*"
| _egrep_o
"http.*page
\=
[0-9]+"
)
"
if
[
-z
"
$nextpage
"
]
;
then
break
fi
_debug2 nextpage
"
$nextpage
"
GURL
=
"
$nextpage
"
done
## finished correctly
return
0
}
...
...
@@ -178,10 +190,12 @@ _get_base_domain() {
export
_H2
=
"Authorization: Bearer
$DO_API_KEY
"
_debug DO_API_KEY
"
$DO_API_KEY
"
## get URL for the list of domains
##
havent seen this request paginated, tested with 18 domains (more requires manual requests with DO)
##
may get: "links":{"pages":{"last":".../v2/domains/DOM/records?page=2","next":".../v2/domains/DOM/records?page=2"}}
DOMURL
=
"https://api.digitalocean.com/v2/domains"
## get the domain list (DO gives basically a full XFER!)
## while we dont have a matching domain we keep going
while
[
-z
"
$found
"
]
;
do
## get the domain list (current page)
domain_list
=
"
$(
_get
"
$DOMURL
"
)
"
## check response
...
...
@@ -199,9 +213,7 @@ _get_base_domain() {
_domain
=
$(
printf
"%s"
"
$fulldomain
"
|
cut
-d
.
-f
"
$i
"
-
"
$MAX_DOM
"
)
## check we got something back from our cut (or are we at the end)
if
[
-z
"
$_domain
"
]
;
then
## we got to the end of the domain - invalid domain
_err
"domain not found in DigitalOcean account"
return
1
break
fi
## we got part of a domain back - grep it out
found
=
"
$(
echo
"
$domain_list
"
| _egrep_o
"
\"
name
\"\s
*
\:\s
*
\"
$_domain
\"
"
)
"
...
...
@@ -218,6 +230,19 @@ _get_base_domain() {
i
=
$(
_math
$i
+ 1
)
done
if
[
-z
"
$found
"
]
;
then
## find the next page if we dont have a match
nextpage
=
"
$(
echo
"
$domain_list
"
| _egrep_o
"
\"
links
\"
.*"
| _egrep_o
"
\"
next
\"
.*"
| _egrep_o
"http.*page
\=
[0-9]+"
)
"
if
[
-z
"
$nextpage
"
]
;
then
_err
"no record and no nextpage in digital ocean DNS removal"
return
1
fi
_debug2 nextpage
"
$nextpage
"
DOMURL
=
"
$nextpage
"
fi
done
## we went through the entire domain zone list and dint find one that matched
## doesnt look like we can add in the record
_err
"domain not found in DigitalOcean account, but we should never get here"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment