Партиции в API

Все операции с DNS-зонами и записями в API elles-dns-api требуют явного или неявного указания партиции — раздела Active Directory, в котором хранится объект. Партиция определяет логическое пространство размещения зоны или записи.

Способы указания партиции

Поддерживается четыре типа партиций, задаваемых через параметр partition в URL-запросе:

Тип партиции Параметры запроса Описание

Домен (domain)

?partition=domain

Стандартная партиция домена (DomainDnsZones). Используется для зон, реплицируемых в пределах домена

Лес (forest)

?partition=forest

Стандартная партиция леса (ForestDnsZones). Используется для зон, реплицируемых во всем лесу

Устаревшая (legacy)

?partition=legacy

Устаревшая партиция Windows 2000 (System). Поддерживается для совместимости

Пользовательская (custom)

?partition=custom&partitionName=<имя>

Обязательно требует два параметра: partition=custom и partitionName с точным именем пользовательской партиции (например, MyAppPartition). Имя берется из ответа GET /api/v1/dns/partitions

Особенности работы с пользовательскими партициями

Для работы с пользовательскими партициями необходимо обязательно передавать два параметра:

  • partition=custom — тип партиции;

  • partitionName=<имя> — имя конкретной партиции.

Чтобы узнать имя партиции, используйте запрос:

curl -k --negotiate -u : \
  "https://server:9443/api/v1/dns/partitions" | jq

Примеры использования параметров в запросе:

  • стандартная партиция — достаточно partition:

    curl -k --negotiate -u : \
      "https://server:9443/api/v1/dns/zone/example.com?partition=domain"
  • пользовательская партиция — обязательно partition=custom и partitionName=<имя>:

    curl -k --negotiate -u : \
      "https://server:9443/api/v1/dns/zone/example.com?partition=custom&partitionName=MyAppPartition"

Пример на Python (requests):

import requests

base_url = "https://server:9443/api/v1/dns"

# Стандартная партиция
response = requests.get(
    f"{base_url}/zone/example.com",
    params={"partition": "domain"}
)

# Пользовательская партиция
response = requests.get(
    f"{base_url}/zone/example.com",
    params={
        "partition": "custom",
        "partitionName": "MyAppPartition"
    }
)

Автоматический выбор партиции (disambiguation)

Если параметр partition не указан, сервер выполняет поиск зоны или записи во всех доступных партициях:

  • 0 совпадений → возвращается 404 Not Found;

  • 1 совпадение → операция выполняется успешно;

  • ≥2 совпадений → возвращается 409 Conflict с деталями в теле ответа, содержащем список доступных партиций.

Пример ответа при конфликте:

{
  "error": "zone exists in multiple partitions, explicit partition selection is required",
  "code": 409,
  "request_id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
  "details": {
    "availablePartitions": ["domain", "forest"]
  }
}
Для операций, требующих однозначности, всегда рекомендуется явно указывать partition, чтобы избежать ошибок конфликта и повысить предсказуемость.

При создании зоны параметр directoryPartition в теле запроса определяет, в какую партицию будет помещена новая зона. При обновлении, удалении или чтении записи партиция должна быть указана явно, если зона существует в нескольких разделах.

Обновлено: