How to Wiki Database (change log) http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

195 lines
9.2 KiB

10 months ago
====== API для администрирования ======
Сокет администратора предоставляет интерфейс для запросов информации и настройки [[Yggdrasil:Yggdrasil|Yggdrasil]] во время выполнения. По умолчанию Yggdrasil прослушивает подключения администратора на localhost: 9001 (параметр AdminListen в [[yggdrasil:config_russian|конфигурационном файле]]).
===== Утилита для управления =====
Утилита yggdrasilctl предоставляет удобный интерфейс CLI для сокета администратора Yggdrasil. Она может подключаться как к локальным, так и к удаленным экземплярам Yggdrasil и принимать те же команды, что описаны ниже. Каждое поле задается в формате field=value.
Примеры использования:
<code>yggdrasilctl getDHT
yggdrasilctl getPeers</code>
Для получения списка поддерживаемых команд наберите:
<code>yggdrasilctl list</code>
Чтобы выполнить действие на удаленном узле Yggdrasil, укажите параметр -endpoint:
<code>yggdrasilctl -endpoint=tcp://10.0.0.1:9001 getPeers
yggdrasilctl -endpoint=unix:///var/run/yggdrasil.sock getDHT</code>
Чтобы получить ответ в формате JSON вместо "дружественного" вывода, укажите параметр -json:
<code>yggdrasilctl -json getPeers</code>
===== Сокет администратора =====
Сокет администратора Yggdrasil для запросов и ответов использует формат JSON.
Запрос должен быть:
* корректной строфой JSON
* должен завершаться символом новой строки (\n)
После получения запроса возвращается ответная строфа.
==== Запрос ====
Структура типичного запроса выглядит следующим образом:
<code json>{
"request": "XXX",
"arguments": {
"baz": "qux"
}
}</code>
Запрос:
* //должен// содержать поле "request" (string) - значение содержит команду запроса
* //может// иметь поле "keepalive" (bool) - значение true или false, указывающее, следует ли поддерживать соединение для дальнейших запросов (если не указано, Yggdrasil закроет соединение администратора после возврата ответа)
* //должен// содержать другие обязательные поля для конкретного запроса
* //может// содержать другие необязательные поля для запроса
===Пример выполнения запроса с помощью nc через unix-сокет===
<code>echo "{\"request\": \"debug_remotegetself\", \"arguments\": {\"key\": \"00000275cb3ab9ee8d285ecaef5a0d82fbd6d19edc5bc33617094232fd047964\"}}" | nc -U /var/run/yggdrasil.sock</code>
==== Ответ ====
Типичный ответ имеет такую структуру:
<code json>{
"request":
{
"request": "XXX",
"foo": "bar",
"baz": "qux"
},
"response":
{
},
"status": "success"
}</code>
Ответ:
* //всегда// содержит поле "request" (string), которое содержит тело исходного запроса
* //всегда// содержит поле "status" (string), которое может сожержать либо "success" (успех), либо "error" (ошибка)
* //дополнительно// может содержать секцию "response", который содержит данные ответа на запрос
* //дополнительно// может содержать поле "error" (string), содержащее текст ошибки
==== Типы запросов ====
Поле "request" содержит команду, предписывающую, какой запрос следует выполнить.
=== getDHT ===
Не содержит никаких дополнительных полей запроса.
Возвращает известные узлы в DHT.
* key (string) содержит PublicKey удаленного узла
* port (int) порт
* rest (int)
=== getPeers ===
Не содержит никаких дополнительных полей запроса.
Возвращает одну или несколько записей, содержащих информацию об активных одноранговых сеансах. Первая запись обычно относится к текущему узлу.
Для каждого IPv6-адреса:
* key (string) содержит PublicKey удаленного узла
* port (uint8) номер локального порта
* coords ([]int) содержит координаты узла в дереве
* remote (string) содержит URI удаленного узла
=== addPeer ===
Ожидает:
* uri (string) адрес добавляемого узла в стандартном формате URI, используемом в файле конфигурации, т. е. ''%%tcp://a.b.c.d:e%%''
Добавляет новый узел.
Возвращает:
* Ноль или более успешно добавленных строк URI в секции «added»
* Ноль или более неудачных URI в секции «not_added»
=== removePeer ===
Ожидает:
* port (uint8) порт удаляемого узла, его можно определить с помощью getPeers
Удаляет существующий узел.
Возвращает:
* Ноль или более строк с успешно удаленными портами в секции «removed»
* Ноль или более неудачных портов в секции «not_removed»
=== getSelf ===
Не ожидает никаких дополнительных полей запроса.
Возвращает одну запись, содержащую информацию о текущем узле Yggdrasil.
Для текущего адреса IPv6:
* key (string) содержит PublicKey текущего узла
* build_name (string) содержит имя сборки, если оно доступно (например, yggdrasil, yggdrasil-Development)
* build_version (string) содержит версию сборки, если она доступна (например, 0.3.0, 0.2.7-0091)
* coords ([]int) содержит координаты узла в дереве
* subnet (string) содержит маршрутизируемую подсеть IPv6 для данного хоста
=== getSessions ===
Не ожидает никаких дополнительных полей запроса.
Возвращает ноль или более записей, содержащих информацию об открытых сеансах между текущим узлом Yggdrasil и другими узлами. Открытые сеансы говорят о том, что недавно был обмен траффиком с удаленным узлом.
Для каждого IPv6-адреса:
* key (string) содержит PublicKey удаленного узла
=== getTunTap ===
Не ожидает никаких дополнительных полей запроса.
Возвращает одну запись, содержащую информацию об адаптере TUN/TAP текущего узла.
Для каждого адаптера:
* mtu (uint8) содержит MTU локального адаптера TUN/TAP
=== getMulticastInterfaces ===
Не ожидает никаких дополнительных полей запроса.
Возвращает ноль или более строк, содержащих включенные многоадресные интерфейсы.
Если возвращаются ноль строк, то подразумевается, что многоадресный пиринг не разрешен ни на одном интерфейсе.
=== getNodeInfo ===
Ожидает:
* key=строка, содержащая hex-кодированный открытый ключ удаленного узла, в том же формате, что и, например, подробный вывод ответа из getDHT
Просит удаленный узел ответить с его nodeinfo.
Возвращает секцию nodeinfo. Данные могут быть в любом формате, могут содержать любые ключи.
====== Ссылки ======
Admin API (EN): https://yggdrasil-network.github.io/admin.html
~~DISCUSSION~~