DefectdojoProducts

Источник данных типа DefectdojoProducts возвращает список продуктов в Defectdojo.

Авторизация

Конфигурация авторизации описана в разделе «Внешний сервис DefectDojo».

Спецификация ответа

Платформа выполняет GET-запрос по URL: /api/v2/products. Возвращаются все доступные значения. Спецификация ответа.

Конфигурация

  • URL — URL DefectDojo в формате https://example.com.

Параметры

Настраиваемые параметры отсутствуют.

GitlabGroups

Источник данных типа GitlabGroups возвращает список групп в GitLab.

Авторизация

Конфигурация авторизации описана в разделе «Внешний сервис GitLab».

Спецификация ответа

Платформа выполняет GET-запрос к API GitLab по URL: /api/v4/groups. Платформа возвращает все доступные значения. Спецификация ответа.

Конфигурация

  • URL — URL GitLab в формате https://gitlab.com, без части /api/v4.

Параметры

Настраиваемые параметры отсутствуют.

GitlabProjects

Источник данных типа GitlabProjects возвращает список проектов в GitLab.

Авторизация

Конфигурация авторизации описана в разделе «Внешний сервис GitLab».

Спецификация ответа

В зависимости от конфигурации параметров, платформа выполняет GET-запрос к API GitLab и возвращает соответствующую спецификацию.

Если значение параметра all равно true, выполняется GET-запрос по URL: /api/v4/projects. Платформа возвращает все доступные значения. Спецификация ответа.

Если значение параметра all равно false, выполняется GET-запрос по URL: /api/v4/groups/:id/projects. Платформа возвращает все доступные значения. Спецификация ответа.

Если значение параметра tags равно true, платформа дополнительно получает git-теги. Для получения git-тегов выполняется GET-запрос по URL: /api/v4/projects/:id/repository/tags. Платформа получает список всех git-тегов и расширяет спецификацию ответа полем ddp_repository_tags, которое соответствует спецификации ответа list-project-repository-tags.

Конфигурация

  • URL — URL GitLab в формате https://gitlab.com, без части /api/v4.

Параметры

НазваниеОбязательностьОписаниеВозможные значенияПо умолчанию
allОпциональноВ явном виде указывает, что необходимо собирать репозитории всех групп, к которым есть доступtrue, falsefalse
group_idsОбязательно, если all в значении falseИсточник данных будет собирать проекты групп с указанным ID. ID групп указываются через запятуюПример: 1001,1002-
tagsОпциональноПлатформа дополнительно получает список всех git тегов и расширяет спецификацию ответа полем ddp_repository_tags, которое соответствует спецификации ответа list-project-repository-tagstrue, falsefalse
include_subgroupsОпциональноЕсли указан параметр group_ids, то параметр include_subgroups определяет, собирать ли проекты подгрупп указанных группtrue, falsefalse
tags_order_byОпциональноПоле для сортировки тегов. Описание параметра — в GitLab Tags APIupdated, name, versionupdated
tags_sortОпциональноНаправление сортировки тегов. Описание параметра — в GitLab Tags APIasc, descdesc
tags_searchОпциональноСтрока для поиска тегов по имени. Описание параметра — в GitLab Tags APIСтрока-

HarborArtifacts

Источник данных типа HarborArtifacts собирает информацию о всех артефактах в Harbor.

Авторизация

Конфигурация авторизации описана в разделе «Внешний сервис Harbor».

Спецификация ответа

Платформа получает список всех проектов и репозиториев, которые содержатся в этих проектах, затем по каждому из доступных проектов выполняется GET-запрос к API Harbor: /api/v2.0/projects/{project_name}/repositories/{repository_name}/artifacts. Спецификация ответа доступна в интерфейсе Harbor.

Конфигурация

  • URL — URL Harbor в формате https://example.com.

Параметры

Настраиваемые параметры отсутствуют.

HarborProjects

Источник данных типа HarborProjects собирает информацию о всех проектах в Harbor.

Авторизация

Конфигурация авторизации описана в разделе «Внешний сервис Harbor».

Спецификация ответа

Платформа получает список всех доступных проектов, выполняя GET-запросы к API Harbor: /api/v2.0/projects. Спецификация ответа доступна в интерфейсе Harbor.

Конфигурация

  • URL — URL Harbor в формате https://example.com.

Параметры

Настраиваемые параметры отсутствуют.

HarborRepositories

Источник данных типа HarborRepositories собирает информацию о всех репозиториях в Harbor.

Авторизация

Конфигурация авторизации описана в разделе «Внешний сервис Harbor».

Спецификация ответа

Платформа получает список всех проектов, затем получает список всех репозиториев в каждом из проектов, выполняя GET-запросы к API Harbor: /api/v2.0/projects/{project_name}/repositories. Спецификация ответа доступна в интерфейсе Harbor.

Конфигурация

  • URL — URL Harbor в формате https://example.com.

Параметры

Настраиваемые параметры отсутствуют.

HarborTags

Источник данных типа HarborTags собирает информацию о всех тегах у артефактов в Harbor.

Авторизация

Конфигурация авторизации описана в разделе «Внешний сервис Harbor».

Спецификация ответа

Платформа получает список всех проектов и репозиториев, которые содержатся в этих проектах, затем по каждому из доступных проектов выполняется GET-запрос к API Harbor: /api/v2.0/projects/{project_name}/repositories/{repository_name}/artifacts. Затем происходит сбор всех тегов по всем артефактам (поле tags) и результат возвращается в виде массива. Спецификация ответа доступна в интерфейсе Harbor.

Конфигурация

  • URL — URL Harbor в формате https://example.com.

Параметры

Настраиваемые параметры отсутствуют.

HelmReleases

Источник данных типа HelmReleases возвращает список всех HelmReleases в кластере Kubernetes.

Авторизация

Конфигурация авторизации описана в разделе «Внешний сервис Kubernetes».

Аутентификация в Kubernetes описана в официальной документации.

Спецификация ответа

Платформа возвращает все HelmReleases в кластере Kubernetes. Спецификация:

[
  {
    "name": "string",              // Название.
    "info": {
      "first_deployed": "string",  // Дата и время первого деплоя.
      "last_deployed": "string",   // Дата и время последнего деплоя.
      "deleted": "string",         // Дата и время удаления (может быть пустой строкой).
      "description": "string",     // Описание.
      "status": "string",          // Статус.
      "notes": "string"            // Заметки.
    },
    "chart": {
      "metadata": {
        "name": "string",          // Название чарта.
        "home": "string",          // Домашняя страница.
        "sources": "array",        // Массив строк с URL-адресами источников.
        "version": "string",       // Версия чарта.
        "description": "string",   // Описание чарта.
        "keywords": "array",       // Массив строк с ключевыми словами.
        "maintainers": "array",    // Массив объектов с информацией о мейнтейнерах.
        "icon": "string",          // URL иконки.
        "apiVersion": "string",    // Версия API.
        "appVersion": "string"     // Версия приложения.
      },
      "templates": [               // Массив объектов с шаблонами.
        {
          "name": "templates/NOTES.txt",
          "data": "..."
        },
        {
          "name": "templates/_helpers.tpl",
          "data": "..."
        }
        // ... другие шаблоны.
      ],        
      "values": "object",          // Объект с доступными настройками Helm-чарта.
      "schema": "null",            // Схема (может быть null).
      "files": [                   // Массив объектов с файлами.
        {
          "name": ".helmignore",
          "data": "..."
        },
        {
          "name": "LICENSE",
          "data": "..."
        }
        // ... другие файлы.
      ]             
    },
    "config": {        // Текущая конфигурация.
      "caSecretName": "string",
      "cache": {
        "enabled": "boolean", 
        "expireHours": "integer"
      }
      // ... другие настройки.
    },
    "manifest": "string", // Отрендеренные манифесты.
    "version": "integer", // Версия HelmRelease.
    "namespace": "string" // Неймспейс, где развёрнут релиз.
  },
  // ... другие ресурсы типа HelmRelease.
]

Конфигурация

  • URL — URL Kubernetes API в формате https://api.example.com.

Параметры

Настраиваемые параметры отсутствуют.

KafkaAcls

