В код шаблона 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.