В код шаблона Cloud Assembly можно добавить раздел cloudConfig, который будет содержать команды инициализации компьютера, выполняемые во время развертывания.
Форматы команд cloudConfig
- В ОС Linux команды инициализации соответствуют открытому стандарту cloud-init.
- В ОС Windows для поддержки команд инициализации используется служба Cloudbase-init.
В командах cloud-init (Linux) и Cloudbase-init (Windows) используется разный синтаксис. Раздел cloudConfig для одной операционной системы не будет работать в образе компьютера другой операционной системы.
Функции команд cloudConfig
Команды инициализации используются для автоматизации применения данных или параметров во время создания экземпляра. С их помощью можно настраивать пользователей, разрешения, устанавливаемые решения и любые другие операции на основе выполнения команд. Примеры
- Настройка имени узла
- Создание и настройка закрытых ключей SSH
- Установка пакетов
Куда можно добавлять команды cloudConfig
Раздел cloudConfig можно добавить в код облачного шаблона, но при настройке инфраструктуры данный раздел также можно заранее добавить в образ компьютера. В этом случае выполняется одинаковая инициализация всех облачных шаблонов, ссылающихся на исходный образ.
Команды инициализации могут содержаться как в облачном шаблоне, так и в сопоставлении образа. Во время развертывания происходит объединение команд, и в службе Cloud Assembly запускаются консолидированные команды.
Если команда присутствует и в схеме элементов, и в сопоставлении образа, но ее параметры различаются, то выполняется только команда из сопоставления образа.
Дополнительные сведения см. в разделе Дополнительные сведения о сопоставлении образов в vRealize Automation.
Синтаксис в командах cloudConfig
Некорректные команды cloudConfig могут привести к тому, что ресурс будет настроен неправильно или работать непредсказуемым образом.
Чтобы отменить развертывание в случае синтаксической ошибки в операторах #cloud-config
, добавьте следующее свойство.
cloudConfigSettings: deploymentFailOnCloudConfigRuntimeError: true
В следующем облачном шаблоне команда - mkdir
не находится в новой строке в разделе runcmd:
, как это должно быть, поэтому каталог никогда не будет создан. Свойство deploymentFailOnCloudConfigRuntimeError: true
не выполняет развертывание из-за ошибки.
formatVersion: 1 inputs: {} resources: Cloud_vSphere_Machine_1: type: Cloud.vSphere.Machine properties: image: img1 cpuCount: 1 totalMemoryMB: 1024 cloudConfigSettings: deploymentFailOnCloudConfigRuntimeError: true cloudConfig: | #cloud-config runcmd:- mkdir -p /tmp/test-dir
Если это свойство опустить или задать для него значение false
, развертывание будет продолжаться даже в случае сбоя команд cloudConfig.
Кроме того, для свойства требуется строка #cloud-config
. Если данная строка отсутствует, развертывание будет продолжаться независимо от настройки свойства.
Правильно:
cloudConfigSettings: deploymentFailOnCloudConfigRuntimeError: true cloudConfig: | #cloud-config runcmd:- mkdir -p /tmp/test-dir
Неправильно:
cloudConfigSettings: deploymentFailOnCloudConfigRuntimeError: true cloudConfig: | runcmd:- mkdir -p /tmp/test-dir
Примеры команд cloudConfig
Следующий пример раздела cloudConfig взят из кода облачного шаблона для сервера MySQL на базе Linux (этот код используется для примера использования WordPress).
Чтобы обеспечить правильную интерпретацию команд, всегда указывайте символ канала cloudConfig: |
, как показано ниже.
cloudConfig: | #cloud-config repo_update: true repo_upgrade: all packages: - apache2 - php - php-mysql - libapache2-mod-php - php-mcrypt - mysql-client runcmd: - mkdir -p /var/www/html/mywordpresssite && cd /var/www/html && wget https://wordpress.org/latest.tar.gz && tar -xzf /var/www/html/latest.tar.gz -C /var/www/html/mywordpresssite --strip-components 1 - i=0; while [ $i -le 5 ]; do mysql --connect-timeout=3 -h ${DBTier.networks[0].address} -u root -pmysqlpassword -e "SHOW STATUS;" && break || sleep 15; i=$((i+1)); done - mysql -u root -pmysqlpassword -h ${DBTier.networks[0].address} -e "create database wordpress_blog;" - mv /var/www/html/mywordpresssite/wp-config-sample.php /var/www/html/mywordpresssite/wp-config.php - sed -i -e s/"define( 'DB_NAME', 'database_name_here' );"/"define( 'DB_NAME', 'wordpress_blog' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_USER', 'username_here' );"/"define( 'DB_USER', 'root' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_PASSWORD', 'password_here' );"/"define( 'DB_PASSWORD', 'mysqlpassword' );"/ /var/www/html/mywordpresssite/wp-config.php && sed -i -e s/"define( 'DB_HOST', 'localhost' );"/"define( 'DB_HOST', '${DBTier.networks[0].address}' );"/ /var/www/html/mywordpresssite/wp-config.php - service apache2 reload
Если сценарий cloud-init имеет непредвиденное поведение, проверьте выходные данные на консоли в /var/log/cloud-init-output.log
в ходе устранения неполадок. Дополнительные сведения о cloud-init см. в документации по cloud-init.
Команды и спецификации настройки не всегда можно использовать совместно
При развертывании в vSphere в случае использования встроенной команды cloudConfig и одновременной инициализации спецификаций настройки необходимо соблюдать осторожность. Их совместимость не подтверждена формально, и их совместное использование может привести к непредвиденным или нежелательным результатам.
Пример взаимодействия команд и спецификаций настройки см. в Статические IP-адреса vSphere в Cloud Assembly.