Источник данных типа KafkaAcls собирает информацию о доступных ACL.

Авторизация

Платформа поддерживает аутентификацию в Kafka с помощью SASL/PLAIN, SASL/SCRAM.

Спецификация ответа

Платформа запрашивает информацию о настроенных ACL в Kafka. Полученные данные предоставляются в следующем формате:

[
  {
    "Cluster": "string",             // Название кластера Kafka.
    "ResourceType": "string",        // Тип ресурса (TOPIC, GROUP и т. д.).
    "ResourceName": "string",        // Название ресурса.
    "PatternType": "string",         // Тип паттерна (LITERAL, PREFIXED и т. д.).
    "Principal": "string",           // Principal пользователя (например: "User:Alice").
    "Host": "string",                // Хост (обычно "*" для любого хоста).
    "Operation": "string",           // Операция (READ, WRITE, DESCRIBE и т. д.).
    "PermissionType": "string"       // Тип разрешения (ALLOW, DENY).
  },
  // ... другие записи ACL.
]

Конфигурация

  • URL — URL Kafka в формате example.com.

Параметры

НазваниеОбязательностьОписаниеВозможные значения
SecurityProtocolОбязательноПротокол для подключения к Kafka — в документации KafkaPLAINTEXT, SASL_PLAINTEXT, SASL_SSL
SaslMechanismОпциональноМеханизм аутентификации, который будет использовать SASL. Обязателен при использовании протокола SASL_PLAINTEXT или SASL_SSL — в документации KafkaPLAIN, SCRAM-SHA-256, SCRAM-SHA-512
UserОбязательноИмя пользователя для подключения к Kafka-
PassОбязательноПароль пользователя для подключения к Kafka-

KafkaBrokers

Источник данных типа KafkaBrokers собирает информацию о доступных брокерах.

Авторизация

Платформа поддерживает аутентификацию в Kafka с помощью SASL/PLAIN, SASL/SCRAM.

Спецификация ответа

Платформа осуществляет несколько запросов к Kafka с целью получения сведений о доступных брокерах. Полученные данные предоставляются в следующем формате:

{
  "Cluster": "string",          // Название кластера Kafka (из kafkaBrokerMetadata.Cluster).
  "Leader": "boolean",          // Является ли брокер лидером-контроллером (true/false).
  "NodeID": "number",           // Уникальный ID брокера (из broker.NodeID).
  "Port": "number",             // Порт брокера (из broker.Port).
  "Host": "string",             // Хост брокера (из broker.Host).
  "Rack": "string|null",        // Рек (зона доступности) брокера (из broker.Rack).
  "Configs": {                  // Конфигурации брокера.
    {
      "Name": "number",         // Уникальный ID брокера.
      "Configs": [              // Массив отдельных конфигураций.
        {
          "Key": "listeners",       // Ключ конфигурации.
          "Value": "CLIENT://:9092,INTERNAL://:9094", // Значение конфигурации.
          "Source": "STATIC_BROKER_CONFIG" // Источник конфигурации.
        },
        {
          "Key": "log.retention.hours", // Ключ конфигурации.
          "Value": 168,                 // Значение конфигурации.
          "Source": "DEFAULT_CONFIG"    // Источник конфигурации.
        },
        {
          "...": "..."                  // Другие параметры.
          // Полный список параметров — в официальной документации:
          // https://kafka.apache.org/documentation/#brokerconfigs.
        }
      ]
    }
  }
}

Конфигурация

  • URL — URL Kafka в формате example.com.

Параметры

НазваниеОбязательностьОписаниеВозможные значения
SecurityProtocolОбязательноПротокол для подключения к Kafka — в документации KafkaPLAINTEXT, SASL_PLAINTEXT, SASL_SSL
SaslMechanismОпциональноМеханизм аутентификации, который будет использовать SASL. Обязателен при использовании протокола SASL_PLAINTEXT или SASL_SSL — в документации KafkaPLAIN, SCRAM-SHA-256, SCRAM-SHA-512
UserОбязательноИмя пользователя для подключения к Kafka-
PassОбязательноПароль пользователя для подключения к Kafka-

KafkaTopics

