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.
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.