####################
# Header Variables #
####################

x-auth-all-projects:
  description: |
    If enabled this will show results from all projects in Designate
  in: header
  required: false
  type: bool

x-auth-sudo-project-id:
  description: |
    This allows a user to impersonate another project
  in: header
  required: false
  type: string

x-auth-token:
  description: |
    Token used to identify the user from keystone
  in: header
  required: false
  type: string

x-designate-delete-shares:
  description: |
    If enabled, this will delete associated shares along with the resource.
  in: header
  required: false
  type: bool
  min_version: 2.1

x-designate-edit-managed-records:
  description: |
    If enabled this will all users to edit records flagged as managed
  in: header
  required: false
  type: bool

x-designate-hard-delete:
  description: |
    If enabled, this will delete the zone resources (i.e. files) on the
    back-end.
  in: header
  required: false
  type: bool

x-openstack-request-id:
  description: |
    ID of the request
  in: header
  required: true
  type: string

zone_export_accepts:
  description: >
    Content-Type that will be accepted by the client.
    This endpoint will send a response with a ``text/dns`` content-type.
    If the client does not include a ``Accepts: text/dns`` header
  in: header
  required: true
  type: string

####################
#  Path Variables  #
####################

blacklist_id:
  description: |
    ID for this blacklist
  in: path
  required: true
  type: uuid

floatingip_id:
  description: |
    ID for the floatingip associated with the project
  in: path
  required: true
  type: uuid

path_pool_id:
  description: |
    ID for this pool
  in: path
  required: true
  type: uuid

path_project_id:
  description: |
    ID for the project
  in: path
  required: true
  type: uuid

path_recordset_id:
  description: |
    ID for the recordset
  in: path
  required: true
  type: uuid

path_service_id:
  description: |
    ID for the service.
  in: path
  required: true
  type: uuid

path_zone_export_id:
  description: |
    ID for this zone export
  in: path
  required: true
  type: uuid

path_zone_id:
  description: |
    ID for the zone
  in: path
  required: true
  type: uuid

path_zone_import_id:
  description: |
    ID for this zone import
  in: path
  required: true
  type: uuid

path_zone_share_id:
  description: |
    ID of the zone share.
  in: path
  required: true
  type: uuid
  min_version: 2.1

path_zone_transfer_accept_id:
  description: |
    ID for this zone transfer accept
  in: path
  required: true
  type: uuid

path_zone_transfer_request_id:
  description: |
    ID for this zone transfer request
  in: path
  required: true
  type: uuid

region:
  description: |
    Openstack region
  in: path
  required: true
  type: string

tld_id:
  description: |
    ID for this tld
  in: path
  required: true
  type: uuid

tsigkey_id:
  description: |
    ID for this tsigkey
  in: path
  required: true
  type: uuid


####################
# Query Variables  #
####################

blacklist_pattern_filter:
  description: |
    Filter results to only show blacklists that have a pattern matching the filter
  in: query
  required: false
  type: string

limit:
  description: |
    Requests a page size of items. Returns a number
    of items up to a limit value. Use the ``limit`` parameter to make
    an initial limited request and use the ID of the last-seen item
    from the response as the ``marker`` parameter value in a
    subsequent limited request.
  in: query
  required: false
  type: integer

marker:
  description: |
    The ID of the last-seen item. Use the ``limit``
    parameter to make an initial limited request and use the ID of the
    last-seen item from the response as the ``marker`` parameter value
    in a subsequent limited request.
  in: query
  required: false
  type: string

recordset_data_filter:
  description: |
    Filter results to only show recordsets that have a record with data matching the filter
  in: query
  required: false
  type: string

recordset_description_filter:
  description: |
    Filter results to only show recordsets that have a description matching the filter
  in: query
  required: false
  type: string

recordset_name_filter:
  description: |
    Filter results to only show recordsets that have a name matching the filter
  in: query
  required: false
  type: string

recordset_status_filter:
  description: |
    Filter results to only show recordsets that have a status matching the filter
  in: query
  required: false
  type: string

recordset_ttl_filter:
  description: |
    Filter results to only show recordsets that have a ttl matching the filter
  in: query
  required: false
  type: string

recordset_type_filter:
  description: |
    Filter results to only show recordsets that have a type matching the filter
  in: query
  required: false
  type: string

sort_dir:
  description: |
    Sorts the response by the requested sort
    direction. A valid value is ``asc`` (ascending) or ``desc``
    (descending). Default is ``asc``. You can specify multiple pairs
    of sort key and sort direction query parameters. If you omit the
    sort direction in a pair, the API uses the natural sorting
    direction of the server attribute that is provided as the
    ``sort_key``.
  in: query
  required: false
  type: string

