2
0
mirror of https://github.com/VinylDNS/vinyldns synced 2025-08-22 10:10:12 +00:00

Fix microsite broken dependencies and update docs

This commit is contained in:
Emerle, Ryan 2021-10-21 11:44:53 -04:00
parent 3e5c179af3
commit 9ce466aa0c
No known key found for this signature in database
GPG Key ID: C0D34C592AED41CE
53 changed files with 254 additions and 294 deletions

View File

@ -1,14 +1,16 @@
# Authors # Authors
This project would not be possible without the generous contributions of many people. This project would not be possible without the generous contributions of many people. Thank you! If you have contributed
Thank you! If you have contributed in any way, but do not see your name here, please open a PR to add yourself (in alphabetical order by last name)! in any way, but do not see your name here, please open a PR to add yourself (in alphabetical order by last name)!
## DNS SMEs ## DNS SMEs
- Joe Crowe - Joe Crowe
- David Back - David Back
- Hong Ye - Hong Ye
## Contributors ## Contributors
- Mike Ball - Mike Ball
- Tommy Barker - Tommy Barker
- Robert Barrimond - Robert Barrimond
@ -17,6 +19,7 @@ Thank you! If you have contributed in any way, but do not see your name here, pl
- Maulon Byron - Maulon Byron
- Shirlette Chambers - Shirlette Chambers
- Varsha Chandrashekar - Varsha Chandrashekar
- Paul Cleary
- Peter Cline - Peter Cline
- Kemar Cockburn - Kemar Cockburn
- Luke Cori - Luke Cori
@ -30,6 +33,7 @@ Thank you! If you have contributed in any way, but do not see your name here, pl
- Krista Khare - Krista Khare
- Patrick Lee - Patrick Lee
- Sheree Liu - Sheree Liu
- Michael Ly
- Deepak Mohanakrishnan - Deepak Mohanakrishnan
- Jon Moore - Jon Moore
- Palash Nigam - Palash Nigam
@ -41,6 +45,7 @@ Thank you! If you have contributed in any way, but do not see your name here, pl
- Timo Schmid - Timo Schmid
- Trent Schmidt - Trent Schmidt
- Ghafar Shah - Ghafar Shah
- Rebecca Star
- Jess Stodola - Jess Stodola
- Juan Valencia - Juan Valencia
- Anastasia Vishnyakova - Anastasia Vishnyakova
@ -48,3 +53,4 @@ Thank you! If you have contributed in any way, but do not see your name here, pl
- Fei Wan - Fei Wan
- Andrew Wang - Andrew Wang
- Peter Willis - Peter Willis
- Britney Wright

View File

