È possibile aggiungere una sezione cloudConfig al codice del modello di Automation Assembler, in cui aggiungere comandi di inizializzazione della macchina eseguiti al momento della distribuzione.

Formati dei comandi cloudConfig

  • Linux: i comandi di inizializzazione seguono lo standard cloud-init aperto.
  • Windows: i comandi di inizializzazione utilizzano Cloudbase-init.

Linux cloud-init e Windows Cloudbase-init non condividono la stessa sintassi. Una sezione cloudConfig per un sistema operativo non funzionerà nell'immagine di una macchina dell'altro sistema operativo.

Cosa possono eseguire i comandi cloudConfig

È possibile utilizzare i comandi di inizializzazione per automatizzare l'applicazione di dati o impostazioni al momento della creazione dell'istanza. In questo modo è possibile personalizzare gli utenti, le autorizzazioni, le installazioni e tutte le altre operazioni basate sui comandi. Gli esempi includono:

  • Impostazione di un nome host
  • Generazione e configurazione di chiavi private SSH
  • Installazione dei pacchetti

Posizione in cui è possibile aggiungere i comandi cloudConfig

È possibile aggiungere una sezione cloudConfig al codice del modello cloud, ma è anche possibile aggiungerne una in anticipo a un'immagine della macchina durante la configurazione dell'infrastruttura. Quindi, tutti i modelli cloud che fanno riferimento all'immagine di origine ottengono la stessa inizializzazione.

È possibile disporre di una mappa immagine e di un modello cloud in cui entrambi contengono comandi di inizializzazione. Al momento della distribuzione, i comandi vengono uniti e Automation Assembler esegue i comandi consolidati.

Quando lo stesso comando viene visualizzato in entrambe le posizioni ma include parametri differenti, viene eseguito solo il comando di mappatura dell'immagine.

Per ulteriori dettagli, vedere Ulteriori informazioni sulle mappature dell'immagine in VMware Aria Automation.

Sintassi nei comandi cloudConfig

I comandi cloudConfig problematici possono causare la configurazione impropria o il comportamento imprevedibile di una risorsa.

Per annullare una distribuzione quando si verifica un errore di sintassi nelle istruzioni #cloud-config, aggiungere la proprietà seguente.

      cloudConfigSettings:
        deploymentFailOnCloudConfigRuntimeError: true

Nel modello cloud seguente, il comando - mkdir non si trova in una nuova riga in runcmd: come richiesto, quindi la directory non verrà mai creata. La proprietà deploymentFailOnCloudConfigRuntimeError: true non riesce nella distribuzione a causa dell'errore.

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 si omette la proprietà o questa viene impostata su false, la distribuzione continua anche se i comandi cloudConfig non riescono.

La proprietà richiede inoltre la riga #cloud-config. Se omette la riga. La distribuzione continua indipendentemente dall'impostazione della proprietà.

Corretto:

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

Non corretto:

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

Comandi cloudConfig di esempio

Nell'esempio seguente la sezione cloudConfig è tratta dal codice del modello cloud del caso d'uso di WordPress per il server MySQL basato su Linux.

Nota:

Per garantire la corretta interpretazione dei comandi, includere sempre il carattere pipe cloudConfig: | come mostrato.

      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 uno script cloud-init si comporta in modo imprevisto, controllare l'output della console acquisita in /var/log/cloud-init-output.log durante la risoluzione dei problemi. Per ulteriori informazioni su cloud-init, vedere la documentazione di cloud-init.

Comandi e specifiche di personalizzazione potrebbero non essere combinati

Quando si distribuisce in vSphere, procedere con cautela se si tenta di combinare l'inizializzazione del comando cloudConfig incorporato e delle specifiche di personalizzazione. Formalmente non sono compatibili e potrebbero produrre risultati incoerenti o indesiderati quando vengono utilizzate insieme.

Per un esempio di interazione tra i comandi e le specifiche di personalizzazione, vedere Indirizzi IP statici di vSphere in Automation Assembler.