È possibile aggiungere una sezione cloudConfig al codice del modello di Cloud Assembly, 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 Cloud Assembly 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 vRealize 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.
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 Cloud Assembly.