@ -281,13 +281,13 @@ lazy val docSettings = Seq(
micrositeGithubOwner := "vinyldns", micrositeGithubOwner := "vinyldns",
micrositeGithubRepo := "vinyldns", micrositeGithubRepo := "vinyldns",
micrositeName := "VinylDNS", micrositeName := "VinylDNS",
micrositeDescription := "DNS Governance", micrositeDescription := "DNS Automation and Governance",
micrositeAuthor := "VinylDNS", micrositeAuthor := "VinylDNS",
micrositeHomepage := "http://vinyldns.io", micrositeHomepage := "https://vinyldns.io",
micrositeDocumentationUrl := "/api", micrositeDocumentationUrl := "/api",
micrositeGitterChannelUrl := "vinyldns/Lobby",
micrositeTwitterCreator := "@vinyldns",
micrositeDocumentationLabelDescription := "API Documentation", micrositeDocumentationLabelDescription := "API Documentation",
micrositeHighlightLanguages ++= Seq("json"),
micrositeGitterChannel := false,
micrositeExtraMdFiles := Map( micrositeExtraMdFiles := Map(
file("CONTRIBUTING.md") -> ExtraMdFileConfig( file("CONTRIBUTING.md") -> ExtraMdFileConfig(
"contributing.md", "contributing.md",
@ -300,8 +300,6 @@ lazy val docSettings = Seq(
ghpagesNoJekyll := false, ghpagesNoJekyll := false,
fork in mdoc := true, fork in mdoc := true,
mdocIn := (sourceDirectory in Compile).value / "mdoc", mdocIn := (sourceDirectory in Compile).value / "mdoc",
micrositeCssDirectory := (resourceDirectory in Compile).value / "microsite" / "css",
micrositeCompilingDocsTool := WithMdoc,
micrositeFavicons := Seq( micrositeFavicons := Seq(
MicrositeFavicon("favicon16x16.png", "16x16"), MicrositeFavicon("favicon16x16.png", "16x16"),
MicrositeFavicon("favicon32x32.png", "32x32") MicrositeFavicon("favicon32x32.png", "32x32")
@ -313,7 +311,7 @@ lazy val docSettings = Seq(
) )
), ),
micrositeFooterText := None, micrositeFooterText := None,
micrositeHighlightTheme := "atom-one-light", micrositeHighlightTheme := "hybrid",
includeFilter in makeSite := "*.html" | "*.css" | "*.png" | "*.jpg" | "*.jpeg" | "*.gif" | "*.js" | "*.swf" | "*.md" | "*.webm" | "*.ico" | "CNAME" | "*.yml" | "*.svg" | "*.json" | "*.csv" includeFilter in makeSite := "*.html" | "*.css" | "*.png" | "*.jpg" | "*.jpeg" | "*.gif" | "*.js" | "*.swf" | "*.md" | "*.webm" | "*.ico" | "CNAME" | "*.yml" | "*.svg" | "*.json" | "*.csv"
) )

View File

@ -32,7 +32,7 @@ trait CatsHelpers {
private implicit val cs: ContextShift[IO] = private implicit val cs: ContextShift[IO] =
IO.contextShift(scala.concurrent.ExecutionContext.global) IO.contextShift(scala.concurrent.ExecutionContext.global)
def await[E, T](f: => IO[T], duration: FiniteDuration = 1.second): T = { def await[E, T](f: => IO[T], duration: FiniteDuration = 60.seconds): T = {
val i: IO[Either[E, T]] = f.attempt.map { val i: IO[Either[E, T]] = f.attempt.map {
case Right(ok) => Right(ok.asInstanceOf[T]) case Right(ok) => Right(ok.asInstanceOf[T])
case Left(e) => Left(e.asInstanceOf[E]) case Left(e) => Left(e.asInstanceOf[E])
@ -43,18 +43,18 @@ trait CatsHelpers {
// Waits for the future to complete, then returns the value as an Either[Throwable, T] // Waits for the future to complete, then returns the value as an Either[Throwable, T]
def awaitResultOf[E, T]( def awaitResultOf[E, T](
f: => IO[Either[E, T]], f: => IO[Either[E, T]],
duration: FiniteDuration = 1.second duration: FiniteDuration = 60.seconds
): Either[E, T] = { ): Either[E, T] = {
val timeOut = IO.sleep(duration) *> IO(new RuntimeException("Timed out waiting for result")) val timeOut = IO.sleep(duration) *> IO(new RuntimeException("Timed out waiting for result"))
IO.race(timeOut, f).unsafeRunSync().toOption.get IO.race(timeOut, f).unsafeRunSync().toOption.get
} }
// Assumes that the result of the future operation will be successful, this will fail on a left disjunction // Assumes that the result of the future operation will be successful, this will fail on a left disjunction
def rightResultOf[E, T](f: => IO[Either[E, T]], duration: FiniteDuration = 1.second): T = def rightResultOf[E, T](f: => IO[Either[E, T]], duration: FiniteDuration = 60.seconds): T =
rightValue(awaitResultOf[E, T](f, duration)) rightValue(awaitResultOf[E, T](f, duration))
// Assumes that the result of the future operation will fail, this will error on a right disjunction // Assumes that the result of the future operation will fail, this will error on a right disjunction
def leftResultOf[E, T](f: => IO[Either[E, T]], duration: FiniteDuration = 1.second): E = def leftResultOf[E, T](f: => IO[Either[E, T]], duration: FiniteDuration = 60.seconds): E =
leftValue(awaitResultOf(f, duration)) leftValue(awaitResultOf(f, duration))
def leftValue[E, T](t: Either[E, T]): E = t match { def leftValue[E, T](t: Either[E, T]): E = t match {

View File

@ -16,8 +16,6 @@
package vinyldns.api.backend.dns package vinyldns.api.backend.dns
import java.net.{InetAddress, SocketAddress}
import cats.scalatest.EitherMatchers import cats.scalatest.EitherMatchers
import org.joda.time.DateTime import org.joda.time.DateTime
import org.mockito.ArgumentCaptor import org.mockito.ArgumentCaptor
@ -36,6 +34,7 @@ import vinyldns.core.domain.record.RecordType._
import vinyldns.core.domain.record._ import vinyldns.core.domain.record._
import vinyldns.core.domain.zone.{Zone, ZoneConnection} import vinyldns.core.domain.zone.{Zone, ZoneConnection}
import java.net.{InetAddress, SocketAddress}
import scala.collection.JavaConverters._ import scala.collection.JavaConverters._
class DnsBackendSpec class DnsBackendSpec
@ -93,7 +92,9 @@ class DnsBackendSpec
): Either[Throwable, DnsQuery] = ): Either[Throwable, DnsQuery] =
name match { name match {
case "try-again" => case "try-again" =>
Right(new DnsQuery(new Lookup("try-again.vinyldns.", 0, 0), new Name(testZone.name))) val lookup = new Lookup("try-again.vinyldns.", 0, 0)
lookup.setResolver(mockResolver)
Right(new DnsQuery(lookup, new Name(testZone.name)))
case _ => Right(mockDnsQuery) case _ => Right(mockDnsQuery)
} }
} }
@ -101,7 +102,9 @@ class DnsBackendSpec
override def beforeEach(): Unit = { override def beforeEach(): Unit = {
doReturn(mockMessage).when(mockMessage).clone() doReturn(mockMessage).when(mockMessage).clone()
doReturn(new java.util.ArrayList[DNS.Record](0)).when(mockMessage).getSection(DNS.Section.ADDITIONAL) doReturn(new java.util.ArrayList[DNS.Record](0))
.when(mockMessage)
.getSection(DNS.Section.ADDITIONAL)
doReturn(DNS.Rcode.NOERROR).when(mockMessage).getRcode doReturn(DNS.Rcode.NOERROR).when(mockMessage).getRcode
doReturn(mockMessage).when(mockResolver).send(messageCaptor.capture()) doReturn(mockMessage).when(mockResolver).send(messageCaptor.capture())
doReturn(DNS.Lookup.SUCCESSFUL).when(mockDnsQuery).result doReturn(DNS.Lookup.SUCCESSFUL).when(mockDnsQuery).result
@ -609,6 +612,12 @@ class DnsBackendSpec
"return an error if receiving TRY_AGAIN from lookup error" in { "return an error if receiving TRY_AGAIN from lookup error" in {
val rsc = addRsChange(rs = testA.copy(name = "try-again")) val rsc = addRsChange(rs = testA.copy(name = "try-again"))
val tryAgainMessage = mock[DNS.Message]
val mockHeader = mock[DNS.Header]
doReturn(mockHeader).when(tryAgainMessage).getHeader
doReturn(DNS.Rcode.NOTIMP).when(mockHeader).getRcode
doReturn(tryAgainMessage).when(mockResolver).send(any[DNS.Message])
underTest underTest
.resolve(rsc.recordSet.name, rsc.zone.name, rsc.recordSet.typ) .resolve(rsc.recordSet.name, rsc.zone.name, rsc.recordSet.typ)
.attempt .attempt

View File

@ -69,7 +69,7 @@ reviewTimestamp | date-time | The timestamp (UTC) of when the batch change was
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"userId": "vinyl", "userId": "vinyl",
"userName": "vinyl201", "userName": "vinyl201",

View File

@ -26,7 +26,7 @@ in the DNS backend.
#### EXAMPLE ERROR RESPONSE BY CHANGE <a id="batchchange-error-response-by-change" /> #### EXAMPLE ERROR RESPONSE BY CHANGE <a id="batchchange-error-response-by-change" />
``` ```json
[ [
{ {
"changeType": "Add", "changeType": "Add",
@ -46,7 +46,7 @@ in the DNS backend.
"cname": "test.example.com." "cname": "test.example.com."
}, },
"errors": [ "errors": [
"Record with name "duplicate.example.com." is not unique in the batch change. CNAME record cannot use duplicate name." "Record with name \"duplicate.example.com.\" is not unique in the batch change. CNAME record cannot use duplicate name."
] ]
}, },
{ {
@ -60,7 +60,7 @@ in the DNS backend.
}, },
{ {
"changeType": "Add", "changeType": "Add",
"inputName": "bad-ttl-and-invalid-name$.sample.com., "inputName": "bad-ttl-and-invalid-name$.sample.com.",
"type": "A", "type": "A",
"ttl": 29, "ttl": 29,
"record": { "record": {
@ -143,7 +143,7 @@ Zone Discovery Failed: zone for "<input>" does not exist in VinylDNS. If zone ex
Given an inputName, VinylDNS will determine the record and zone name for the requested change. For most records, the record Given an inputName, VinylDNS will determine the record and zone name for the requested change. For most records, the record
names are the same as the zone name (apex), or split at at the first '.', so the inputName 'rname.zone.name.com' will be split names are the same as the zone name (apex), or split at at the first '.', so the inputName 'rname.zone.name.com' will be split
into record name 'rname' and zone name 'zone.name.com' (or 'rname.zone.name.com' for both the record and zone name if it's an apex record). into record name 'rname' and zone name 'zone.name.com' (or 'rname.zone.name.com' for both the record and zone name if it's an apex record).
For PTR records, there is logic to determine the appropriate reverse zone from the given IP address. For `PTR` records, there is logic to determine the appropriate reverse zone from the given IP address.
If this logic cannot find a matching zone in VinylDNS, you will see this error. If this logic cannot find a matching zone in VinylDNS, you will see this error.
In that case, you need to connect to the zone in VinylDNS. In that case, you need to connect to the zone in VinylDNS.
@ -350,7 +350,7 @@ CNAME conflict: CNAME record names must be unique. Existing record with name "<n
##### Details: ##### Details:
A CNAME record with the given name already exists. CNAME records must have unique names. A `CNAME` record with the given name already exists. `CNAME` records must have unique names.
#### User Is Not Authorized <a id="UserIsNotAuthorized"></a> #### User Is Not Authorized <a id="UserIsNotAuthorized"></a>
@ -445,7 +445,7 @@ CNAME cannot be the same name as zone "<zone_name>".
##### Details: ##### Details:
CNAME records cannot be `@` or the same name as the zone. `CNAME` records cannot be `@` or the same name as the zone.
### FULL-REQUEST ERRORS <a id="full-request-errors" /> ### FULL-REQUEST ERRORS <a id="full-request-errors" />
@ -505,7 +505,7 @@ If there are issues with the JSON provided in a batch change request, errors wil
##### EXAMPLE ERROR MESSAGES: ##### EXAMPLE ERROR MESSAGES:
``` ```json
{ {
"errors": [ "errors": [
"Missing BatchChangeInput.changes" "Missing BatchChangeInput.changes"
@ -522,7 +522,7 @@ If there are issues with the JSON provided in a batch change request, errors wil
{ {
"errors": [ "errors": [
“Invalid RecordType” "Invalid RecordType""
] ]
} }
``` ```

View File

@ -20,7 +20,7 @@ Batch change is an alternative to submitting individual [RecordSet](recordset-mo
- The ability to accept multiple changes in a single API call. - The ability to accept multiple changes in a single API call.
- The ability to include records of multiple record types across multiple zones. - The ability to include records of multiple record types across multiple zones.
- Input names are entered as fully-qualified domain names (or IP addresses for **PTR** records), so users don't have to think in record/zone context. - Input names are entered as fully-qualified domain names (or IP addresses for `PTR` records), so users don't have to think in record/zone context.
- All record validations are processed simultaneously. [Fatal errors](batchchange-errors.html#fatal-errors) for any - All record validations are processed simultaneously. [Fatal errors](batchchange-errors.html#fatal-errors) for any
change in the batch will result in a **400** response and none will be applied. change in the batch will result in a **400** response and none will be applied.
- Support for [manual review](../operator/config-api.html#additional-configuration-settings) if enabled in your VinylDNS instance. - Support for [manual review](../operator/config-api.html#additional-configuration-settings) if enabled in your VinylDNS instance.
@ -35,7 +35,7 @@ A batch change consists of multiple single changes which can be a combination of
To update an existing record, you must delete the record first and add the record again with the updated changes. To update an existing record, you must delete the record first and add the record again with the updated changes.
Batch changes are also susceptible to the following restrictions: Batch changes are also susceptible to the following restrictions:
- Current supported record types for batch change are: **A**, **AAAA**, **CNAME**, and **PTR**. - Current supported record types for batch change are: `A`, `AAAA`, `CNAME`, and `PTR`.
- Batch change requests must contain at least one change. - Batch change requests must contain at least one change.
- The maximum number of single changes within a batch change depends on the instance of VinylDNS. Contact your VinylDNS administrators to find the batch change limit for your instance. - The maximum number of single changes within a batch change depends on the instance of VinylDNS. Contact your VinylDNS administrators to find the batch change limit for your instance.
- Access permissions will follow existing rules (admin group or ACL access). Note that an update (delete and add of the same record name, zone and record type combination) requires **Write** access. - Access permissions will follow existing rules (admin group or ACL access). Note that an update (delete and add of the same record name, zone and record type combination) requires **Write** access.
@ -74,7 +74,7 @@ name | type | description |
------------ | :------------ | :---------- | ------------ | :------------ | :---------- |
changeType | ChangeInputType | Type of change input. Can either be an **Add** or **DeleteRecordSet**. [See more details](#changetype-values) about behavior of `changeType` interaction. | changeType | ChangeInputType | Type of change input. Can either be an **Add** or **DeleteRecordSet**. [See more details](#changetype-values) about behavior of `changeType` interaction. |
inputName | string | The fully-qualified domain name of the record which was provided in the create batch request. | inputName | string | The fully-qualified domain name of the record which was provided in the create batch request. |
type | RecordType | Type of DNS record, supported records for batch changes are currently: **A**, **AAAA**, **CNAME**, and **PTR**. | type | RecordType | Type of DNS record, supported records for batch changes are currently: `A`, `AAAA`, `CNAME`, and `PTR`. |
ttl | long | The time-to-live in seconds. | ttl | long | The time-to-live in seconds. |
record | [RecordData](recordset-model.html#record-data) | The data added for this record, which varies by record type. | record | [RecordData](recordset-model.html#record-data) | The data added for this record, which varies by record type. |
status | SingleChangeStatus | Status for this change. Can be one of: **Pending**, **Complete**, **Failed**, **NeedsReview** or **Rejected**. | status | SingleChangeStatus | Status for this change. Can be one of: **Pending**, **Complete**, **Failed**, **NeedsReview** or **Rejected**. |
@ -94,7 +94,7 @@ name | type | description |
------------ | :------------ | :---------- | ------------ | :------------ | :---------- |
changeType | ChangeInputType | Type of change input. Can either be an **Add** or **DeleteRecordSet**. [See more details](#changetype-values) about behavior of `changeType` interaction. | changeType | ChangeInputType | Type of change input. Can either be an **Add** or **DeleteRecordSet**. [See more details](#changetype-values) about behavior of `changeType` interaction. |
inputName | string | The fully-qualified domain name of the record which was provided in the create batch request. | inputName | string | The fully-qualified domain name of the record which was provided in the create batch request. |
type | RecordType | Type of DNS record, supported records for batch changes are currently: **A**, **AAAA**, **CNAME**, and **PTR**. | type | RecordType | Type of DNS record, supported records for batch changes are currently: `A`, `AAAA`, `CNAME`, and `PTR`. |
record | [RecordData](recordset-model.html#record-data) | Optional. The data deleted for this record, which varies by record type. If not provided, the entire DNS recordset was deleted. | record | [RecordData](recordset-model.html#record-data) | Optional. The data deleted for this record, which varies by record type. If not provided, the entire DNS recordset was deleted. |
status | SingleChangeStatus | Status for this change. Can be one of: **Pending**, **Complete**, **Failed**, **NeedsReview** or **Rejected**. | status | SingleChangeStatus | Status for this change. Can be one of: **Pending**, **Complete**, **Failed**, **NeedsReview** or **Rejected**. |
recordName | string | The name of the record. Record names for the apex will be match the zone name (including terminating dot). | recordName | string | The name of the record. Record names for the apex will be match the zone name (including terminating dot). |
@ -124,7 +124,7 @@ There are two valid `changeType`s for a `SingleChange`: **Add** and **DeleteReco
Successful batch change response example with a [SingleAddChange](#singleaddchange-attributes) and a [SingleDeleteRRSetChange](#singledeleterrsetchange-attributes). Successful batch change response example with a [SingleAddChange](#singleaddchange-attributes) and a [SingleDeleteRRSetChange](#singledeleterrsetchange-attributes).
``` ```json
{ {
"userId": "vinyl", "userId": "vinyl",
"userName": "vinyl201", "userName": "vinyl201",

View File

@ -8,7 +8,7 @@ section: "api"
Creates a batch change with [SingleAddChanges](batchchange-model.html#singleaddchange-attributes) and/or [SingleDeleteRRSetChanges](batchchange-model.html#singledeleterrsetchange-attributes) across different zones. A delete and add of the same record will be treated as an update on that record set. Regardless of the input order in the batch change, all deletes for the same recordset will be logically applied before the adds. Creates a batch change with [SingleAddChanges](batchchange-model.html#singleaddchange-attributes) and/or [SingleDeleteRRSetChanges](batchchange-model.html#singledeleterrsetchange-attributes) across different zones. A delete and add of the same record will be treated as an update on that record set. Regardless of the input order in the batch change, all deletes for the same recordset will be logically applied before the adds.
Current supported record types for creating a batch change are: **A**, **AAAA**, **CNAME**, **MX**, **PTR**, **TXT**. A batch must contain at least one change and no more than 20 changes. Current supported record types for creating a batch change are: `A`, `AAAA`, `CNAME`, `MX`, `PTR`, `TXT`. A batch must contain at least one change and no more than 20 changes.
Supported record types for records in shared zones may vary. Contact your VinylDNS administrators to find the allowed record types. Supported record types for records in shared zones may vary. Contact your VinylDNS administrators to find the allowed record types.
This does not apply to zone administrators or users with specific ACL access rules. This does not apply to zone administrators or users with specific ACL access rules.
@ -33,8 +33,8 @@ allowManualReview | boolean | no | Optional override to control wheth
name | type | required? | description | name | type | required? | description |
------------ | :------------ | ----------- | :---------- | ------------ | :------------ | ----------- | :---------- |
changeType | ChangeInputType | yes | Type of change input. Must be set to **Add** for *AddChangeInput*. | changeType | ChangeInputType | yes | Type of change input. Must be set to **Add** for *AddChangeInput*. |
inputName | string | yes | The fully qualified domain name of the record being added. For **PTR**, the input name is a valid IPv4 or IPv6 address. | inputName | string | yes | The fully qualified domain name of the record being added. For `PTR`, the input name is a valid IPv4 or IPv6 address. |
type | RecordType | yes | Type of DNS record. Supported records for batch changes are currently: **A**, **AAAA**, **CNAME**, and **PTR**. | type | RecordType | yes | Type of DNS record. Supported records for batch changes are currently: `A`, `AAAA`, `CNAME`, and `PTR`. |
ttl | long | no | The time-to-live in seconds. The minimum and maximum values are 30 and 2147483647, respectively. If excluded, this will be set to the system default for new adds, or the existing TTL for updates | ttl | long | no | The time-to-live in seconds. The minimum and maximum values are 30 and 2147483647, respectively. If excluded, this will be set to the system default for new adds, or the existing TTL for updates |
record | [RecordData](recordset-model.html#record-data) | yes | The data for the record. | record | [RecordData](recordset-model.html#record-data) | yes | The data for the record. |
@ -44,12 +44,12 @@ name | type | required? | description |
------------ | :------------ | ----------- | :---------- | ------------ | :------------ | ----------- | :---------- |
changeType | ChangeInputType | yes | Type of change input. Must be **DeleteRecordSet** for *DeleteChangeInput*. | changeType | ChangeInputType | yes | Type of change input. Must be **DeleteRecordSet** for *DeleteChangeInput*. |
inputName | string | yes | The fully qualified domain name of the record being deleted. | inputName | string | yes | The fully qualified domain name of the record being deleted. |
type | RecordType | yes | Type of DNS record. Supported records for batch changes are currently: **A**, **AAAA**, **CNAME**, and **PTR**. | type | RecordType | yes | Type of DNS record. Supported records for batch changes are currently: `A`, `AAAA`, `CNAME`, and `PTR`. |
record | [RecordData](recordset-model.html#record-data) | no | The data for the record. If specified, only this DNS entry for the existing DNS recordset will be deleted; if unspecified, the entire DNS recordset will be deleted. | record | [RecordData](recordset-model.html#record-data) | no | The data for the record. If specified, only this DNS entry for the existing DNS recordset will be deleted; if unspecified, the entire DNS recordset will be deleted. |
#### EXAMPLE HTTP REQUEST #### EXAMPLE HTTP REQUEST
``` ```json
{ {
"comments": "this is optional", "comments": "this is optional",
"ownerGroupId": "f42385e4-5675-38c0-b42f-64105e743bfe", "ownerGroupId": "f42385e4-5675-38c0-b42f-64105e743bfe",
@ -98,7 +98,7 @@ record | [RecordData](recordset-model.html#record-data) | no | Th
} }
``` ```
The first two items in the changes list are SingleAddChanges of an **A** record and a **PTR** record. Note that for the **PTR** record, the *inputName* is a valid IP address. The third item is a delete of a **CNAME** record. The last two items represent an update (delete & add) of an **AAAA** record with the fully qualified domain name "update.another.example.com.". The first two items in the changes list are SingleAddChanges of an `A` record and a `PTR` record. Note that for the `PTR` record, the *inputName* is a valid IP address. The third item is a delete of a `CNAME` record. The last two items represent an update (delete & add) of an `AAAA` record with the fully qualified domain name "update.another.example.com.".
#### HTTP RESPONSE TYPES #### HTTP RESPONSE TYPES
@ -121,7 +121,7 @@ On success, the response from create batch change includes the fields the user i
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"userId": "vinyl", "userId": "vinyl",
"userName": "vinyl201", "userName": "vinyl201",

View File

@ -24,7 +24,7 @@ admins | Array of User id objects | yes | Set of User ids
#### EXAMPLE HTTP REQUEST #### EXAMPLE HTTP REQUEST
``` ```json
{ {
"name": "some-group", "name": "some-group",
"email": "test@example.com", "email": "test@example.com",
@ -67,7 +67,7 @@ admins | Array of User ID objects | IDs of admins of the group |
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"id": "6f8afcda-7529-4cad-9f2d-76903f4b1aca", "id": "6f8afcda-7529-4cad-9f2d-76903f4b1aca",
"name": "some-group", "name": "some-group",

View File

@ -24,7 +24,7 @@ records | array of record data | yes | record data for recordset, see [Re
ownerGroupId | string | no | Record ownership assignment, applicable if the recordset is in a [shared zone](zone-model.html#shared-zones) | ownerGroupId | string | no | Record ownership assignment, applicable if the recordset is in a [shared zone](zone-model.html#shared-zones) |
#### EXAMPLE HTTP REQUEST #### EXAMPLE HTTP REQUEST
``` ```json
{ {
"name": "foo", "name": "foo",
"type": "A", "type": "A",
@ -66,7 +66,7 @@ singleBatchChangeIds | array of SingleBatchChange Id objects | If the recordse
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"zone": { "zone": {
"name": "vinyl.", "name": "vinyl.",

View File

@ -18,7 +18,7 @@ if no info is provided the default VinylDNS connections will be used
**zone fields** - adminGroupId, name, and email are required - refer to [zone model](zone-model.html) | **zone fields** - adminGroupId, name, and email are required - refer to [zone model](zone-model.html) |
#### EXAMPLE HTTP REQUEST #### EXAMPLE HTTP REQUEST
``` ```json
{ {
"adminGroupId": "9b22b686-54bc-47fb-a8f8-cdc48e6d04ae", "adminGroupId": "9b22b686-54bc-47fb-a8f8-cdc48e6d04ae",
"name": "dummy.", "name": "dummy.",
@ -49,7 +49,7 @@ id | string | The ID of the change. This is not the ID of the
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"status": "Pending", "status": "Pending",
"zone": { "zone": {

View File

@ -37,7 +37,7 @@ admins | Array of User ID objects | IDs of admins of the group |
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"id": "6f8afcda-7529-4cad-9f2d-76903f4b1aca", "id": "6f8afcda-7529-4cad-9f2d-76903f4b1aca",
"name": "some-group", "name": "some-group",

View File

@ -36,7 +36,7 @@ id | string | The ID of the change. This is not the ID of the
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"zone": { "zone": {
"name": "vinyl.", "name": "vinyl.",

View File

@ -40,7 +40,7 @@ status | string | The status of the zone change |
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"status": "Pending", "status": "Pending",
"zone": { "zone": {

View File

@ -50,7 +50,7 @@ cancelledTimestamp | date-time | Optional timestamp (UTC) if the batch change wa
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"userId": "vinyl", "userId": "vinyl",
"userName": "vinyl201", "userName": "vinyl201",

View File

@ -35,7 +35,7 @@ admins | Array of User Id objects | Ids of admins of the group |
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"id": "6f8afcda-7529-4cad-9f2d-76903f4b1aca", "id": "6f8afcda-7529-4cad-9f2d-76903f4b1aca",
"name": "some-group", "name": "some-group",

View File

@ -37,7 +37,7 @@ singleBatchChangeIds | array of SingleBatchChange ID objects | If the recordse
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"zone": { "zone": {
"name": "vinyl.", "name": "vinyl.",

View File

@ -42,7 +42,7 @@ ownerGroupName | string | Name of assigned owner group, if found |
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"type": "A", "type": "A",
"zoneId": "2467dc05-68eb-4498-a9d5-78d24bb0893c", "zoneId": "2467dc05-68eb-4498-a9d5-78d24bb0893c",

View File

@ -29,7 +29,7 @@ zone | map | refer to [zone model](zone-model.html) |
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"zone": { "zone": {
"status": "Active", "status": "Active",

View File

@ -29,7 +29,7 @@ zone | map | refer to [zone model](zone-model.html) |
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"zone": { "zone": {
"status": "Active", "status": "Active",

View File

@ -60,7 +60,7 @@ approvalStatus | BatchChangeApprovalStatus | Whether the batch change is cu
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"batchChanges": [ "batchChanges": [
{ {

View File

@ -48,7 +48,7 @@ changeType | string | The type change, either Create, Update, or Delet
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"maxItems": 100, "maxItems": 100,
"changes": [ "changes": [

View File

@ -28,7 +28,7 @@ admins | Array of Users | refer to [membership model](membership-model.ht
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"admins": [ "admins": [
{ {

View File

@ -38,7 +38,7 @@ maxItems | integer | maxItems sent in request, default is 100 |
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"members": [ "members": [
{ {

View File

@ -41,7 +41,7 @@ ignoreAccess | boolean | The ignoreAccess parameter that was sent in the
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"maxItems": 100, "maxItems": 100,
"groups": [ "groups": [

View File

@ -44,7 +44,7 @@ status | string | The status of the change (Pending, Complete, Fai
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"recordSetChanges": [ "recordSetChanges": [
{ {

View File

@ -45,7 +45,7 @@ nameSort | string | name sort order sent in request
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"recordSets": [ "recordSets": [
{ {

View File

@ -45,7 +45,7 @@ nameSort | string | name sort order sent in request
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"recordSets": [ "recordSets": [
{ {
@ -66,7 +66,7 @@ nameSort | string | name sort order sent in request
"zoneName": "example.com.", "zoneName": "example.com.",
"zoneShared": true "zoneShared": true
} }
] ],
"maxItems": 100, "maxItems": 100,
"recordNameFilter": "foo*", "recordNameFilter": "foo*",
"recordTypeFilter": [ "recordTypeFilter": [

View File

@ -40,7 +40,7 @@ maxItems | int | The maxItems parameter that was sent in on the H
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"zoneId": "2467dc05-68eb-4498-a9d5-78d24bb0893c", "zoneId": "2467dc05-68eb-4498-a9d5-78d24bb0893c",
"zoneChanges": [ "zoneChanges": [

View File

@ -41,7 +41,7 @@ ignoreAccess | boolean | The ignoreAccess parameter that was sent in the
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"zones": [ "zones": [
{ {

View File

@ -41,7 +41,7 @@ the group, deleting users from the group, toggling other users' admin statuses (
#### GROUP EXAMPLE <a id="group-example"></a> #### GROUP EXAMPLE <a id="group-example"></a>
``` ```json
{ {
"id": "dc4c7c79-5bbc-41bf-992e-8d6c4ec574c6", "id": "dc4c7c79-5bbc-41bf-992e-8d6c4ec574c6",
"name": "some-group", "name": "some-group",
@ -80,7 +80,7 @@ To get your access and secret keys, log into the VinylDNS portal and then with t
#### USER EXAMPLE <a id="user-example"></a> #### USER EXAMPLE <a id="user-example"></a>
``` ```json
{ {
"userName": "jdoe201", "userName": "jdoe201",
"firstName": "John", "firstName": "John",

View File

@ -18,7 +18,7 @@ field | type | description |
------------ | :---------- | :---------- | ------------ | :---------- | :---------- |
zoneId | string | the id of the zone to which this recordset belongs | zoneId | string | the id of the zone to which this recordset belongs |
name | string | The name of the RecordSet | name | string | The name of the RecordSet |
type | string | Type of DNS record, supported records are currently: A, AAAA, CNAME, DS, MX, NAPTR, NS, PTR, SOA, SRV, TXT, SSHFP, and SPF. Unsupported types will be given the type UNKNOWN | type | string | Type of DNS record, supported records are currently: `A`, `AAAA`, `CNAME`, `DS`, `MX`, `NAPTR`, `NS`, `PTR`, `SOA`, `SRV`, `TXT`, `SSHFP`, and `SPF`. Unsupported types will be given the type `UNKNOWN` |
ttl | long | the TTL in seconds for the recordset | ttl | long | the TTL in seconds for the recordset |
status | string | *Active* - RecordSet is added is created and ready for use, *Inactive* - RecordSet effects are not applied, *Pending* - RecordSet is queued for creation, *PendingUpdate* - RecordSet is queued for update, *PendingDelete* - RecordSet is queued for delete | status | string | *Active* - RecordSet is added is created and ready for use, *Inactive* - RecordSet effects are not applied, *Pending* - RecordSet is queued for creation, *PendingUpdate* - RecordSet is queued for update, *PendingDelete* - RecordSet is queued for delete |
created | date-time | The timestamp (UTC) when the recordset was created | created | date-time | The timestamp (UTC) when the recordset was created |
@ -29,7 +29,7 @@ account | string | **DEPRECATED** The account that created the Record
#### RecordSet EXAMPLE <a id="recordset-example"></a> #### RecordSet EXAMPLE <a id="recordset-example"></a>
``` ```json
{ {
"type": "A", "type": "A",
"zoneId": "8f8f649f-998e-4428-a029-b4ba5f5bd4ca", "zoneId": "8f8f649f-998e-4428-a029-b4ba5f5bd4ca",
@ -54,72 +54,72 @@ account | string | **DEPRECATED** The account that created the Record
``` ```
#### RECORD DATA INFORMATION <a id="record-data"></a> #### RECORD DATA INFORMATION <a id="record-data"></a>
Current supported record types are: A, AAAA, CNAME, DS, MX, NAPTR, NS, PTR, SOA, SRV, TXT, SSHFP, and SPF. Current supported record types are: `A`, `AAAA`, `CNAME`, `DS`, `MX`, `NAPTR`, `NS`, `PTR`, `SOA`, `SRV`, `TXT`, `SSHFP`, and `SPF`.
Each individual record encodes its data in a record data object, in which each record type has different required attributes Each individual record encodes its data in a record data object, in which each record type has different required attributes
<br><br> <br><br>
SOA records and NS origin records (record with the same name as the zone) are currently read-only and cannot be created, updated or deleted. `SOA` records and `NS` origin records (record with the same name as the zone) are currently read-only and cannot be created, updated or deleted.
Non-origin NS records can be created or updated for [approved name servers](../operator/config-api.html#additional-configuration-settings) only. Any non-origin NS record can be deleted. Non-origin `NS` records can be created or updated for [approved name servers](../operator/config-api.html#additional-configuration-settings) only. Any non-origin `NS` record can be deleted.
record type | attribute | type | record type | attribute | type |
------------ | :---------- | :---------- | ------------ | :---------- | :---------- |
A | address | string | `A` | `address` | `string` |
<br> | | | <br> | | |
AAAA | address | string | `AAAA` | `address` | `string` |
<br> | | | <br> | | |
CNAME | cname | string | `CNAME` | `cname` | `string` |
<br> | | | <br> | | |
DS | keytag | integer | `DS` | `keytag` | `integer` |
DS | algorithm | integer | `DS` | `algorithm` | `integer` |
DS | digesttype | integer | `DS` | `digesttype` | `integer` |
DS | digest | string | `DS` | `digest` | `string` |
<br> | | | <br> | | |
MX | preference | integer | `MX` | `preference` | `integer` |
MX | exchange | string | `MX` | `exchange` | `string` |
<br> | | | <br> | | |
NAPTR | order | integer | `NAPTR` | `order` | `integer` |
NAPTR | preference | integer | `NAPTR` | `preference` | `integer` |
NAPTR | flags | string | `NAPTR` | `flags` | `string` |
NAPTR | service | string | `NAPTR` | `service` | `string` |
NAPTR | regexp | string | `NAPTR` | `regexp` | `string` |
NAPTR | replacement | string | `NAPTR` | `replacement` | `string` |
<br> | | | <br> | | |
NS | nsdname | string | `NS` | `nsdname` | `string` |
<br> | | | <br> | | |
PTR | ptrdname | string | `PTR` | `ptrdname` | `string` |
<br> | | | <br> | | |
SOA | mname | string | `SOA` | `mname` | `string` |
SOA | rname | string | `SOA` | `rname` | `string` |
SOA | serial | long | `SOA` | `serial` | `long` |
SOA | refresh | long | `SOA` | `refresh` | `long` |
SOA | retry | long | `SOA` | `retry` | `long` |
SOA | expire | long | `SOA` | `expire` | `long` |
SOA | minimum | long | `SOA` | `minimum` | `long` |
<br> | | | <br> | | |
SPF | text | string | `SPF` | `text` | `string` |
<br> | | | <br> | | |
SRV | priority | integer | `SRV` | `priority` | `integer` |
SRV | weight | integer | `SRV` | `weight` | `integer` |
SRV | port | integer | `SRV` | `port` | `integer` |
SRV | target | string | `SRV` | `target` | `string` |
<br> | | | <br> | | |
SSHFP | algorithm | integer | `SSHFP` | `algorithm` | `integer` |
SSHFP | type | integer | `SSHFP` | `type` | `integer` |
SSHFP | fingerprint | string | `SSHFP` | `fingerprint` | `string` |
<br> | | | <br> | | |
TXT | text | string | `TXT` | `text` | `string` |
#### RECORD DATA EXAMPLE <a id="record-data-example"></a> #### RECORD DATA EXAMPLE <a id="record-data-example"></a>
Each record is a map that must include all attributes for the data type, the records are stored in the records field of the RecordSet. Each record is a map that must include all attributes for the data type, the records are stored in the records field of the RecordSet.
The records must be an array of at least one record map. All records in the records array must be of the type stored in the typ field of the RecordSet The records must be an array of at least one record map. All records in the records array must be of the type stored in the typ field of the RecordSet
Use the *@* symbol to point to the zone origin Use the `@` symbol to point to the zone origin
**CNAME records cannot point to the zone origin, thus the RecordSet name cannot be @ nor the zone origin** **`CNAME` records cannot point to the zone origin, thus the RecordSet name cannot be `@` nor the zone origin**
Individual SSHFP record: Individual `SSHFP` record:
``` ```json
{ {
"type": "SSHFP", "type": "SSHFP",
"zoneId": "8f8f649f-998e-4428-a029-b4ba5f5bd4ca", "zoneId": "8f8f649f-998e-4428-a029-b4ba5f5bd4ca",
@ -139,9 +139,9 @@ Individual SSHFP record:
} }
``` ```
Multiple SSHFP records: Multiple `SSHFP` records:
``` ```json
{ {
"type": "SSHFP", "type": "SSHFP",
"zoneId": "8f8f649f-998e-4428-a029-b4ba5f5bd4ca", "zoneId": "8f8f649f-998e-4428-a029-b4ba5f5bd4ca",

View File

@ -7,7 +7,7 @@ section: "api"
# Reject Batch Change # Reject Batch Change
Manually rejects a batch change in pending review status given the batch change ID, resulting in immediate failure. Only Manually rejects a batch change in pending review status given the batch change ID, resulting in immediate failure. Only
system administrators (ie. support or super user) can manually review a batch change. system administrators (i.e., support or super user) can manually review a batch change.
Note: If [manual review is disabled](../operator/config-api.html#manual-review) in the VinylDNS instance, Note: If [manual review is disabled](../operator/config-api.html#manual-review) in the VinylDNS instance,
users trying to access this endpoint will encounter a **404 Not Found** response since it will not exist. users trying to access this endpoint will encounter a **404 Not Found** response since it will not exist.
@ -27,7 +27,7 @@ reviewComment | string | no | Optional rejection explanation. |
#### EXAMPLE HTTP REQUEST #### EXAMPLE HTTP REQUEST
``` ```json
{ {
"reviewComment": "Comments are optional." "reviewComment": "Comments are optional."
} }
@ -64,7 +64,7 @@ reviewTimestamp | date-time | The timestamp (UTC) of when the batch change was
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"userId": "vinyl", "userId": "vinyl",
"userName": "vinyl201", "userName": "vinyl201",

View File

@ -49,7 +49,7 @@ id | string | The ID of the change. This is not the id of the
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"status": "Pending", "status": "Pending",
"zone": { "zone": {

View File

@ -27,7 +27,7 @@ admins | Array of User ID objects | yes | Set of User IDs that
#### EXAMPLE HTTP REQUEST #### EXAMPLE HTTP REQUEST
``` ```json
{ {
"id": "6f8afcda-7529-4cad-9f2d-76903f4b1aca", "id": "6f8afcda-7529-4cad-9f2d-76903f4b1aca",
"name": "some-group", "name": "some-group",
@ -76,7 +76,7 @@ admins | Array of User Id objects | Ids of admins of the group |
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"id": "6f8afcda-7529-4cad-9f2d-76903f4b1aca", "id": "6f8afcda-7529-4cad-9f2d-76903f4b1aca",
"name": "some-group", "name": "some-group",

View File

@ -28,7 +28,7 @@ ownerGroupId | string | sometimes* | Record ownership assignmen
*Note: If a recordset has an ownerGroupId you must include that value in the update request, otherwise the update will remove the ownerGroupId value *Note: If a recordset has an ownerGroupId you must include that value in the update request, otherwise the update will remove the ownerGroupId value
#### EXAMPLE HTTP REQUEST #### EXAMPLE HTTP REQUEST
``` ```json
{ {
"id": "dd9c1120-0594-4e61-982e-8ddcbc8b2d21", "id": "dd9c1120-0594-4e61-982e-8ddcbc8b2d21",
"name": "already-exists", "name": "already-exists",
@ -72,7 +72,7 @@ singleBatchChangeIds | array of SingleBatchChange ID objects | If the recordse
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"zone": { "zone": {
"name": "vinyl.", "name": "vinyl.",

View File

@ -18,7 +18,7 @@ Updates an existing zone that has already been connected to. Used to update the
#### EXAMPLE HTTP REQUEST #### EXAMPLE HTTP REQUEST
``` ```json
{ {
"name": "vinyl.", "name": "vinyl.",
"email": "update@update.com", "email": "update@update.com",
@ -63,7 +63,7 @@ status | string | The status of the zone change
#### EXAMPLE RESPONSE #### EXAMPLE RESPONSE
``` ```json
{ {
"zone": { "zone": {
"name": "vinyl.", "name": "vinyl.",

View File

@ -41,7 +41,7 @@ accessLevel | string | Access level of the user requesting the zone. Curr
#### ZONE EXAMPLE <a id="zone-example"></a> #### ZONE EXAMPLE <a id="zone-example"></a>
``` ```json
{ {
"status": "Active", "status": "Active",
"updated": "2016-12-16T15:27:28Z", "updated": "2016-12-16T15:27:28Z",
@ -122,7 +122,7 @@ The priority of ACL Rules in descending precedence: <br>
For conflicting rules, the rule that is more specific will take precedence. For example, if the account *jdoe201* was given Read access to all records in a zone For conflicting rules, the rule that is more specific will take precedence. For example, if the account *jdoe201* was given Read access to all records in a zone
through the rule: through the rule:
``` ```json
{ {
"userId": "<uuid>", "userId": "<uuid>",
"accessLevel": "Read", "accessLevel": "Read",
@ -131,7 +131,7 @@ through the rule:
and then Write access to only A records through the rule: and then Write access to only A records through the rule:
``` ```json
{ {
"userId": "<uuid>", "userId": "<uuid>",
"accessLevel": "Write", "accessLevel": "Write",
@ -141,7 +141,7 @@ and then Write access to only A records through the rule:
and then Delete access to only A records that matched the expression \*dev\* through the rule: and then Delete access to only A records that matched the expression \*dev\* through the rule:
``` ```json
{ {
"userId": "<uuid>", "userId": "<uuid>",
"accessLevel": "Delete", "accessLevel": "Delete",
@ -154,10 +154,10 @@ then the rule with the recordMask will take precedence and give Delete access to
take precedence and give Write access to all other A records, and the more broad rule will give Read access to all other record types in the zone take precedence and give Write access to all other A records, and the more broad rule will give Read access to all other record types in the zone
#### ZONE ACL RULE EXAMPLES <a id="zone-acl-rule-example"></a> #### ZONE ACL RULE EXAMPLES <a id="zone-acl-rule-example"></a>
**Grant read/write/delete access to www.* records of type A, AAAA, CNAME to one user** **Grant read/write/delete access to www.* records of type `A`, `AAAA`, `CNAME` to one user**
Under this rule, the user specified will be able to view, create, edit, and delete records in the zone that match the expression `www.*` and are of type A, AAAA, or CNAME. Under this rule, the user specified will be able to view, create, edit, and delete records in the zone that match the expression `www.*` and are of type `A`, `AAAA`, or `CNAME`.
``` ```json
{ {
"recordMask": "www.*", "recordMask": "www.*",
"accessLevel": "Delete", "accessLevel": "Delete",
@ -166,18 +166,18 @@ Under this rule, the user specified will be able to view, create, edit, and dele
} }
``` ```
**Grant read only access to all VinylDNS users to A, AAAA, CNAME records** **Grant read only access to all VinylDNS users to `A`, `AAAA`, `CNAME` records**
``` ```json
{ {
"accessLevel": "Read", "accessLevel": "Read",
"recordTypes": ["A", "AAAA", "CNAME"] "recordTypes": ["A", "AAAA", "CNAME"]
} }
``` ```
**Grant read/write/delete access to records of type A, AAAA, CNAME to one group*** **Grant read/write/delete access to records of type `A`, `AAAA`, `CNAME` to one group***
``` ```json
{ {
"accessLevel": "Delete", "accessLevel": "Delete",
"groupId": "<uuid>", "groupId": "<uuid>",
@ -187,48 +187,48 @@ Under this rule, the user specified will be able to view, create, edit, and dele
### PTR ACL RULES WITH CIDR MASKS <a id="ptr-acl-rule"></a> ### PTR ACL RULES WITH CIDR MASKS <a id="ptr-acl-rule"></a>
ACL rules can be applied to specific record types and can include record masks to further narrow down which records they ACL rules can be applied to specific record types and can include record masks to further narrow down which records they
apply to. These record masks apply to record names, but because PTR record names are part their reverse zone ip, the use of regular apply to. These record masks apply to record names, but because `PTR` record names are part their reverse zone ip, the use of regular
expressions for record masks are not supported. expressions for record masks are not supported.
<br><br> <br><br>
Instead PTR record masks must be CIDR rules, which will denote a range of IP addresses that the rule will apply to. Instead `PTR` record masks must be CIDR rules, which will denote a range of IP addresses that the rule will apply to.
While more information and useful CIDR rule utility tools can be found online, CIDR rules describe how many bits of an ip address' binary representation While more information and useful CIDR rule utility tools can be found online, CIDR rules describe how many bits of an ip address' binary representation
must be the same for a match. must be the same for a match.
### PTR ACL RULES WITH CIDR MASKS EXAMPLE <a id="ptr-acl-rule-example"></a> ### PTR ACL RULES WITH CIDR MASKS EXAMPLE <a id="ptr-acl-rule-example"></a>
The ACL Rule The ACL Rule
``` ```json
{ {
recordTypes: ["PTR"], "recordTypes": ["PTR"],
accessLevel: "Read" "accessLevel": "Read"
} }
``` ```
Will give Read permissions to PTR Record Sets to all users in VinylDNS Will give Read permissions to `PTR` Record Sets to all users in VinylDNS
<br><br> <br><br>
The **IPv4** ACL Rule The **IPv4** ACL Rule
``` ```json
{ {
recordTypes: ["PTR"], "recordTypes": ["PTR"],
accessLevel: "Read", "accessLevel": "Read",
recordMask: "100.100.100.100/16" "recordMask": "100.100.100.100/16"
} }
``` ```
Will give Read permissions to PTR Record Sets 100.100.000.000 to 100.100.255.255, as 16 bits is half of an IPv4 address Will give Read permissions to `PTR` Record Sets 100.100.000.000 to 100.100.255.255, as 16 bits is half of an IPv4 address
<br><br> <br><br>
The **IPv6** ACL Rule The **IPv6** ACL Rule
``` ```json
{ {
recordTypes: ["PTR"], "recordTypes": ["PTR"],
accessLevel: "Read", "accessLevel": "Read",
recordMask: "1000:1000:1000:1000:1000:1000:1000:1000/64" "recordMask": "1000:1000:1000:1000:1000:1000:1000:1000/64"
} }
``` ```
Will give Read permissions to PTR Record Sets 1000:1000:1000:1000:0000:0000:0000:0000 to 1000:1000:1000:1000:FFFF:FFFF:FFFF:FFFF, as 64 bits is half of an IPv6 address. Will give Read permissions to `PTR` Record Sets 1000:1000:1000:1000:0000:0000:0000:0000 to 1000:1000:1000:1000:FFFF:FFFF:FFFF:FFFF, as 64 bits is half of an IPv6 address.
#### ZONE CONNECTION ATTRIBUTES <a id="zone-conn-attr"></a> #### ZONE CONNECTION ATTRIBUTES <a id="zone-conn-attr"></a>
In order for VinylDNS to make updates in DNS, it needs key information for every zone. There are 3 ways to specify that key information; ask your VinylDNS admin which is appropriate for your zone based on the configuration of the service: In order for VinylDNS to make updates in DNS, it needs key information for every zone. There are 3 ways to specify that key information; ask your VinylDNS admin which is appropriate for your zone based on the configuration of the service:
@ -250,7 +250,7 @@ key | string | The TSIG secret key used to sign requests when com
#### ZONE CONNECTION EXAMPLE <a id="zone-conn-example"></a> #### ZONE CONNECTION EXAMPLE <a id="zone-conn-example"></a>
``` ```json
{ {
"primaryServer": "127.0.0.1:5301", "primaryServer": "127.0.0.1:5301",
"keyName": "vinyl.", "keyName": "vinyl.",

View File

@ -32,9 +32,9 @@ of your zone. This ID is also present in the URL (if on that page its the ID
To create a record with the same name as your zone, you have to use the special To create a record with the same name as your zone, you have to use the special
`@` character for the record name when you create your record set. `@` character for the record name when you create your record set.
You cannot create CNAME records with *@* as those are not supported. While some DNS services like You cannot create `CNAME` records with `@` as those are not supported. While some DNS services like
Route 53 support an ALIAS record type that _does_ support a CNAME style *@*, ALIAS are not an official standard yet. Route 53 support an ALIAS record type that _does_ support a `CNAME` style `@`, ALIAS are not an official standard yet.
All other record types should be fine using the *@* symbol. All other record types should be fine using the `@` symbol.
### 4. When I try to connect to my zone, I am seeing REFUSED <a id="4"></a> ### 4. When I try to connect to my zone, I am seeing REFUSED <a id="4"></a>
When VinylDNS connects to a zone, it first validates that the zone is suitable When VinylDNS connects to a zone, it first validates that the zone is suitable

View File

@ -6,8 +6,8 @@ position: 7
# Getting Help # Getting Help
- Gitter community: - VinylDNS Discussions:
<https://gitter.im/vinyldns/vinyldns> <https://github.com/vinyldns/vinyldns/discussions>
- Contact the VinylDNS Core Team: - Contact the VinylDNS Core Team:
vinyldns-core@googlegroups.com vinyldns-core@googlegroups.com

View File

@ -21,7 +21,7 @@ VinylDNS helps secure DNS management via:
* Recording every change made to DNS records and zones * Recording every change made to DNS records and zones
Integration is simple with first-class language support including: Integration is simple with first-class language support including:
* java * Java
* ruby * JavaScript
* python * Python
* go-lang * Go

View File

@ -18,12 +18,9 @@ The portal configuration is much smaller than the API Server.
- [Full Example Config](#full-example-config) - [Full Example Config](#full-example-config)
## Database Configuration ## Database Configuration
VinylDNS supports both DynamoDB and MySQL backends (see [API Database Configuration](config-api.html#database-configuration)). VinylDNS supports a MySQL backend (see [API Database Configuration](config-api.html#database-configuration)).
If using DynamoDB, follow the [AWS DynamoDB Setup Guide](setup-dynamodb.html) first to get the values you need to configure here.
If using MySQL, follow the [MySQL Setup Guide](setup-mysql.html) first to get the values you need to configure here.
Follow the [MySQL Setup Guide](setup-mysql.html) first to get the values you need to configure here.
The Portal uses the following tables: The Portal uses the following tables:
@ -37,7 +34,7 @@ the same values in both configs:
vinyldns { vinyldns {
# this list should include only the datastores being used by your portal instance (user and userChange repo) # this list should include only the datastores being used by your portal instance (user and userChange repo)
data-stores = ["dynamodb", "mysql"] data-stores = ["mysql"]
mysql { mysql {
@ -102,39 +99,6 @@ vinyldns {
} }
} }
} }
dynamodb {
# this is the path to the DynamoDB provider. This should not be edited
# from the default in reference.conf
class-name = "vinyldns.dynamodb.repository.DynamoDBDataStoreProvider"
settings {
# AWS_ACCESS_KEY, credential needed to access the SQS queue
key = "x"
# AWS_SECRET_ACCESS_KEY, credential needed to access the SQS queue
secret = "x"
# DynamoDB url for the region you are running in, this example is in us-east-1
endpoint = "https://dynamodb.us-east-1.amazonaws.com"
# DynamoDB region
region = "us-east-1"
}
repositories {
# all repositories with config sections here will be enabled in dynamodb
user-change {
# Name of the table where user changes are saved
table-name = "userChangeTest"
# Provisioned throughput for reads
provisioned-reads = 30
# Provisioned throughput for writes
provisioned-writes = 20
}
}
}
} }
``` ```
@ -216,7 +180,7 @@ links = [
title = "API Documentation" title = "API Documentation"
# the hyperlink address being linked to # the hyperlink address being linked to
href = "http://vinyldns.io" href = "https://vinyldns.io"
# a fa icon to display # a fa icon to display
icon = "fa fa-file-text-o" icon = "fa fa-file-text-o"
@ -230,7 +194,7 @@ links = [
The play secret must be set to a secret value, and should be an environment variable The play secret must be set to a secret value, and should be an environment variable
```yaml ```yaml
# See http://www.playframework.com/documentation/latest/ApplicationSecret for more details. # See https://www.playframework.com/documentation/latest/ApplicationSecret for more details.
play.http.secret.key = "vinyldnsportal-change-this-for-production" play.http.secret.key = "vinyldnsportal-change-this-for-production"
``` ```
@ -277,7 +241,7 @@ Allows users to schedule changes to be run sometime in the future
# #
# This must be changed for production, but we recommend not changing it in this file. # This must be changed for production, but we recommend not changing it in this file.
# #
# See http://www.playframework.com/documentation/latest/ApplicationSecret for more details. # See https://www.playframework.com/documentation/latest/ApplicationSecret for more details.
play.http.secret.key = "vinyldnsportal-change-this-for-production" play.http.secret.key = "vinyldnsportal-change-this-for-production"
# The application languages # The application languages
@ -374,7 +338,7 @@ links = [
displayOnSidebar = true displayOnSidebar = true
displayOnLoginScreen = true displayOnLoginScreen = true
title = "API Documentation" title = "API Documentation"
href = "http://vinyldns.io" href = "https://vinyldns.io"
icon = "fa fa-file-text-o" icon = "fa fa-file-text-o"
} }
] ]

View File

@ -1,137 +1,125 @@
--- ---
layout: docs layout: docs title: "Pre-requisites"
title: "Pre-requisites"
section: "operator_menu" section: "operator_menu"
--- ---
# VinylDNS Pre-requisites # VinylDNS Pre-requisites
VinylDNS has the following external requirements that need to be setup so that VinylDNS can operate. Those include:
VinylDNS has the following external requirements that need to be setup so that VinylDNS can operate. Those include:
1. [DNS](#dns) - your DNS servers VinylDNS will interact with 1. [DNS](#dns) - your DNS servers VinylDNS will interact with
1. [Database](#database) - the database houses all of VinylDNS information including history, records, zones, and users 1. [Database](#database) - the database houses all of VinylDNS information including history, records, zones, and users
1. [Message Queue](#message-queues) - the message queue supports high-availability and throttling of commands to DNS backend servers 1. [Message Queue](#message-queues) - the message queue supports high-availability and throttling of commands to DNS
1. [LDAP](#ldap) - ldap supports both authentication as well as the source of truth for users that are managed inside the VinylDNS database backend servers
1. [LDAP](#ldap) - ldap supports both authentication as well as the source of truth for users that are managed inside
the VinylDNS database
## DNS ## DNS
VinylDNS is **not a DNS**, rather it integrates with your existing DNS installations to enable DNS self-service and streamline
DNS operations. VinylDNS is **not a DNS**, rather it integrates with your existing DNS installations to enable DNS self-service and
streamline DNS operations.
VinylDNS communicates to your DNS via: VinylDNS communicates to your DNS via:
* `DDNS` - DDNS is used for all record updates * `DDNS` - DDNS is used for all record updates
* `AXFR` - Zone Transfers are used to load DNS records into the VinylDNS database. * `AXFR` - Zone Transfers are used to load DNS records into the VinylDNS database.
VinylDNS communicates to your DNS using "connections". A connection allows you to specify: VinylDNS communicates to your DNS using "connections". A connection allows you to specify:
1. The TSIG key name 1. The TSIG key name
1. The TSIG key secret 1. The TSIG key secret
1. The server (and optionally port) to communicate to DNS with 1. The server (and optionally port) to communicate to DNS with
There are **2** connections, one for DDNS and another for zone transfers. This allows you to use a different DNS server / key There are **2** connections, one for DDNS and another for zone transfers. This allows you to use a different DNS server
for zone transfers. / key for zone transfers.
Connections (DDNS and Transfer) can be setup Connections (DDNS and Transfer) can be setup
* `per zone` - every zone can override the global default by specifying its own connections. * `per zone` - every zone can override the global default by specifying its own connections.
* `global default` - assuming you are managing a primary system, you can [configure default zone connections](config-api.html#default-zone-connections). * `global default` - assuming you are managing a primary system, you
When no zone connection is specified on a zone, the global defaults will be used. can [configure default zone connections](config-api.html#default-zone-connections). When no zone connection is
specified on a zone, the global defaults will be used.
## Database ## Database
[database]: #database [database]: #database
The VinylDNS database has a `NoSQL` / non-relational design to it. Instead of having a heavily normalized set of SQL tables The VinylDNS database has a `NoSQL` / non-relational design to it. Instead of having a heavily normalized set of SQL
that surface in the system, VinylDNS relies on `Repositories` where each `Repository` is independent of each one another. tables that surface in the system, VinylDNS relies on `Repositories` where each `Repository` is independent of each one
This allows implementers to best map each `Repository` into the data-store of choice. another. This allows implementers to best map each `Repository` into the data-store of choice.
As `Repositories` are independent, there are no "transactions" that span repositories. Each `Repository` implementation As `Repositories` are independent, there are no "transactions" that span repositories. Each `Repository` implementation
can choose to use transactions if it maps to multiple tables within itself. can choose to use transactions if it maps to multiple tables within itself.
There are **links** across repositories, for example the `RecordSet.id` would be referenced in a `RecordSetChangeRepository`. There are **links** across repositories, for example the `RecordSet.id` would be referenced in
a `RecordSetChangeRepository`.
The following are the repositories presently used by VinylDNS: The following are the repositories presently used by VinylDNS:
* `RecordSetRepository` - Instead of individual DNS records, VinylDNS works at the `RRSet`. The unique key for RecordSet is * `RecordSetRepository` - Instead of individual DNS records, VinylDNS works at the `RRSet`. The unique key for RecordSet
the `record name` + `record type` is the `record name` + `record type`
* `RecordChangeRepository` - The history of all changes to all records in VinylDNS. In general, some kind of pruning strategy * `RecordChangeRepository` - The history of all changes to all records in VinylDNS. In general, some kind of pruning
should be implemented otherwise this could get quite large strategy should be implemented otherwise this could get quite large
* `ZoneRepository` - DNS Zones and managing access to zones * `ZoneRepository` - DNS Zones and managing access to zones
* `ZoneChangeRepository` - The history of all changes made to _zones_ in VinylDNS. Zone changes can including syncs, * `ZoneChangeRepository` - The history of all changes made to _zones_ in VinylDNS. Zone changes can including syncs,
updating ACL rules, changing zone ownership, etc. updating ACL rules, changing zone ownership, etc.
* `GroupRepository` - VinylDNS Groups * `GroupRepository` - VinylDNS Groups
* `UserRepository` - VinylDNS Users. These users are typically created the first time the user logs into the portal. * `UserRepository` - VinylDNS Users. These users are typically created the first time the user logs into the portal. The
The user information will be pulled from LDAP, and inserted into the VinylDNS UserRepository user information will be pulled from LDAP, and inserted into the VinylDNS UserRepository
* `MembershipRepository` - Holds a link from users to groups * `MembershipRepository` - Holds a link from users to groups
* `GroupChangeRepository` - Holds changes to groups and membership * `GroupChangeRepository` - Holds changes to groups and membership
* `BatchChangeRepository` - VinylDNS allows users to submit multiple record changes _across_ DNS zones at the same time within a `Batch` * `BatchChangeRepository` - VinylDNS allows users to submit multiple record changes _across_ DNS zones at the same time
The `BatchChangeRepository` holds the batch itself and all individual changes that executed in the batch. within a `Batch`
The `BatchChangeRepository` holds the batch itself and all individual changes that executed in the batch.
* `UserChangeRepository` - Holds changes to users. Currently only used in the portal. * `UserChangeRepository` - Holds changes to users. Currently only used in the portal.
## Database Types ## Database Types
### MySQL ### MySQL
VinylDNS has implemented MySQL for all repositories so a MySQL-only instance of VinylDNS is possible. Furthermore, there are two
repositories that have _only_ been implemented in MySQL:
1. ZoneRepository
1. BatchChangeRepository
Originally, the `ZoneRepository` lived in DynamoDB. However, the access controls in VinylDNS made it very difficult
to use DynamoDB as the query interface is limited. A SQL interface with `JOIN`s was required.
It should also be noted that all of the repositories have also been implemented in MySQL despite most currently running
in DynamoDB in our VinylDNS instance.
Review the [Setup MySQL Guide](setup-mysql.html) for more information. Review the [Setup MySQL Guide](setup-mysql.html) for more information.
### AWS DynamoDB
VinylDNS has gone through several architecture evolutions. Along the way, DynamoDB was chosen as the data store due to
the volume of data at Comcast. It is an excellent key-value store with extremely high performance characteristics.
VinylDNS has implemented DynamoDB for the following repositories:
1. RecordSetRepository
1. RecordChangeRepository
1. ZoneChangeRepository
1. GroupRepository
1. UserRepository
1. MembershipRepository
1. GroupChangeRepository
1. UserChangeRepository
Currently using DynamoDB would also require the user to either use MySQL for the batch change and zone repositories or also provide
an implementation for those repositories in a different data store.
Review the [Setup AWS DynamoDB Guide](setup-dynamodb.html) for more information.
## Message Queues ## Message Queues
Most operations that take place in VinylDNS use a message queue. These operations require high-availability, fault-tolerance
with retry, and throttling. The message queue supports these characteristics in VinylDNS. Most operations that take place in VinylDNS use a message queue. These operations require high-availability,
fault-tolerance with retry, and throttling. The message queue supports these characteristics in VinylDNS.
Some operations do not use the message queue, these include user and group changes as they do not carry the same Some operations do not use the message queue, these include user and group changes as they do not carry the same
fault-tolerance and throttling requirements. fault-tolerance and throttling requirements.
## Message Queue Types ## Message Queue Types
### AWS SQS ### AWS SQS
Our VinylDNS instance uses AWS SQS to fulfill its message queue service needs. SQS has the following characteristics:
Our VinylDNS instance uses AWS SQS to fulfill its message queue service needs. SQS has the following characteristics:
1. High-Availability 1. High-Availability
1. Retry - in the event that a message cannot be processed, or if a node fails midstream processing, it will be automatically 1. Retry - in the event that a message cannot be processed, or if a node fails midstream processing, it will be
made available for another node to process automatically made available for another node to process
1. Back-pressure - SQS is a _pull based_ system, meaning that if VinylDNS is currently busy, new messages will not be pulled for processing. 1. Back-pressure - SQS is a _pull based_ system, meaning that if VinylDNS is currently busy, new messages will not be
As soon as a node becomes available, the message will be pulled. This is much preferable to a _push_ based system, where pulled for processing. As soon as a node becomes available, the message will be pulled. This is much preferable to
bottlenecks in processing could cause an increase in heap pressure in the API nodes themselves. a _push_ based system, where bottlenecks in processing could cause an increase in heap pressure in the API nodes
1. Price - SQS is very reasonably priced. Comcast operates multiple message queues for different environments (dev, staging, prod, etc). themselves.
The price to use SQS is in the single digit dollars per month. VinylDNS can be tuned to run exclusively in the _free tier_. 1. Price - SQS is very reasonably priced. Comcast operates multiple message queues for different environments (dev,
staging, prod, etc). The price to use SQS is in the single digit dollars per month. VinylDNS can be tuned to run
exclusively in the _free tier_.
Review the [Setup AWS SQS Guide](setup-sqs.html) for more information. Review the [Setup AWS SQS Guide](setup-sqs.html) for more information.
### MySQL ### MySQL
VinylDNS has also implemented a message queue using MySQL, which incorporates the features that we currently utilize through AWS SQS
such as changing visibility timeout and re-queuing operations. VinylDNS has also implemented a message queue using MySQL, which incorporates the features that we currently utilize
through AWS SQS such as changing visibility timeout and re-queuing operations.
Review the [Setup MySQL Guide](setup-mysql.html) for more information. Review the [Setup MySQL Guide](setup-mysql.html) for more information.
## LDAP ## LDAP
VinylDNS uses LDAP in order to authenticate users in the **Portal**. LDAP is **not** used in the API, instead the API uses
its own user and group database for authentication.
When a user first logs into VinylDNS, their user information (first name, last name, user name, email) will be pulled from VinylDNS uses LDAP in order to authenticate users in the **Portal**. LDAP is **not** used in the API, instead the API
LDAP, and stored in the `UserRepository`. Credentials will also be generated for the user and stored encrypted in the `UserRepository`. uses its own user and group database for authentication.
When a user first logs into VinylDNS, their user information (first name, last name, user name, email) will be pulled
from LDAP, and stored in the `UserRepository`. Credentials will also be generated for the user and stored encrypted in
the `UserRepository`.
Review the [Setup LDAP Guide](setup-ldap.html) for more information Review the [Setup LDAP Guide](setup-ldap.html) for more information

View File

@ -8,7 +8,6 @@ section: "operator_menu"
The API Server is the main run-time for VinylDNS. To setup the API server, follow these steps: The API Server is the main run-time for VinylDNS. To setup the API server, follow these steps:
1. [Pre-requisites](pre.html) 1. [Pre-requisites](pre.html)
1. [Setup AWS DynamoDB](setup-dynamodb.html)
1. [Setup MySQL](setup-mysql.html) 1. [Setup MySQL](setup-mysql.html)
1. [Setup AWS SQS](setup-sqs.html) 1. [Setup AWS SQS](setup-sqs.html)
1. [Configure API Server](config-api.html) 1. [Configure API Server](config-api.html)

View File

@ -5,11 +5,7 @@ section: "operator_menu"
--- ---
# Setup MySQL # Setup MySQL
Our instance of VinylDNS currently stores some tables in MySQL, though all tables and a queue implementation are available in MySQL. Note Our instance of VinylDNS currently stores data in MySQL.
that the `batch_change` and `zone` tables are _only_ available in MySQL.
The motivation to split databases was due to the query limitations available in AWS DynamoDB. Currently, the following tables are present in
our instance:
* `zone` - holds zones * `zone` - holds zones
* `zone_access` - holds user or group identifiers that have access to zones * `zone_access` - holds user or group identifiers that have access to zones

View File

@ -14,7 +14,7 @@ You must setup an SQS queue before you can start working with VinylDNS. An [AWS
provides the information you need to setup your queue. provides the information you need to setup your queue.
## Setting up AWS SQS ## Setting up AWS SQS
As opposed to DynamoDB and MySQL where everything is created when the application starts up, the SQS queue needs to be setup by hand. As opposed to MySQL where everything is created when the application starts up, the SQS queue needs to be setup by hand.
This section goes through those settings that are required. This section goes through those settings that are required.
The traffic with AWS SQS is rather low. Presently, Comcast operates multiple SQS queues across multiple environments (dev, staging, prod), The traffic with AWS SQS is rather low. Presently, Comcast operates multiple SQS queues across multiple environments (dev, staging, prod),

View File

@ -6,7 +6,7 @@ position: 6
# VinylDNS Permissions Guide # VinylDNS Permissions Guide
Vinyldns is about making DNS self-service _safe_. There are a number of ways that you can govern access to your DNS infrastucture, from extremely restrictive, to extremely lax, and anywhere in between. Vinyldns is about making DNS self-service _safe_. There are a number of ways that you can govern access to your DNS infrastructure, from extremely restrictive, to extremely lax, and anywhere in between.
This guide attempts to explain the various options available for governing access to your VinylDNS installation. This guide attempts to explain the various options available for governing access to your VinylDNS installation.
@ -49,7 +49,7 @@ The original way to govern access is via Zone Ownership and Zone ACLs. When con
_Zone Owners_ have full rights on a zone. They can manage the zone, abandon it, change connection information, and assign ACLs. _Zone Owners_ have full rights on a zone. They can manage the zone, abandon it, change connection information, and assign ACLs.
A `Zone ACL Rule` is a record level control that allows VinylDNS users who are **not** Zone Owners privileges to perform certain actions in the zone. For example, you can **grant access to A, AAAA, CNAME records in Zone foo.baz.com to user Josh** A `Zone ACL Rule` is a record level control that allows VinylDNS users who are **not** Zone Owners privileges to perform certain actions in the zone. For example, you can **grant access to `A`, `AAAA`, `CNAME` records in Zone foo.baz.com to user Josh**
ACL rules provide an extremely flexible way to grant access to DNS records. Each ACL Rule consists of the following: ACL rules provide an extremely flexible way to grant access to DNS records. Each ACL Rule consists of the following:

View File

@ -8,15 +8,15 @@ section: "portal_menu"
Batch Changes is an alternative to submitting individual RecordSet changes and provides the following: Batch Changes is an alternative to submitting individual RecordSet changes and provides the following:
* The ability to include records of multiple record types across multiple zones. * The ability to include records of multiple record types across multiple zones.
* Input names are entered as fully-qualified domain names (or IP addresses for **PTR** records), so users don't have to think in record/zone context. * Input names are entered as fully-qualified domain names (or IP addresses for `PTR` records), so users don't have to think in record/zone context.
#### Access #### Access
* Access permissions will follow existing rules (admin group or ACL access). Note that an update (delete and add of the same record name, zone and record type combination) requires **Write** or **Delete** access. * Access permissions will follow existing rules (admin group or ACL access). Note that an update (delete and add of the same record name, zone and record type combination) requires **Write** or **Delete** access.
* <span class="important">**NEW**</span> **Records in shared zones.** All users are permitted to create new records or update unowned records in shared zones. * <span class="important">**NEW**</span> **Records in shared zones.** All users are permitted to create new records or update unowned records in shared zones.
#### Supported record types #### Supported record types
* Current supported record types for Batch Change are: **A**, **AAAA**, **CNAME**, **PTR**, **TXT**, and **MX**. * Current supported record types for Batch Change are: `A`, `AAAA`, `CNAME`, `PTR`, `TXT`, and `MX`.
* Additionally, there are **A+PTR** and **AAAA+PTR** types that will be processed as separate A (or AAAA) and PTR changes in the VinylDNS backend. Deletes for **A+PTR** and **AAAA+PTR** require Input Name and Record Data. * Additionally, there are `A+PTR` and `AAAA+PTR` types that will be processed as separate `A` (or `AAAA`) and `PTR` changes in the VinylDNS backend. Deletes for `A+PTR` and `AAAA+PTR` require Input Name and Record Data.
* Supported record types for records in shared zones may vary. * Supported record types for records in shared zones may vary.
Contact your VinylDNS administrators to find the allowed record types. Contact your VinylDNS administrators to find the allowed record types.
This does not apply to zone administrators or users with specific ACL access rules. This does not apply to zone administrators or users with specific ACL access rules.

View File

@ -8,7 +8,7 @@ section: "portal_menu"
DNS Changes is an alternative to submitting individual RecordSet changes and provides the following: DNS Changes is an alternative to submitting individual RecordSet changes and provides the following:
* The ability to include records of multiple record types across multiple zones. * The ability to include records of multiple record types across multiple zones.
* Input names are entered as fully-qualified domain names (or IP addresses for **PTR** records), so users don't have to think in record/zone context. * Input names are entered as fully-qualified domain names (or IP addresses for `PTR` records), so users don't have to think in record/zone context.
**Note**: DNS Change is portal-only terminology. The API equivalent is [batch change](../api/batchchange-model.html). **Note**: DNS Change is portal-only terminology. The API equivalent is [batch change](../api/batchchange-model.html).
@ -17,8 +17,8 @@ DNS Changes is an alternative to submitting individual RecordSet changes and pro
* <span class="important">**NEW**</span> **Records in shared zones.** All users are permitted to create new records or update unowned records in shared zones. * <span class="important">**NEW**</span> **Records in shared zones.** All users are permitted to create new records or update unowned records in shared zones.
#### Supported record types #### Supported record types
* Current supported record types for DNS change are: **A**, **AAAA**, **CNAME**, **PTR**, **TXT**, and **MX**. * Current supported record types for DNS change are: `A`, `AAAA`, `CNAME`, `PTR`, `TXT`, and `MX`.
* Additionally, there are **A+PTR** and **AAAA+PTR** types that will be processed as separate A (or AAAA) and PTR changes in the VinylDNS backend. Deletes for **A+PTR** and **AAAA+PTR** require Input Name and Record Data. * Additionally, there are `A+PTR` and `AAAA+PTR` types that will be processed as separate `A` (or `AAAA`) and `PTR` changes in the VinylDNS backend. Deletes for `A+PTR` and `AAAA+PTR` require Input Name and Record Data.
* Supported record types for records in shared zones may vary. * Supported record types for records in shared zones may vary.
Contact your VinylDNS administrators to find the allowed record types. Contact your VinylDNS administrators to find the allowed record types.
This does not apply to zone administrators or users with specific ACL access rules. This does not apply to zone administrators or users with specific ACL access rules.

View File

@ -10,7 +10,7 @@ There are currently two ways to manage records in the VinylDNS portal. This cove
Only zone administrators and users with ACL rules can manage records this way. Only zone administrators and users with ACL rules can manage records this way.
#### Supported record types #### Supported record types
A, AAAA, CNAME, DS, MX, NAPTR, NS, PTR, SRV, SSHFP, and TXT `A`, `AAAA`, `CNAME`, `DS`, `MX`, `NAPTR`, `NS`, `PTR`, `SRV`, `SSHFP`, and `TXT`
--- ---

View File

@ -19,6 +19,6 @@ Search `test*` returns: test.com., test.net.
Search `*example` returns: example.com., another.example.com. Search `*example` returns: example.com., another.example.com.
Search `*e*` returns: another.example.com., example.com., test.com., test.net., xyz.efg. Search `*e*` returns: another.example.com., example.com., test.com., test.net., xyz.efg.
[![Seach zones My Zones tab](../img/portal/search-zones-my-zones.png){:.screenshot}](../img/portal/search-zones-my-zones.png) [![Search zones My Zones tab](../img/portal/search-zones-my-zones.png){:.screenshot}](../img/portal/search-zones-my-zones.png)
[![Search zones All Zones tab](../img/portal/search-zones-all-zones.png){:.screenshot}](../img/portal/search-zones-all-zones.png) [![Search zones All Zones tab](../img/portal/search-zones-all-zones.png){:.screenshot}](../img/portal/search-zones-all-zones.png)

View File

@ -18,7 +18,7 @@ There are a few existing tools for working with the VinylDNS API.
## Integrations ## Integrations
- [external-dns](https://github.com/kubernetes-incubator/external-dns) - DNS provider-agnostic syncronization of Cloud Foundry and Kubernetes resources, including VinylDNS - [external-dns](https://github.com/kubernetes-incubator/external-dns) - DNS provider-agnostic synchronization of Cloud Foundry and Kubernetes resources, including VinylDNS
## Coming Soon ## Coming Soon
- [vinyldns-ansible](https://github.com/vinyldns/vinyldns-ansible) - Ansible integration with VinylDNS - [vinyldns-ansible](https://github.com/vinyldns/vinyldns-ansible) - Ansible integration with VinylDNS

View File

@ -26,10 +26,10 @@ addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.3.4")
addSbtPlugin("com.typesafe.sbt" % "sbt-license-report" % "1.2.0") addSbtPlugin("com.typesafe.sbt" % "sbt-license-report" % "1.2.0")
addSbtPlugin("com.47deg" % "sbt-microsites" % "1.1.5") addSbtPlugin("com.47deg" % "sbt-microsites" % "1.3.4")
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.3") addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.3")
addSbtPlugin("io.crashbox" % "sbt-gpg" % "0.2.0") addSbtPlugin("io.crashbox" % "sbt-gpg" % "0.2.0")
addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.2.10" ) addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.2.24" )