База знаний VMmanager
Режим фокусировки

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

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

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

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

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

  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-схеме, поэтому их наличие и формат не проверяются при валидации;
  • поля tags, type и 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 ''
    
    Пояснения к команде
Может быть полезно

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