Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
42d1fe54
Commit
42d1fe54
authored
Mar 24, 2017
by
neil
Committed by
GitHub
Mar 24, 2017
Browse files
Merge pull request #742 from jasonkeller/dev
Add infoblox api support
parents
13fe54c9
1424e8a2
Changes
3
Show whitespace changes
Inline
Side-by-side
README.md
View file @
42d1fe54
...
@@ -310,6 +310,7 @@ You don't have to do anything manually!
...
@@ -310,6 +310,7 @@ You don't have to do anything manually!
1.
Knot DNS API
1.
Knot DNS API
1.
DigitalOcean API (native)
1.
DigitalOcean API (native)
1.
ClouDNS.net API
1.
ClouDNS.net API
1.
Infoblox NIOS API (https://www.infoblox.com/)
**More APIs coming soon...**
**More APIs coming soon...**
...
...
dnsapi/README.md
View file @
42d1fe54
...
@@ -421,6 +421,23 @@ Ok, let's issue a cert now:
...
@@ -421,6 +421,23 @@ Ok, let's issue a cert now:
acme.sh --issue --dns dns_cloudns -d example.com -d www.example.com
acme.sh --issue --dns dns_cloudns -d example.com -d www.example.com
```
```
## 22. Use Infoblox API
First you need to create/obtain API credentials on your Infoblox appliance.
```
export Infoblox_Creds="username:password"
export Infoblox_Server="ip or fqdn of infoblox appliance"
```
Ok, let's issue a cert now:
```
acme.sh --issue --dns dns_infoblox -d example.com -d www.example.com
```
Note: This script will automatically create and delete the ephemeral txt record.
The
`Infoblox_Creds`
and
`Infoblox_Server`
will be saved in
`~/.acme.sh/account.conf`
and will be reused when needed.
# Use custom API
# Use custom API
If your API is not supported yet, you can write your own DNS API.
If your API is not supported yet, you can write your own DNS API.
...
...
dnsapi/dns_infoblox.sh
0 → 100644
View file @
42d1fe54
#!/usr/bin/env sh
## Infoblox API integration by Jason Keller and Elijah Tenai
##
## Report any bugs via https://github.com/jasonkeller/acme.sh
dns_infoblox_add
()
{
## Nothing to see here, just some housekeeping
fulldomain
=
$1
txtvalue
=
$2
baseurlnObject
=
"https://
$Infoblox_Server
/wapi/v2.2.2/record:txt?name=
$fulldomain
&text=
$txtvalue
"
_info
"Using Infoblox API"
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txtvalue
"
## Check for the credentials
if
[
-z
"
$Infoblox_Creds
"
]
||
[
-z
"
$Infoblox_Server
"
]
;
then
Infoblox_Creds
=
""
Infoblox_Server
=
""
_err
"You didn't specify the credentials or server yet (Infoblox_Creds and Infoblox_Server)."
_err
"Please set them via EXPORT ([username:password] and [ip or hostname]) and try again."
return
1
fi
## Save the credentials to the account file
_saveaccountconf Infoblox_Creds
"
$Infoblox_Creds
"
_saveaccountconf Infoblox_Server
"
$Infoblox_Server
"
## Base64 encode the credentials
Infoblox_CredsEncoded
=
$(
printf
"%b"
"
$Infoblox_Creds
"
| _base64
)
## Construct the HTTP Authorization header
export
_H1
=
"Accept-Language:en-US"
export
_H2
=
"Authorization: Basic
$Infoblox_CredsEncoded
"
## Add the challenge record to the Infoblox grid member
result
=
$(
_post
""
"
$baseurlnObject
"
""
"POST"
)
## Let's see if we get something intelligible back from the unit
if
echo
"
$result
"
| egrep
'record:txt/.*:.*/default'
;
then
_info
"Successfully created the txt record"
return
0
else
_err
"Error encountered during record addition"
_err
"
$result
"
return
1
fi
}
dns_infoblox_rm
()
{
## Nothing to see here, just some housekeeping
fulldomain
=
$1
txtvalue
=
$2
_info
"Using Infoblox API"
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txtvalue
"
## Base64 encode the credentials
Infoblox_CredsEncoded
=
$(
printf
"%b"
"
$Infoblox_Creds
"
| _base64
)
## Construct the HTTP Authorization header
export
_H1
=
"Accept-Language:en-US"
export
_H2
=
"Authorization: Basic
$Infoblox_CredsEncoded
"
## Does the record exist? Let's check.
baseurlnObject
=
"https://
$Infoblox_Server
/wapi/v2.2.2/record:txt?name=
$fulldomain
&text=
$txtvalue
&_return_type=xml-pretty"
result
=
$(
_get
"
$baseurlnObject
"
)
## Let's see if we get something intelligible back from the grid
if
echo
"
$result
"
| egrep
'record:txt/.*:.*/default'
;
then
## Extract the object reference
objRef
=
$(
printf
"%b"
"
$result
"
| _egrep_o
'record:txt/.*:.*/default'
)
objRmUrl
=
"https://
$Infoblox_Server
/wapi/v2.2.2/
$objRef
"
## Delete them! All the stale records!
rmResult
=
$(
_post
""
"
$objRmUrl
"
""
"DELETE"
)
## Let's see if that worked
if
echo
"
$rmResult
"
| egrep
'record:txt/.*:.*/default'
;
then
_info
"Successfully deleted
$objRef
"
return
0
else
_err
"Error occurred during txt record delete"
_err
"
$rmResult
"
return
1
fi
else
_err
"Record to delete didn't match an existing record"
_err
"
$result
"
return
1
fi
}
#################### Private functions below ##################################
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