Вы можете добавить в платформу собственный репозиторий скриптов. В качестве репозитория может использоваться выделенный или виртуальный сервер. Для каждого языка интерфейса в платформе может отображаться свой набор скриптов.
Порядок добавления
Чтобы создать собственный репозиторий скриптов, выполните следующие действия на сервере для репозитория и на сервере с платформой.
На сервере для репозитория:
- Установите и настройте веб-сервер.
- Создайте директорию для репозитория. Директория должна быть доступна для внешних подключений по HTTP. Например, /var/www/html/recipes/.
- Скопируйте файлы скриптов в директорию для репозитория.
-
Создайте в директории для репозитория файлы с описанием скриптов:
- metadata_ru.json — для отображения в русском интерфейсе платформы;
- metadata_en.json — для отображения в английском интерфейсе платформы;
- metadata_es.json — для отображения в испанском интерфейсе платформы;
- metadata.json — для отображения в любом интерфейсе платформы.
Все файлы создавать не обязательно. Например, если требуется отображать скрипты только для русского и английского интерфейсов, создайте только файлы metadata_ru.json и metadata_en.json.
Если для всех языков платформы нужно отображать один набор скриптов с одинаковым описанием, создайте только файл metadata.json.
- Заполните файлы метаданных.
Пример файла с описанием metadata.json{ "type": "recipe", "recipe": [ { "name": "ForLinux", "tags": [ "linux" ], "description": "script1", "file_name": "script1.sh", "updated_at": "2020-05-15 12:01:12" }, { "name": "ForWindows", "tags": [ "windows" ], "description": "script2", "file_name": "script2.ps", "updated_at": "2022-04-14 07:57:13" } ] }Пояснения к файлу - При необходимости добавьте дополнительные поля.
Пример файла metadata.json с дополнительными полями{ "type": "recipe", "recipe": [ { "name": "helloworld", "tags": ["centos", "debian", "ubuntu", "new"], "description": "description1", "file_name": "helloworld.sh", "updated_at": "2017-11-13 13:31:03", "type": "shell", "params": [ { "name": "greeting", "description": "Приветственный текст", "required": false, "type": "input" }, { "name": "mode", "type": "select", "select_values": ["fast", "slow"] } ] } ] }Пояснения к файлу
На сервере с платформой:
- Получите токен авторизации:
curl -k -X POST -H "accept: application/json" -H "Content-Type: application/json" 'https://example.com/api/auth/v4/public/token' -d '{"email": "admin_email", "password": "admin_pass"}'Пояснения к команде:
example.com— доменное имя или IP-адрес сервера с платформой;admin_email— email администратора платформы;admin_pass— пароль администратора платформы.
В ответ придёт сообщение вида:
Пример ответа в JSON{ "confirmed": true, "expires_at": null, "id": "6", "token": "4-e9726dd9-61d9-2940-add3-914851d2cb8a" }Сохраните полученное значение параметра token — токен авторизации.
- Выполните API-запрос для создания репозитория в платформе:
curl -H 'x-xsrf-token: <token>' -X POST https://localhost/vm/v3/repository -d '{"name":"<repo_name>","url":"<repo_url"}'Поддерживаемые параметры metadata.json
Ниже приведён список параметров, которые обрабатываются при синхронизации репозитория скриптов. Часть из них не описана в JSON-схеме, но поддерживается платформой.
- JSON-схема не запрещает дополнительные поля, поэтому лишние параметры не отклоняются при валидации;
- поля
typeиparamsподдерживаются платформой, но не описаны в JSON-схеме, поэтому их наличие и формат не проверяются при валидации; -
поля
tags,typeиparamsв элементеrecipeне отмечены как обязательные в JSON-схеме, но есть особенности их обработки:tags— если поле отсутствует, скрипт не сохранится;type— если поле не указано, используется значениеshell;params— если поле не указано, скрипт запускается без дополнительных параметров.
Верхний уровень
Элемент массива recipe
Элемент массива params
Проверка добавления
Проверка позволяет убедиться, что репозиторий доступен для использования в платформе.
Чтобы проверить добавление репозитория:
- В веб-интерфейсе платформы в разделе Скрипты проверьте отображение скриптов из добавленного репозитория.
- Запустите скрипт из репозитория на ВМ.
- Если скриптов нет, проверьте список репозиториев с помощью API-запроса:
- Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Получите токен авторизации:
curl -k -X POST -H "accept: application/json" -H "Content-Type: application/json" 'https://example.com/api/auth/v4/public/token' -d '{"email": "admin_email", "password": "admin_pass"}'Пояснения к команде:
example.com— доменное имя или IP-адрес сервера с платформой;admin_email— email администратора платформы;admin_pass— пароль администратора платформы.
В ответ придёт сообщение вида:
Пример ответа в JSON{ "confirmed": true, "expires_at": null, "id": "6", "token": "4-e9726dd9-61d9-2940-add3-914851d2cb8a" }Сохраните полученное значение параметра token — токен авторизации.
- Выполните запрос:
`curl -H 'x-xsrf-token: <token>' -X GET 'https://domain.com/vm/v3/repository?where=%28type%20EQ%20%27recipe%27%29'`Пример ответа{ "last_notify": 17387, "list": [ { "hidden": true, "id": 1, "immortal": true, "name": "recipe_repository", "os_count": 0, "storage": null, "type": "recipe", "url": "http://download.ispsystem.com/OSTemplate/vm6/recipes/" }, { "hidden": false, "id": 22, "immortal": false, "name": "testrepo", "os_count": 0, "storage": null, "type": "recipe", "url": "http://<IP>/recipes/" }, { "hidden": false, "id": 34, "immortal": false, "name": "myrepo", "os_count": 0, "storage": null, "type": "recipe", "url": "http://<IP>/" } ], "size": 3
Обновление списка скриптов
Список скриптов в платформе синхронизируется с репозиторием каждые 15 минут. Чтобы обновить список скриптов вручную:
- Получите токен авторизации:
curl -k -X POST -H "accept: application/json" -H "Content-Type: application/json" 'https://example.com/api/auth/v4/public/token' -d '{"email": "admin_email", "password": "admin_pass"}'Пояснения к команде:
example.com— доменное имя или IP-адрес сервера с платформой;admin_email— email администратора платформы;admin_pass— пароль администратора платформы.
В ответ придёт сообщение вида:
Пример ответа в JSON{ "confirmed": true, "expires_at": null, "id": "6", "token": "4-e9726dd9-61d9-2940-add3-914851d2cb8a" }Сохраните полученное значение параметра token — токен авторизации.
-
Выполните API-запрос:
curl -H 'x-xsrf-token: <token>' -X POST "https://domain.com/vm/v3/repository/<repo_id>/update" -d ''Пояснения к команде
Связанные статьи: