É possível adicionar uma seção cloudConfig ao código de modelo do Automation Assembler, 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 Automation Assembler 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 VMware Aria 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.

Observação:

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