É possível adicionar uma seção cloudConfig ao código de modelo do Cloud Assembly, na qual são adicionados comandos de inicialização de máquina, executados no momento da implantação.
formatos de comandos cloudConfig
- Linux — os comandos de inicialização seguem o padrão aberto cloud-init.
- Windows — os comandos de inicialização usam Cloudbase-init.
O Linux cloud-init e o Windows Cloudbase-init não compartilham a mesma sintaxe. Uma seção cloudConfig para um sistema operacional não funcionará em uma imagem de máquina do outro sistema operacional.
O que comandos cloudConfig podem fazer
Você usa comandos de inicialização para automatizar a aplicação de dados ou configurações no momento da criação da instância, o que pode personalizar usuários, permissões, instalações ou qualquer outra operação baseada em comando. Exemplos incluem:
- Configuração de um nome do host
- Geração e configuração de chaves privadas SSH
- Instalação de pacotes
Onde comandos cloudConfig podem ser adicionados
Você pode adicionar uma seção cloudConfig ao código do modelo de nuvem, mas também pode adicionar uma seção a uma imagem de máquina com antecedência ao configurar a infraestrutura. Dessa forma, todos os modelos de nuvem que fizerem referência à imagem de origem terão a mesma inicialização.
É possível ter um mapa de imagem e um modelo de nuvem em que ambos contêm comandos de inicialização. No momento da implantação, os comandos são mesclados e o Cloud Assembly executa os comandos consolidados.
Quando o mesmo comando é exibido em ambos os locais, mas inclui parâmetros diferentes, somente o comando de mapa de imagem é executado.
Consulte Saiba mais sobre mapeamentos de imagem no vRealize Automation para obter mais detalhes.
Sintaxe em comandos cloudConfig
Comandos cloudConfig com falha podem resultar em um recurso que não está configurado corretamente ou se comporta de forma imprevisível.
Para cancelar uma implantação quando há um erro de sintaxe nas instruções #cloud-config
, adicione a propriedade a seguir.
cloudConfigSettings: deploymentFailOnCloudConfigRuntimeError: true
No modelo de nuvem a seguir, o comando - mkdir
não está em uma nova linha em runcmd:
, conforme necessário, portanto, o diretório nunca será criado. A propriedade deploymentFailOnCloudConfigRuntimeError: true
falha na implantação devido ao erro.
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
Se você omitir a propriedade ou defini-la como false
, a implantação continuará mesmo se os comandos cloudConfig falharem.
Além disso, a propriedade requer a linha #cloud-config
. Se você omitir a linha, a implantação continuará, independentemente da configuração da propriedade.
Correto:
cloudConfigSettings: deploymentFailOnCloudConfigRuntimeError: true cloudConfig: | #cloud-config runcmd:- mkdir -p /tmp/test-dir
Incorreto:
cloudConfigSettings: deploymentFailOnCloudConfigRuntimeError: true cloudConfig: | runcmd:- mkdir -p /tmp/test-dir
Comandos cloudConfig de exemplo
A seção de exemplo a seguir do cloudConfig é obtida do código de modelo de nuvem para o servidor MySQL baseado em Linux do caso de uso do WordPress.
Para garantir a interpretação correta de comandos, sempre inclua o caractere de pipe cloudConfig: |
, conforme mostrado.
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
Se um script de inicialização na nuvem se comportar inesperadamente, verifique a saída do console capturado no /var/log/cloud-init-output.log
ao solucionar o problema. Para obter mais informações sobre cloud-init, consulte a documentação de cloud-init.
Comandos e especificações de personalização podem não se misturar
Ao implantar no vSphere, proceda com cuidado se tentar combinar o comando cloudConfig incorporado e a inicialização de especificação de personalização. Eles não são formalmente compatíveis e podem produzir resultados inconsistentes ou indesejados quando usados juntos.
Para obter um exemplo de como os comandos e as especificações de personalização interagem, consulte Endereços IP estáticos do vSphere no Cloud Assembly.