Puede agregar una sección de cloudConfig al código de plantilla de Cloud Assembly, en la que se agregan comandos de inicialización de la máquina que se ejecutan en el momento de la implementación.

Formatos del comando cloudConfig

  • Linux: los comandos de inicialización siguen el estándar cloud-init abierto.
  • Windows: los comandos de inicialización utilizan Cloudbase-init.

Cloud-init de Linux y Cloudbase-init de Windows no comparten la misma sintaxis. Una sección de cloudConfig para un sistema operativo no funcionará en una imagen de máquina del otro sistema operativo.

Qué pueden hacer los comandos de cloudConfig

Los comandos de inicialización se utilizan para automatizar la aplicación de datos u opciones de configuración en el momento de creación de la instancia, que puede personalizar usuarios, permisos, instalaciones o cualquier otra operación basada en comandos. Algunos ejemplos son los siguientes:

  • Configurar un nombre de host
  • Generar y configurar claves privadas SSH
  • Instalar paquetes

Dónde se pueden agregar comandos de cloudConfig

Puede agregar una sección de cloudConfig al código de plantilla de nube, pero también puede agregar de antemano una a una imagen de máquina al configurar la infraestructura. Luego, todas las plantillas de nube que hacen referencia a la imagen de origen obtienen la misma inicialización.

Es posible que tenga tanto un mapa de imagen como una plantilla de nube que contengan comandos de inicialización. En el momento de la implementación, los comandos se combinan y Cloud Assembly ejecuta los comandos consolidados.

Cuando el mismo comando aparece en ambos lugares, pero incluye distintos parámetros, solo se ejecuta el comando del mapa de imagen.

Consulte Más información sobre las asignaciones de imagen en vRealize Automation para obtener más detalles.

Sintaxis en los comandos de cloudConfig

Los comandos de cloudConfig con errores pueden provocar que un recurso no esté configurado correctamente o que se comporte de forma impredecible.

Para cancelar una implementación cuando hay un error de sintaxis en las instrucciones de #cloud-config, agregue la siguiente propiedad.

      cloudConfigSettings:
        deploymentFailOnCloudConfigRuntimeError: true

En la siguiente plantilla de nube, el comando - mkdir no se encuentra en una nueva línea en runcmd: como se requiere, por lo que el directorio nunca se creará. La propiedad deploymentFailOnCloudConfigRuntimeError: true falla en la implementación debido al error.

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

Si omite la propiedad o la establece como false, la implementación continúa aunque se produzca un error en los comandos de cloudConfig.

Además, la propiedad requiere la línea #cloud-config. Si omite la línea, la implementación continúa independientemente de la configuración de la propiedad.

Correcto:

      cloudConfigSettings:
        deploymentFailOnCloudConfigRuntimeError: true
      cloudConfig: |
        #cloud-config
        runcmd:- mkdir -p /tmp/test-dir

Incorrecto:

      cloudConfigSettings:
        deploymentFailOnCloudConfigRuntimeError: true
      cloudConfig: |
        runcmd:- mkdir -p /tmp/test-dir

Comandos cloudConfig de ejemplo

El siguiente ejemplo de sección de cloudConfig se tomó del código de plantilla de nube del caso práctico de WordPress para el servidor MySQL basado en Linux.

Nota:

Para garantizar una interpretación correcta de los comandos, incluya siempre el carácter de canalización cloudConfig: | como se muestra.

      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

Si un script de cloud-init se comporta de forma inesperada, compruebe la salida de la consola capturada en /var/log/cloud-init-output.log durante la solución de problemas. Para obtener más información sobre cloud-init, consulte la documentación de cloud-init.

Es posible que los comandos y las especificaciones de personalización no se combinen

Cuando se implementa en vSphere, proceda con cuidado si intenta combinar el comando integrado de cloudConfig y la inicialización de la especificación de personalización. No son compatibles de manera formal y pueden generar resultados incoherentes o no deseados cuando se usan al mismo tiempo.

Para obtener un ejemplo de cómo interactúan los comandos y las especificaciones de personalización, consulte Direcciones IP estáticas de vSphere en Cloud Assembly.