sort_key:
  description: |
    Sorts the response by the this attribute value.
    Default is ``id``. You can specify multiple pairs of sort key and
    sort direction query parameters. If you omit the sort direction in
    a pair, the API uses the natural sorting direction of the server
    attribute that is provided as the ``sort_key``.
  in: query
  required: false
  type: string

target_project_id_filter:
  description: |
    Filter results to only show resources that have a matching
    target_project_id
  in: query
  required: false
  type: string
  min_version: 2.1

tld_name_filter:
  description: |
    Filter results to only show tlds that have a name matching the filter
  in: query
  required: false
  type: string

tsigkey_algorithm_filter:
  description: |
    Filter results to only show tsigkeys that have an algorithm matching the filter
  in: query
  required: false
  type: string

tsigkey_name_filter:
  description: |
    Filter results to only show tsigkeys that have a name matching the filter
  in: query
  required: false
  type: string

tsigkey_scope_filter:
  description: |
    Filter results to only show tsigkeys that have a scope matching the filter
  in: query
  required: false
  type: string

zone_description_filter:
  description: |
    Filter results to only show zones that have a description matching the filter
  in: query
  required: false
  type: string

zone_email_filter:
  description: |
    Filter results to only show zones that have an email matching the filter
  in: query
  required: false
  type: string

zone_export_message_filter:
  description: |
    Filter results to only show ``zone_exports`` that have a ``message`` matching the filter
  in: query
  required: false
  type: string

zone_export_status_filter:
  description: |
    Filter results to only show ``zone_exports`` that have a ``status`` matching the filter
  in: query
  required: false
  type: string

zone_export_zone_id_filter:
  description: |
    Filter results to only show ``zone_exports`` that have a ``zone_id`` matching the filter
  in: query
  required: false
  type: uuid

zone_import_message_filter:
  description: |
    Filter results to only show zone_imports that have a ``message`` matching the filter
  in: query
  required: false
  type: string

zone_import_status_filter:
  description: |
    Filter results to only show zone_imports that have a ``status`` matching the filter
  in: query
  required: false
  type: string

zone_import_zone_id_filter:
  description: |
    Filter results to only show zone_imports that have a ``zone_id`` matching the filter
  in: query
  required: false
  type: uuid

zone_name_filter:
  description: |
    Filter results to only show zones that have a name matching the filter
  in: query
  required: false
  type: string

zone_status_filter:
  description: |
    Filter results to only show zones that have a status matching the filter
  in: query
  required: false
  type: string

zone_transfer_accept_status_filter:
  description: |
    Filter results to only show ``zone_transfer_accepts`` that have a ``status`` matching the filter
  in: query
  required: false
  type: string

zone_transfer_request_status_filter:
  description: |
    Filter results to only show ``zone_transfer_requests`` that have a ``status`` matching the filter
  in: query
  required: false
  type: string

zone_ttl_filter:
  description: |
    Filter results to only show zones that have a ttl matching the filter
  in: query
  required: false
  type: integer

zone_type_filter:
  description: |
    Filter results to only show zones that have a type matching the filter
  in: query
  required: false
  type: string


####################
#  Body Variables  #
####################

action:
  description: |
    current action in progress on the resource
  in: body
  required: true
  type: enum

api_links:
  description: |
    Links to the resources in question.
  in: body
  required: true
  type: array

api_version_id:
  description: |
    A common name for the version.
  in: body
  required: true
  type: string

api_version_status:
  description: |
    The status of this API version. This can be one of:

    - ``CURRENT``: This is the preferred version of the API to use.
    - ``SUPPORTED``: This is an older, but still supported version of the API.
    - ``DEPRECATED``: A deprecated version of the API that is slated for
      removal.
    - ``EXPERIMENTAL``: This version is under development or contains features
      that are otherwise subject to change or removal.
  in: body
  required: true
  type: string

blacklist_description:
  description: |
    Description for this blacklist
  in: body
  required: false
  type: string

blacklist_pattern:
  description: |
    Pattern for this blacklist
  in: body
  required: true
  type: string

capabilities:
  description: |
    Capabilities for the service.
  in: body
  required: true
  type: dict

created_at:
  description: |
    Date / Time when resource was created.
  in: body
  required: true
  type: datestamp

description:
  description: |
    Description for the resource. Only shown in API / Horizon
  in: body
  required: true
  type: string

floatingip_address:
  description: |
    The floatingip address for this PTR record.
  in: body
  required: true
  type: string

fptr_description:
  description: |
    Description for this PTR record
  in: body
  required: true
  type: string

fptr_id:
  description: |
    ID for PTR record in the format of <region>:<floatingip_id>
  in: body
  required: true
  type: string

fptr_ttl:
  description: |
    Time to live for this PTR record
  in: body
  required: true
  type: uuid

fptrd_name:
  description: |
    Domain name for this PTR record
  in: body
  required: true
  type: string

heartbeated_at:
  description: |
    The timestamp when the last heartbeat was received.
  in: body
  required: true
  type: datestamp

hostname:
  description: |
    The hostname of the host with the service instance.
  in: body
  required: true
  type: string

id:
  description: |
    ID for the resource
  in: body
  required: true
  type: uuid

links:
  description: |
    Links to the resource, and other related resources.
    When a response has been broken into pages, we will include
    a ``next`` link that should be followed to retrieve all results
  in: body
  required: true
  type: object

max_page_limit:
  description: |
    The max amount of items allowed per page
  in: body
  required: true
  type: integer

max_recordset_name_length:
  description: |
    The max length of a recordset name
  in: body
  required: true
  type: integer

max_recordset_records:
  description: |
    The max amount of records contained in a recordset
  in: body
  required: true
  type: integer

max_zone_name_length:
  description: |
    The max length of a zone name
  in: body
  required: true
  type: integer

max_zone_records:
  description: |
    The max amount of records in a zone
  in: body
  required: true
  type: integer

max_zone_recordsets:
  description: |
    The max amount of recordsets per zone
  in: body
  required: true
  type: integer

max_zones:
  description: |
    The max amount of zones for this project
  in: body
  required: true
  type: integer

metadata:
  description: |
    Returns the ``total_count`` of resources matching this filter
  in: body
  required: true
  type: object

min_ttl:
  description: |
    The lowest ttl allowed on this system
  in: body
  required: true
  type: integer

pool_attributes:
  description: >
    Key:Value pairs of information about this pool. This information can be used by the scheduler to place zones on the correct pools
  in: body
  required: true
  type: object

pool_id:
  description: |
    ID for this pool
  in: body
  required: true
  type: uuid

pool_name:
  description: |
    Name for this pool
  in: body
  required: true
  type: string

pool_ns_records:
  description: |
    Name Servers for this pool. Any zones hosted by this pool should be delegated to these DNS servers
  in: body
  required: true
  type: string

project_id:
  description: |
    ID for the project that owns the resource
  in: body
  required: true
  type: uuid

recordset_description:
  description: |
    Description for this recordset
  in: body
  required: false
  type: string

recordset_name:
  description: |
    DNS Name for the recordset
  in: body
  required: true
  type: hostname

recordset_records:
  description: |
    A list of data for this recordset. Each item will be a separate record in Designate
    These items should conform to the DNS spec for the record type - e.g. A records
    must be IPv4 addresses, CNAME records must be a hostname.
  in: body
  required: true
  type: string

recordset_ttl:
  description: |
    TTL (Time to Live) for the recordset.
  in: body
  required: false
  type: integer

recordset_type:
  description: |
    They RRTYPE of the recordset.
  in: body
  required: true
  type: string

recordset_zone_id:
  description: |
    ID for the zone that contains this recordset
  in: body
  required: true
  type: uuid

recordset_zone_name:
  description: |
    The name of the zone that contains this recordset
  in: body
  required: true
  type: string

resource_id:
  description: |
    resource id for this tsigkey which can be either zone or pool id
  in: body
  required: true
  type: string

service_name:
  description: |
    The name of the Designate service instance.
  in: body
  required: true
  type: string

service_statuses:
  description: |
    A list of ``service_statuses`` objects.
  in: body
  required: true
  type: array

shared:
  description: |
    True if the zone is shared with another project.
  in: body
  required: true
  type: bool
  min_version: 2.1

shared_zone_id:
  description: |
    ID for the zone being shared.
  in: body
  required: true
  type: uuid
  min_version: 2.1

stats:
  description: |
    Statistics for the service.
  in: body
  required: true
  type: dict

status:
  description: |
    The status of the resource.
  in: body
  required: true
  type: enum

target_project_id:
  description: |
    The project ID the zone will be shared with.
  in: body
  required: true
  type: string
  min_version: 2.1

tld_description:
  description: |
    Description for this tld
  in: body
  required: false
  type: string

tld_name:
  description: |
    Name for this tld
  in: body
  required: true
  type: string

tsigkey_algorithm:
  description: |
    The encryption algorithm for this tsigkey
  in: body
  required: true
  type: string

tsigkey_name:
  description: |
    Name for this tsigkey
  in: body
  required: true
  type: string

tsigkey_scope:
  description: |
    scope for this tsigkey which can be either ZONE or POOL scope
  in: body
  required: true
  type: string

tsigkey_secret:
  description: |
    The actual key to be used
  in: body
  required: true
  type: string

updated_at:
  description: |
    Date / Time when resource last updated.
  in: body
  required: true
  type: datestamp

version:
  description: |
    Version of the resource
  in: body
  required: true
  type: integer

zone_attributes:
  description: |
    Key:Value pairs of information about this zone, and the pool the user
    would like to place the zone in. This information can be used by the
    scheduler to place zones on the correct pool.
  in: body
  required: false
  type: dict

zone_description:
  description: |
    Description for this zone
  in: body
  required: false
  type: string

zone_email:
  description: |
    e-mail for the zone. Used in SOA records for the zone
  in: body
  required: true
  type: string

zone_email_update:
  description: |
    e-mail for the zone. Used in SOA records for the zone
  in: body
  required: false
  type: string

zone_export_id:
  description: |
    ID for this zone export
  in: body
  required: true
  type: uuid

zone_export_location:
  description: >
    Where the exported zone is published to.
    There are currently one placement option available - designate.

    This will be shown by ``designate://<url>``.

    As more drivers are added, this will expand to include swift - this will be
    indicated by location being set to ``swift://<region>/<container>/<file>``

    This is also allowed be a webserver if the operator implements a different
    data store, and will be indicted by ``http://<url>``

    When a zone export is complete, the location will be updated, and
    the exported zone file will be available at the location specified.

  in: body
  required: false
  type: string

zone_export_message:
  description: |
    Message about the current status of the export
  in: body
  required: false
  type: uuid

zone_export_status:
  description: |
    Current status of the zone export
  in: body
  required: true
  type: string

zone_export_zone_id:
  description: |
    ID for the zone that is being exported
  in: body
  required: false
  type: uuid

zone_import_id:
  description: |
    ID for this zone import
  in: body
  required: true
  type: uuid

zone_import_message:
  description: |
    Message about the current status of the import
  in: body
  required: false
  type: uuid

zone_import_status:
  description: |
    Current status of the zone import
  in: body
  required: true
  type: uuid

zone_import_zone_id:
  description: |
    ID for the zone that was created by this import
  in: body
  required: false
  type: uuid

zone_masters:
  description: |
    Mandatory for secondary zones. The servers to slave from to get DNS information
  in: body
  required: false
  type: enum

zone_name:
  description: |
    DNS Name for the zone
  in: body
  required: true
  type: domainname

zone_nameserver_hostname:
  description: |
    The hostname of the nameserver that the zone should be delegated to
  in: body
  required: true
  type: hostname

zone_nameserver_priority:
  description: |
    The priority of the nameserver. This is used to determine the order of the
    the nameserver listings, and which server is used in the SOA record for the
    zone.
  in: body
  required: true
  type: integer

zone_pool_id:
  description: |
    ID for the pool hosting this zone
  in: body
  required: true
  type: uuid

zone_pool_target_id:
  description: |
    The target pool ID to move the zone into
  in: body
  required: false
  type: uuid

zone_serial:
  description: |
    current serial number for the zone
  in: body
  required: true
  type: integer

zone_transfer_accept_id:
  description: |
    ID for this zone transfer accept
  in: body
  required: true
  type: uuid

zone_transfer_accept_status:
  description: |
    Current status of the zone transfer request
  in: body
  required: true
  type: string

zone_transfer_request_id:
  description: |
    ID for this zone transfer request
  in: body
  required: true
  type: uuid

zone_transfer_request_key:
  description: >
    Key that is used as part of the zone transfer accept process. This is only
    shown to the creator, and must be communicated out of band.
  in: body
  required: true
  type: string

zone_transfer_request_status:
  description: |
    Current status of the zone transfer request
  in: body
  required: true
  type: string

zone_transfer_request_target_project_id:
  description: >
    A project ID that the request will be limited to.
    No other project will be allowed to accept this request.
  in: body
  required: false
  type: string

zone_transfer_request_zone_id:
  description: |
    ID for the zone that is being exported
  in: body
  required: true
  type: uuid

zone_transfer_request_zone_name:
  description: |
    the name of the zone that is being exported
  in: body
  required: true
  type: string

zone_transfered_at:
  description: |
    For secondary zones. The last time an update was retrieved from the master servers
  in: body
  required: true
  type: enum

zone_ttl:
  description: |
    TTL (Time to Live) for the zone.
  in: body
  required: false
  type: integer

zone_type:
  description: |
    Type of zone. PRIMARY is controlled by Designate, SECONDARY zones are slaved from another DNS Server. Defaults to PRIMARY
  in: body
  required: false
  type: enum