Источник данных типа KafkaTopics собирает информацию о доступных топиках в Kafka.

Авторизация

Платформа поддерживает аутентификацию в Kafka с помощью SASL/PLAIN, SASL/SCRAM.

Спецификация ответа

Платформа осуществляет несколько запросов к Kafka с целью получения сведений о доступных топиках. Полученные данные предоставляются в следующем формате:

{
  "Cluster": "string",           // Название кластера Kafka.
  "Topic": "string",             // Название топика.
  "ID": "string",                // Уникальный идентификатор топика.
  "IsInternal": "boolean",       // Является ли топик внутренним (Пример внутреннего топика: __consumer_offsets).
  "Partitions": "number",        // Количество партиций в топике.
  "Configs": {                   // Конфигурации топика (динамические параметры).
    "retention.ms": 604800000,   // Пример параметра: время хранения сообщений.
    "cleanup.policy": "delete",  // Пример параметра: политика очистки.
    "...": "..."                 // Другие параметры.
    // Полный список параметров — в официальной документации:
    // https://kafka.apache.org/documentation/#topicconfigs.
  }
}

Конфигурация

  • URL — URL Kafka в формате example.com.

Параметры

НазваниеОбязательностьОписаниеВозможные значения
SecurityProtocolОбязательноПротокол для подключения к Kafka — в документации KafkaPLAINTEXT, SASL_PLAINTEXT, SASL_SSL
SaslMechanismОпциональноМеханизм аутентификации, который будет использовать SASL. Обязателен при использовании протокола SASL_PLAINTEXT или SASL_SSL — в документации KafkaPLAIN, SCRAM-SHA-256, SCRAM-SHA-512
UserОбязательноИмя пользователя для подключения к Kafka-
PassОбязательноПароль пользователя для подключения к Kafka-

KubernetesResources

Источник данных типа KubernetesResources возвращает список ресурсов Kubernetes. Тип возвращаемых ресурсов задаётся через параметры источника данных. Поддерживаются как встроенные в Kubernetes типы ресурсов, так и любые кастомные ресурсы.

Авторизация

Конфигурация авторизации описана в разделе «Внешний сервис Kubernetes».

Спецификация ответа

Спецификация ответа зависит от типа ресурса, который планируется получить. Для получения точной информации необходимо обратиться к документации. Для встроенных в Kubernetes ресурсов доступна официальная документация.

При отсутствии возможности обратиться к документации можно получить описание спецификации с помощью команды d8 k explain.

Пример для deployment:

d8 k explain deployment --recursive

Примерный вывод:

GROUP:      apps
KIND:       Deployment
VERSION:    v1

DESCRIPTION:
    Deployment enables declarative updates for Pods and ReplicaSets.
    
FIELDS:
  apiVersion <string>
  kind <string>
  metadata <ObjectMeta>
    annotations <map[string]string>
    creationTimestamp <string>
...

Описание спецификации находится внутри FIELDS:.

Конфигурация

  • URL — URL Kubernetes API в формате https://api.example.com.

Параметры

НазваниеОбязательностьОписаниеВозможные значения
apiGroupОпциональноAPI-группа ресурса. Для ресурсов в core API-группе поле не задаётсяСм. определение требуемых Group и Version
versionОбязательноВерсия API ресурсаСм. определение требуемых Group и Version
isNamespacedОбязательноПринадлежность ресурса неймспейсам. Проверить принадлежность можно с помощью команды d8 k api-resourcestrue, false
namespaceОпциональноНеймспейс, из которого будут собираться ресурсы. Если не указан, ресурсы будут собираться из всех неймспейсов. Значение параметра учитывается, только если значение isNamespaced равно true
resourceОбязательноНазвание ресурса. Указывается маленькими буквами во множественном числе, как в поле NAME вывода команды d8 k api-resources

Примеры

Собрать все ingress-ресурсы Kubernetes-кластера:

apiGroup: networking.k8s.io
version: v1
isNamespaced: true
resource: ingresses

Собрать все поды Kubernetes-кластера:

version: v1
isNamespaced: true
resource: pods

Собрать все поды Kubernetes-кластера в неймспейсе d8-development-platform:

