Для выполнения сложных или специфических настроек ОС гостевой ВМ могут быть использованы пользовательские скрипты, позволяющие автоматизировать процессы.

Запуск скриптов через контекстуализацию

Для ВМ на ОС Windows используются скрипты PowerShell. В ОС Linux может быть использован любой скриптовый язык, если его интерпретатор установлен в базовом образе ОС, и задана соответствующая строка shebang

Для shell-скриптов shebang не требуется.

ПК СВ поддерживает возможность запуска скриптов после развертывания ВМ, используя механизм контекстуализации. За запуск скриптов отвечают параметры: START_SCRIPT и INIT_SCRIPTS.

  • INIT_SCRIPTS — используется при запуске более одного скрипта или если имя скрипта не соответствует init.sh. При использовании init_scripts файлы скриптов загружаются в хранилище фронтальной машины и подключаются в настройках шаблона ВМ;

  • START_SCRIPT — поле контекстуализации, заполняемое при создании шаблона ВМ во вкладке Контекст. В отличие от INIT_SCRIPTS, в данное поле вводится текст скрипта, который будет выполнятся при запуске ВМ.

Для хранения скриптов, содержащих конфиденциальную информацию, может быть использован параметр START_SCRIPT_BASE64. Этот параметр позволяет шифровать скрипты в кодировке base64. Расшифровка скрипта производится в момент записи временного файла при запуске ВМ.

Пример установки пакета ntpdate и настройки времени, с использованием bash-скрипта:

CONTEXT = [

START_SCRIPT = "#!/bin/bash

yum update
yum install -y ntpdate
ntpdate 0.pool.ntp.org"

]
CODE

Разовый запуск скрипта после развертывания ВМ

В основе механизма запуска скриптов через контекстуализацию лежит система init.d, что приводит к повторному выполнению всех скриптов при каждом запуске ВМ.

Для реализации разового запуска скрипта необходимо использовать механизмы контроля условия запуска. Одним из вариантов контроля является использование файла-флага.

Пример скрипта с использованием файла-флага:

#/bin/bash
if [ ! -f /home/iurii/test.txt ]; then
date >> /home/iurii/test.txt
touch /home/iurii/test.txt
fi
CODE

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

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