Help:Public API/management/containers

From Svacer Wiki

Управление контейнерами (проектами, ветками, группами проектов)

В данном разделе содержится описание REST API управления контейнерами и их содержимым.

Для выполнения операций получения списка контейнеров, их создания, изменения и удаления существует http-ресурс

POST /api/public/admin/server/containers

Для операций управления составом групп проектов существует http-ресурс

POST /api/public/admin/server/project-groups

Для операции переименования снимков существует http-ресурс

PUT /api/public/snapshots/{snapshot_id}/update
Для использования ресурсов необходимо использовать http-запросы с токеном пользователя имеющего соответствующие права

POST /api/public/admin/server/containers - управление набором проектов, веток, групп проектов

Формат запроса:

{
  "action": "string",
  "id": "string",
  "type": "string",
  "name": "string",
  "parent": "string",
  "review_with_comment": true
}

Формат ответа:

{
  "Containers": [
    {
      "action": "string",
      "id": "string",
      "name": "string",
      "parent": "string",
      "review_with_comment": true,
      "type": "string"
    }
  ]
}

Назначение полей запроса и установка значений полей ответа зависит от типа операции и определяется значением поля запроса action.

Поддерживаемыe значения поля action
Значение Тип операции
list Получение списка контейнеров
add Создание контейнера
update Изменение контейнера
remove Удаление контейнера

Получение списка контейнеров: "action": "list"

Назначение полей запроса
Поле Описание
action list
id Если не пустое: идентификатор контейнера, для которого будут загружены "связанные" контейнеры:
- если передан id группы проектов - вернётся список проектов входящих в данную группу
- если передан id проекта - вернётся список групп проектов, в который входит проект + список его веток
- если передан id ветки - вернётся список снимков данной ветки
type Допустимые значения: project, branch, project-group

Если не пустое: отфильтровывает список контейнеров по типу

Если пустое:

- если поле id пустое - возвращается объединённый список проектов и групп проектов
name Если не пустое:
- если поле id пустое - отфильтровывает список контейнеров по названию
- если поле id НЕ пустое - фильтр по названию НЕ применяется
parent Не используется
review_with_comment Не используется

Примеры запросов с "action": "list"

$ curl --data '{"action": "list"}' -X POST http://localhost:8080/api/public/admin/server/containers
{"Containers":[{"id":"0f7da122-9c86-4384-b7bc-356bfb3b7f28","name":"projectGroupA","type":"project-group"},{"id":"20706313-6986-4c9d-9a4e-5e4908a11499","name":"projectGroupB","type":"project-group"},{"id":"a7e22042-96e5-4659-b21a-0615d434bed7","name":"bash","type":"project"},{"id":"a8e0352c-0408-417c-8fd0-4fbe03f38980","name":"iptables","type":"project"},{"id":"d53b0b92-d0fb-429a-8f86-c8fe6ee50c0c","name":"proftpd","type":"project"}]}
$ curl --data '{"action": "list", "type": "project-group"}' -X POST http://localhost:8080/api/public/admin/server/containers
{"Containers":[{"id":"0f7da122-9c86-4384-b7bc-356bfb3b7f28","name":"projectGroupA","type":"project-group"},{"id":"20706313-6986-4c9d-9a4e-5e4908a11499","name":"projectGroupB","type":"project-group"}]}
$ curl --data '{"action": "list", "name": "bas"}' -X POST http://localhost:8080/api/public/admin/server/containers
{"Containers":[{"id":"a7e22042-96e5-4659-b21a-0615d434bed7","name":"bash","type":"project"}]}
$ curl --data '{"action": "list", "id":"a7e22042-96e5-4659-b21a-0615d434bed7"}' -X POST http://localhost:8080/api/public/admin/server/containers
{"Containers":[{"id":"0f7da122-9c86-4384-b7bc-356bfb3b7f28","name":"projectGroupA","type":"project-group"},{"id":"ef9210db-180b-4351-8a2f-7e8ceaa42ec6","name":"master","type":"branch","parent":"a7e22042-96e5-4659-b21a-0615d434bed7"}]}

Создание контейнера: "action": "add"

Назначение полей запроса
Поле Описание
action add
id Не используется
type Тип нового контейнера. Обязательное. Допустимые значения: project, branch, project-group
name Название нового контейнера. Обязательное
parent Название или идентификатор проекта, в котором будет создана новая ветка

Если тип нового контейнера НЕ branch: не используется

review_with_comment Значение настройки проекта "Обязательный комментарий при разметке"

Если тип нового контейнера НЕ project: не используется

Изменение контейнера: "action": "update"

Назначение полей запроса
Поле Описание
action update
id Идентификатор изменяемого контейнера. Обязательное
type Тип изменяемого контейнера. Используется для поиска контейнера вместе с id. Изменить тип контейнера нельзя. Необязательное. Допустимые значения: project, branch, project-group
name Новое название контейнера. Обязательное
parent Не используется. Изменить проект в котором создана ветка нельзя
review_with_comment Новое значение настройки проекта "Обязательный комментарий при разметке"

Удаление контейнера: "action": "remove"

Назначение полей запроса
Поле Описание
action remove
id Идентификатор удаляемого контейнера. Обязательное
type Тип удаляемого контейнера. Используется для поиска контейнера вместе с id. Необязательное. Допустимые значения: project, branch, project-group
name Не используется
parent Не используется
review_with_comment Не используется

POST /api/public/admin/server/project-groups - управление составом групп проектов

Формат запроса:

{
  "action": "string",
  "project_group_name_or_id": "string",
  "project_name_or_id": "string"
}

Формат ответа:

{
  "action": "string",
  "project_group_id": "string",
  "project_group_name": "string",
  "project_id": "string",
  "project_name": "string"
}

Назначение полей запроса и ответа зависит от типа операции и определяется значением поля action.

Поддерживаемыe значения поля action
Значение Тип операции
get Получение экземпляра группы проектов
add-project-to-group Добавление проекта в группу проектов
remove-project-from-group Исключение проекта из группы проектов

Получение экземпляра группы проектов: "action": "get"

Назначение полей запроса
Поле Описание
action get
project_group_name_or_id Название или идентификатор запрашиваемой группы проектов.
Поддержка названия добавлена ПОСЛЕ версии 9.0.2
project_name_or_id Не используется

Добавление проекта в группу проектов: "action": "add-project-to-group"

Назначение полей запроса
Поле Описание
action add-project-to-group
project_group_name_or_id Название или идентификатор изменяемой группы проектов
project_name_or_id Название или идентификатор добавляемого проекта

Исключение проекта из группы проектов: "action": "remove-project-from-group"

Назначение полей запроса
Поле Описание
action remove-project-from-group
project_group_name_or_id Название или идентификатор изменяемой группы проектов
project_name_or_id Название или идентификатор исключаемого проекта

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

$ curl --data '{"action": "get", "project_group_name_or_id": "0f7da122-9c86-4384-b7bc-356bfb3b7f28"}' -X POST http://localhost:8080/api/public/admin/server/project-groups
{"action":"get","project_group_id":"0f7da122-9c86-4384-b7bc-356bfb3b7f28","project_group_name":"projectGroupA"}

$ curl --data '{"action": "get", "project_group_name_or_id": "projectGroupA"}' -X POST http://localhost:8080/api/public/admin/server/project-groups
{"action":"get","project_group_id":"0f7da122-9c86-4384-b7bc-356bfb3b7f28","project_group_name":"projectGroupA"}
$ curl --data '{"action": "add-project-to-group", "project_name_or_id": "iptables", "project_group_name_or_id": "projectGroupA"}' -X POST http://localhost:8080/api/public/admin/server/project-groups
{"action":"add-project-to-group","project_group_id":"0f7da122-9c86-4384-b7bc-356bfb3b7f28","project_group_name":"projectGroupA","project_id":"a8e0352c-0408-417c-8fd0-4fbe03f38980","project_name":"iptables"}
$ curl --data '{"action": "remove-project-from-group", "project_name_or_id": "iptables", "project_group_name_or_id": "projectGroupA"}' -X POST http://localhost:8080/api/public/admin/server/project-groups
{"action":"remove-project-from-group","project_group_id":"0f7da122-9c86-4384-b7bc-356bfb3b7f28","project_group_name":"projectGroupA","project_id":"a8e0352c-0408-417c-8fd0-4fbe03f38980","project_name":"iptables"}