version: v1
isNamespaced: true
resource: pods
namespace: d8-development-platform

Собрать все неймспейсы Kubernetes-кластера:

version: v1
isNamespaced: false
resource: namespaces

Собрать все кастомные ресурсы ModuleRelease Kubernetes-кластера:

apiGroup: deckhouse.io
version: v1alpha1
isNamespaced: false
resource: modulereleases

Определение требуемых Group и Version

Каждому типу ресурса соответствует своя версия и группа. Полный список API-ресурсов с их группами и версиями — в документации Kubernetes.

Если неизвестно, какие требуются Group и Version, можно попробовать подставить актуальные значения. Есть несколько вариантов, как их посмотреть, например с помощью утилиты d8 k: команда d8 k explain показывает version и apiGroup для ресурса.

Пример:

d8 k explain deployment

Вывод:

GROUP:      apps
KIND:       Deployment
VERSION:    v1

DESCRIPTION:
    Deployment enables declarative updates for Pods and ReplicaSets.
    
FIELDS:
...

NexusArtifacts

Источник данных типа NexusArtifacts возвращает список артефактов в Nexus.

Авторизация

Конфигурация авторизации описана в разделе «Внешний сервис Nexus».

Спецификация ответа

Платформа формирует список доступных репозиториев, затем по каждому репозиторию выполняется GET-запрос к API Nexus: /service/rest/v1/components. Спецификация ответа.

Конфигурация

  • URL — URL Nexus в формате https://example.com.

Параметры

Настраиваемые параметры отсутствуют.

NexusRepositories

Источник данных типа NexusRepositories возвращает список репозиториев в Nexus.

Авторизация

Конфигурация авторизации описана в разделе «Внешний сервис Nexus».

Спецификация ответа

Платформа выполняет GET-запрос к API Nexus: /service/rest/v1/repositories. Спецификация ответа.

Конфигурация

  • URL — URL Nexus в формате https://example.com.

Параметры

Настраиваемые параметры отсутствуют.

PrometheusMetrics

Источник данных типа PrometheusMetrics возвращает результат запроса PromQL в Prometheus.

Авторизация

Конфигурация авторизации описана в разделе «Внешний сервис Prometheus».

Спецификация ответа

Платформа выполняет GET-запрос к API Prometheus: /api/v1/query. Спецификация ответа.

Конфигурация

  • URL — URL Prometheus API в формате https://example.com/api/v1/query.
  • «Query» — запрос в формате PromQL, на основе которого будет сформирован ответ.

Параметры

Настраиваемые параметры отсутствуют.

SonarqubeProjects

Источник данных типа SonarqubeProjects возвращает список проектов в SonarQube.

Авторизация

Конфигурация авторизации описана в разделе «Внешний сервис SonarQube».

Спецификация ответа

Платформа выполняет GET-запрос к API SonarQube: /api/projects/search. Система собирает все доступные components и возвращает их в виде массива. Спецификация components.

Конфигурация

  • URL — URL SonarQube в формате https://example.com.

Параметры

Настраиваемые параметры отсутствуют.

GenericAPI

Источник данных типа GenericAPI позволяет подключаться к любому REST API и получать данные в формате JSON. Поддерживаются различные типы пагинации и настраиваемые параметры запроса.

Авторизация

GenericAPI поддерживает любые типы аутентификации через настройку заголовков HTTP. Наиболее распространённые способы:

Bearer Token:

Authorization: Bearer <токен>

Basic Authentication:

Authorization: Basic <base64-encoded-credentials>

API Key:

X-API-Key: <ключ>

Конфигурация

  • URL — базовый URL API в формате https://api.example.com.
  • Method — HTTP-метод (GET, POST, PUT, PATCH, DELETE).
  • Query — дополнительные query-параметры (например, для фильтрации или поиска).

Параметры

НазваниеОбязательностьОписаниеВозможные значенияПримерыПо умолчанию
paginationTypeОпциональноТип пагинации для обработки больших объёмов данныхnone, offset, cursor, page, link_headernonenone
pathОпциональноПуть к эндпоинту API, который будет добавлен к базовому URLЛюбая строка, начинающаяся с //api/v1/users, /projects""
dataPathОпциональноПуть к данным в ответе (цепочка ключей через точку)Любая строкаdata, results.items, ..
responseFormatОпциональноФормат ответаarray, maparray, maparray
mapKeyFieldОпциональноПри responseFormat равном map: название поля, в которое записать ключ из JSON-объектаЛюбая строкаslug, externalId""
pageParamОпциональноНазвание параметра для номера страницы (для offset- и page- пагинации)Любая строкаpage, _page, pageNumberpage
limitParamОпциональноНазвание параметра для количества элементов на странице (для offset-пагинации)Любая строкаlimit, per_page, _limit, sizelimit
sizeParamОпциональноНазвание параметра для размера страницы (для page-пагинации)Любая строкаsize, pageSize, _sizesize
cursorParamОпциональноНазвание параметра для курсора (для cursor-пагинации)Любая строкаcursor, after, nextcursor
pageSizeОпциональноКоличество элементов на странице для пагинацииПоложительное целое число10, 20, 50, 100100
requestBodyОпциональноТело запроса для POST/PUT/PATCH-методовЛюбая строка{"query": "example"}""

Спецификация ответа

Формат ожидаемого ответа задаётся параметром responseFormat (по умолчанию array).

Пример ответа для responseFormat: array:

[
  {
    "id": 1,
    "name": "Example Item",
    "description": "Description of the item",
    "created_at": "2023-01-01T00:00:00Z"
  },
  {
    "id": 2,
    "name": "Another Item",
    "description": "Another description",
    "created_at": "2023-01-02T00:00:00Z"
  }
]

Пример ответа для responseFormat: map:

{
  "billing": { "title": "Billing", "owner": "team-a" },
  "shipping": { "title": "Shipping", "owner": "team-b" }
}

Перед обработкой ответ с responseFormat: map преобразуется в массив с учётом значения параметра mapKeyField.

При mapKeyField: example в обработку передаётся массив с добавленным полем example со значением, взятым из ключа объекта:

[
  { "example": "billing", "title": "Billing", "owner": "team-a" },
  { "example": "shipping", "title": "Shipping", "owner": "team-b" }
]

Если mapKeyField не задан (пустая строка), в обработку передаётся массив без добавления нового поля:

[
  { "title": "Billing", "owner": "team-a" },
  { "title": "Shipping", "owner": "team-b" }
]

Типы пагинации

  • none — без пагинации, получает все данные одним запросом.

  • offset — пагинация по номеру страницы и количеству элементов:

    • Использует параметры pageParam и limitParam.
    • Пример: ?page=1&limit=20.
  • page — пагинация по номеру страницы и размеру:

    • Использует параметры pageParam и sizeParam.
    • Пример: ?page=1&size=20.
  • cursor — пагинация по курсору:

    • Использует параметр cursorParam.
    • Пример: ?cursor=eyJpZCI6MTIzfQ==.
  • link_header — пагинация через заголовок Link:   - Использует заголовок Link в ответе для определения следующей страницы.   - Стандарт RFC 5988.

Примеры конфигурации

JSONPlaceholder API (без пагинации):

url: https://jsonplaceholder.typicode.com
path: /users
paginationType: none
dataPath: .

GitLab API (offset пагинация):

url: https://gitlab.example.com
path: /api/v4/projects
paginationType: offset
pageParam: page
limitParam: per_page
pageSize: 20
headers:
  Authorization: Bearer <token>

GitHub API (link header пагинация):

url: https://api.github.com
path: /repos/owner/repo/issues
paginationType: link_header
headers:
  Authorization: Bearer <token>
  Accept: application/vnd.github.v3+json

API с вложенными данными:

url: https://api.example.com
path: /data
dataPath: response.data.items
paginationType: offset
pageParam: page
limitParam: limit
query: "filter=active&sort=name"

POST-запрос с телом:

url: https://api.example.com
path: /search
method: POST
requestBody: '{"query": "example", "filters": {"status": "active"}}'
query: "include=metadata&format=json"
headers:
  Content-Type: application/json
  Authorization: Bearer <token>