Help:Public API/management/containers: Difference between revisions
M.vinogradov (talk | contribs) (Created page with "= Управление контейнерами (проектами, ветками, группами проектов) = В данном разделе содержится описание REST API управления контейнерами и их содержимым. Для выполнения операций получения списка контейнеров, их создания, изменения и удаления существует http-ресу...") |
m (replace brackets with dash in headings) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 5: | Line 5: | ||
Для выполнения операций получения списка контейнеров, их создания, изменения и удаления существует http-ресурс | Для выполнения операций получения списка контейнеров, их создания, изменения и удаления существует http-ресурс | ||
POST /api/public/admin/server/containers | |||
POST /api/public/admin/server/containers | |||
Для операций управления составом групп проектов существует http-ресурс | Для операций управления составом групп проектов существует http-ресурс | ||
POST /api/public/admin/server/project-groups | |||
POST /api/public/admin/server/project-groups | |||
Для операции переименования снимков существует http-ресурс | |||
PUT /api/public/snapshots/{snapshot_id}/update | |||
{{Note|type=warn|text=Для использования ресурсов необходимо использовать http-запросы с токеном пользователя имеющего соответствующие права}} | {{Note|type=warn|text=Для использования ресурсов необходимо использовать http-запросы с токеном пользователя имеющего соответствующие права}} | ||
== <code>POST /api/public/admin/server/containers</code> | == <code>POST /api/public/admin/server/containers</code> — управление набором проектов, веток, групп проектов == | ||
Формат запроса: | Формат запроса: | ||
Line 49: | Line 49: | ||
</pre> | </pre> | ||
Назначение полей запроса и установка значений полей ответа зависит от типа операции и определяется значением поля запроса | Назначение полей запроса и установка значений полей ответа зависит от типа операции и определяется значением поля запроса '''action'''. | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ style=white-space:nowrap | Поддерживаемыe значения поля | |+ style=white-space:nowrap | Поддерживаемыe значения поля action | ||
|- | |- | ||
!Значение | !Значение | ||
!Тип операции | !Тип операции | ||
|- | |- | ||
| | |list | ||
|Получение списка контейнеров | |Получение списка контейнеров | ||
|- | |- | ||
| | |add | ||
|Создание контейнера | |Создание контейнера | ||
|- | |- | ||
| | |update | ||
|Изменение контейнера | |Изменение контейнера | ||
|- | |- | ||
| | |remove | ||
|Удаление контейнера | |Удаление контейнера | ||
|} | |} | ||
=== Получение списка контейнеров | === Получение списка контейнеров — "action": "list" === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
!Поле | !Поле | ||
!Описание | !Описание | ||
|- | |- | ||
| | |id | ||
|Если не пустое: идентификатор контейнера, для которого будут загружены "связанные" контейнеры: | |Если не пустое: идентификатор контейнера, для которого будут загружены "связанные" контейнеры: | ||
:- если передан id группы проектов | :- если передан id группы проектов — вернётся список проектов входящих в данную группу | ||
:- если передан id проекта | :- если передан id проекта — вернётся список групп проектов, в который входит проект + список его веток | ||
:- если передан id ветки | :- если передан id ветки — вернётся список снимков данной ветки | ||
|- | |- | ||
| | |type | ||
|Допустимые значения: | |Допустимые значения: '''project''', '''branch''', '''project-group''' | ||
Если не пустое: отфильтровывает список контейнеров по типу | Если не пустое: отфильтровывает список контейнеров по типу | ||
Если пустое: | Если пустое: | ||
:- если поле | :- если поле id пустое — возвращается объединённый список проектов и групп проектов | ||
|- | |- | ||
| | |name | ||
|Если не пустое: | |Если не пустое: | ||
:- если поле | :- если поле id пустое — отфильтровывает список контейнеров по названию | ||
:- если поле | :- если поле id не пустое — фильтр по названию не применяется | ||
|- | |- | ||
| | |parent | ||
|Не используется | |Не используется | ||
|- | |- | ||
| | |review_with_comment | ||
|Не используется | |Не используется | ||
|} | |} | ||
==== Примеры запросов с | ==== Примеры запросов с "action": "list" ==== | ||
<pre> | <pre> | ||
$ curl --data '{"action": "list"}' -X POST http://localhost:8080/api/public/admin/server/containers | $ 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"}]} | {"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 | $ 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"}]} | {"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 | $ 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"}]} | {"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 | $ 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"}]} | {"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"}]} | ||
</pre> | </pre> | ||
=== Создание контейнера | === Создание контейнера — "action": "add" === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
!Поле | !Поле | ||
!Описание | !Описание | ||
|- | |- | ||
| | |id | ||
|Не используется | |Не используется | ||
|- | |- | ||
| | |type | ||
|Тип нового контейнера. Обязательное. Допустимые значения: | |Тип нового контейнера. Обязательное. Допустимые значения: '''project''', '''branch''', '''project-group''' | ||
|- | |- | ||
| | |name | ||
|Название нового контейнера. Обязательное | |Название нового контейнера. Обязательное | ||
|- | |- | ||
| | |parent | ||
|Название или идентификатор проекта, в котором будет создана новая ветка | |Название или идентификатор проекта, в котором будет создана новая ветка | ||
Если тип нового контейнера | Если тип нового контейнера не '''branch''', не используется | ||
|- | |- | ||
| | |review_with_comment | ||
|Значение настройки проекта "Обязательный комментарий при разметке" | |Значение настройки проекта "Обязательный комментарий при разметке" | ||
Если тип нового контейнера | Если тип нового контейнера не '''project''', не используется | ||
|} | |} | ||
=== Изменение контейнера | === Изменение контейнера — "action": "update" === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
!Поле | !Поле | ||
!Описание | !Описание | ||
|- | |- | ||
| | |id | ||
|Идентификатор изменяемого контейнера. Обязательное | |Идентификатор изменяемого контейнера. Обязательное | ||
|- | |- | ||
| | |type | ||
|Тип изменяемого контейнера. Используется для поиска контейнера вместе с id. Изменить тип контейнера нельзя. Необязательное. Допустимые значения: | |Тип изменяемого контейнера. Используется для поиска контейнера вместе с id. Изменить тип контейнера нельзя. Необязательное. Допустимые значения: '''project''', '''branch''', '''project-group''' | ||
|- | |- | ||
| | |name | ||
|Новое название контейнера. Обязательное | |Новое название контейнера. Обязательное | ||
|- | |- | ||
| | |parent | ||
|Не используется. Изменить проект в котором создана ветка нельзя | |Не используется. Изменить проект в котором создана ветка нельзя | ||
|- | |- | ||
| | |review_with_comment | ||
|Новое значение настройки проекта "Обязательный комментарий при разметке" | |Новое значение настройки проекта "Обязательный комментарий при разметке" | ||
|} | |} | ||
=== Удаление контейнера | === Удаление контейнера — "action": "remove" === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
!Поле | !Поле | ||
!Описание | !Описание | ||
|- | |- | ||
| | |id | ||
|Идентификатор удаляемого контейнера. Обязательное | |Идентификатор удаляемого контейнера. Обязательное | ||
|- | |- | ||
| | |type | ||
|Тип удаляемого контейнера. Используется для поиска контейнера вместе с id. Необязательное. Допустимые значения: | |Тип удаляемого контейнера. Используется для поиска контейнера вместе с id. Необязательное. Допустимые значения: '''project''', '''branch''', '''project-group''' | ||
|- | |- | ||
| | |name | ||
|Не используется | |Не используется | ||
|- | |- | ||
| | |parent | ||
|Не используется | |Не используется | ||
|- | |- | ||
| | |review_with_comment | ||
|Не используется | |Не используется | ||
|} | |} | ||
== <code>POST /api/public/admin/server/project-groups</code> | == <code>POST /api/public/admin/server/project-groups</code> — управление составом групп проектов == | ||
Формат запроса: | Формат запроса: | ||
Line 232: | Line 213: | ||
</pre> | </pre> | ||
Назначение полей запроса и ответа зависит от типа операции и определяется значением поля | Назначение полей запроса и ответа зависит от типа операции и определяется значением поля '''action'''. | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ style=white-space:nowrap | Поддерживаемыe значения поля | |+ style=white-space:nowrap | Поддерживаемыe значения поля action | ||
|- | |- | ||
!Значение | !Значение | ||
!Тип операции | !Тип операции | ||
|- | |- | ||
| | |get | ||
|Получение экземпляра группы проектов | |Получение экземпляра группы проектов | ||
|- | |- | ||
| | |add-project-to-group | ||
|Добавление проекта в группу проектов | |Добавление проекта в группу проектов | ||
|- | |- | ||
| | |remove-project-from-group | ||
|Исключение проекта из группы проектов | |Исключение проекта из группы проектов | ||
|} | |} | ||
=== Получение экземпляра группы проектов | === Получение экземпляра группы проектов — "action": "get" === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
!Поле | !Поле | ||
!Описание | !Описание | ||
|- | |- | ||
| | |project_group_name_or_id | ||
| | |Название или идентификатор запрашиваемой группы проектов | ||
{{Note|text=Поддержка названия добавлена после версии 9.0.2}} | |||
|- | |- | ||
| | |project_name_or_id | ||
|Не используется | |Не используется | ||
|} | |} | ||
=== Добавление проекта в группу проектов | === Добавление проекта в группу проектов — "action": "add-project-to-group" === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
!Поле | !Поле | ||
!Описание | !Описание | ||
|- | |- | ||
| | |project_group_name_or_id | ||
|Название или идентификатор изменяемой группы проектов | |Название или идентификатор изменяемой группы проектов | ||
|- | |- | ||
| | |project_name_or_id | ||
|Название или идентификатор добавляемого проекта | |Название или идентификатор добавляемого проекта | ||
|} | |} | ||
=== Исключение проекта из группы проектов | === Исключение проекта из группы проектов — "action": "remove-project-from-group" === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
!Поле | !Поле | ||
!Описание | !Описание | ||
|- | |- | ||
| | |project_group_name_or_id | ||
|Название или идентификатор изменяемой группы проектов | |Название или идентификатор изменяемой группы проектов | ||
|- | |- | ||
| | |project_name_or_id | ||
|Название или идентификатор исключаемого проекта | |Название или идентификатор исключаемого проекта | ||
|} | |} | ||
==== Примеры запросов управления составом групп === | ==== Примеры запросов управления составом групп ==== | ||
<pre> | <pre> | ||
$ 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 | $ 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 | ||
Line 311: | Line 281: | ||
$ curl --data '{"action": "get", "project_group_name_or_id": "projectGroupA"}' -X POST http://localhost:8080/api/public/admin/server/project-groups | $ 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"} | {"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 | $ 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"} | {"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 | $ 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"} | {"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"} | ||
</pre> | </pre> |
Latest revision as of 18:59, 28 October 2024
Управление контейнерами (проектами, ветками, группами проектов)
В данном разделе содержится описание 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
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.
Значение | Тип операции |
---|---|
list | Получение списка контейнеров |
add | Создание контейнера |
update | Изменение контейнера |
remove | Удаление контейнера |
Получение списка контейнеров — "action": "list"
Поле | Описание |
---|---|
id | Если не пустое: идентификатор контейнера, для которого будут загружены "связанные" контейнеры:
|
type | Допустимые значения: project, branch, project-group
Если не пустое: отфильтровывает список контейнеров по типу Если пустое:
|
name | Если не пустое:
|
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"
Поле | Описание |
---|---|
id | Не используется |
type | Тип нового контейнера. Обязательное. Допустимые значения: project, branch, project-group |
name | Название нового контейнера. Обязательное |
parent | Название или идентификатор проекта, в котором будет создана новая ветка
Если тип нового контейнера не branch, не используется |
review_with_comment | Значение настройки проекта "Обязательный комментарий при разметке"
Если тип нового контейнера не project, не используется |
Изменение контейнера — "action": "update"
Поле | Описание |
---|---|
id | Идентификатор изменяемого контейнера. Обязательное |
type | Тип изменяемого контейнера. Используется для поиска контейнера вместе с id. Изменить тип контейнера нельзя. Необязательное. Допустимые значения: project, branch, project-group |
name | Новое название контейнера. Обязательное |
parent | Не используется. Изменить проект в котором создана ветка нельзя |
review_with_comment | Новое значение настройки проекта "Обязательный комментарий при разметке" |
Удаление контейнера — "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.
Значение | Тип операции |
---|---|
get | Получение экземпляра группы проектов |
add-project-to-group | Добавление проекта в группу проектов |
remove-project-from-group | Исключение проекта из группы проектов |
Получение экземпляра группы проектов — "action": "get"
Поле | Описание |
---|---|
project_group_name_or_id | Название или идентификатор запрашиваемой группы проектов
Поддержка названия добавлена после версии 9.0.2
|
project_name_or_id | Не используется |
Добавление проекта в группу проектов — "action": "add-project-to-group"
Поле | Описание |
---|---|
project_group_name_or_id | Название или идентификатор изменяемой группы проектов |
project_name_or_id | Название или идентификатор добавляемого проекта |
Исключение проекта из группы проектов — "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"}