База знаний VMmanager
Ваш опыт = наш роадмап!
Расскажите, как мы можем усилить платформы
ISPsystem для вашего бизнеса. Опрос займет 5 минут.
Пройти опрос
Режим фокусировки

Как создать собственный репозиторий скриптов?

Вы можете добавить в платформу собственный репозиторий скриптов. В качестве репозитория может использоваться выделенный или виртуальный сервер. Для каждого языка интерфейса в платформе может отображаться свой набор скриптов.

Порядок добавления

Чтобы создать собственный репозиторий скриптов, выполните следующие действия на сервере для репозитория и на сервере с платформой.

На сервере для репозитория:

  1. Установите и настройте веб-сервер.
  2. Создайте директорию для репозитория. Директория должна быть доступна для внешних подключений по HTTP. Например, /var/www/html/recipes/.
  3. Скопируйте файлы скриптов в директорию для репозитория.
  4. Создайте в директории для репозитория файлы с описанием скриптов: 

    • metadata_ru.json — для отображения в русском интерфейсе платформы;
    • metadata_en.json — для отображения в английском интерфейсе платформы;
    • metadata_es.json — для отображения в испанском интерфейсе платформы;
    • metadata.json — для отображения в любом интерфейсе платформы. 

      Все файлы создавать не обязательно. Например, если требуется отображать скрипты только для русского и английского интерфейсов, создайте только файлы metadata_ru.json и metadata_en.json.

      Если для всех языков платформы нужно отображать один набор скриптов с одинаковым описанием, создайте только файл metadata.json.

  5. Заполните файлы метаданных.
    Пример файла с описанием 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"
        }
      ]
    }
    Пояснения к файлу
  6. При необходимости добавьте дополнительные поля.
    Пример файла 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"]
            }
          ]
        }
      ]
    }
    Пояснения к файлу

На сервере с платформой:

  1. Получите токен авторизации:
    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 — токен авторизации.

  2. Выполните 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-схеме, поэтому их наличие и формат не проверяются при валидации;
  • поля tagstype и params в элементе recipe не отмечены как обязательные в JSON-схеме, но есть особенности их обработки:

    • tags — если поле отсутствует, скрипт не сохранится;
    • type — если поле не указано, используется значение shell;
    • params — если поле не указано, скрипт запускается без дополнительных параметров.

Верхний уровень

ПараметрТипОбязательныйПо умолчаниюОписание
typestringдаТип репозитория
recipearray of objectдаСписок скриптов репозитория

Элемент массива recipe

ПолеТипОбязательныйПо умолчаниюОписание
namestring, до 255 символовдаНазвание скрипта
descriptionstring, до 255 символовдаОписание скрипта
file_namestring, до 255 символовдаИмя файла скрипта в репозитории. Вместе с адресом репозитория образует ссылку для скачивания
updated_atstring, дата и времядаДата и время последнего обновления скрипта. Используется, чтобы отслеживать изменения файла скрипта
tagsarray of stringнетТеги скрипта, например linux, windows, centos, ubuntu. Определяют, для каких операционных систем скрипт будет показан в веб-интерфейсе платформы
typestringнетshellСпособ запуска скрипта. Допустимые значения: shell, ansible, power_shell
paramsarray of objectнетПараметры, которые платформа запрашивает у пользователя при запуске скрипта

Элемент массива params

ПолеТипОбязательныйПо умолчаниюОписание
namestringдаИмя параметра
descriptionstringнетОписание параметра, отображается пользователю при запуске скрипта
requiredboolнетfalseОбязателен ли параметр при запуске скрипта
typestringнетinput

Тип поля ввода. Допустимые значения:

  • input — обычное поле ввода;
  • select — выпадающий список.
select_valuesarrayда, если type = selectСписок значений для выпадающего списка

Проверка добавления

Проверка позволяет убедиться, что репозиторий доступен для использования в платформе.

Чтобы проверить добавление репозитория:

  1. В веб-интерфейсе платформы в разделе Скрипты проверьте отображение скриптов из добавленного репозитория.
  2. Запустите скрипт из репозитория на ВМ.
  3. Если скриптов нет, проверьте список репозиториев с помощью API-запроса:
    1. Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
    2. Получите токен авторизации:
      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 — токен авторизации.

    3. Выполните запрос:
      `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 минут. Чтобы обновить список скриптов вручную:

  1. Получите токен авторизации:
    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 — токен авторизации.

  2. Выполните API-запрос:

    curl -H 'x-xsrf-token: <token>' -X POST "https://domain.com/vm/v3/repository/<repo_id>/update" -d ''
    
    Пояснения к команде
Может быть полезно

Связанные статьи: