您可以向 Automation Assembler 範本代碼新增 cloudConfig 區段,並在該區段中新增您在部署時執行的機器初始化命令。
cloudConfig 命令格式
- Linux - 初始化命令遵循開放原始碼 cloud-init 標準。
- Windows - 初始化命令使用 Cloudbase-init。
Linux cloud-init 和 Windows Cloudbase-init 不共用相同的語法。一個作業系統的 cloudConfig 區段在另一個作業系統的機器映像中不起作用。
cloudConfig 命令可執行哪些操作
您可以使用初始化命令在建立執行個體時自動套用資料或設定,這樣可以自訂使用者、權限、安裝或任何其他以命令為基礎的作業。範例包括:
- 設定主機名稱
- 產生並設定 SSH 私密金鑰
- 安裝套件
可以在何處新增 cloudConfig 命令
您可以向雲端範本代碼中新增 cloudConfig 區段,但也可以在設定基礎結構時預先向機器映像新增一個區段。然後,參考來源映像的所有雲端範本都會進行相同的初始化。
您可能有一個映像對應和一個雲端範本,且兩者皆包含初始化命令。在部署時,兩個命令將合併,並且 Automation Assembler 會執行合併的命令。
當兩個命令中出現相同的命令但包含不同的參數時,系統僅執行映像對應命令。
如需其他詳細資料,請參閱進一步瞭解 VMware Aria Automation 中的映像對應。
cloudConfig 命令中的語法
錯誤的 cloudConfig 命令可能會導致資源設定不正確或行為不可預測。
若要在 #cloud-config
陳述式中出現語法錯誤時取消部署,請新增以下內容。
cloudConfigSettings: deploymentFailOnCloudConfigRuntimeError: true
在以下雲端範本中,- mkdir
命令未按要求在 runcmd:
下顯示為新的一行,因此永遠不會建立目錄。由於此錯誤,deploymentFailOnCloudConfigRuntimeError: true
內容將導致部署失敗。
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
如果省略該內容或將其設定為 false
,即使 cloudConfig 命令失敗,部署也會繼續進行。
此外,該內容還需要具有 #cloud-config
行。如果省略該行,則無論該內容設定為何,部署都會繼續進行。
正確:
cloudConfigSettings: deploymentFailOnCloudConfigRuntimeError: true cloudConfig: | #cloud-config runcmd:- mkdir -p /tmp/test-dir
不正確:
cloudConfigSettings: deploymentFailOnCloudConfigRuntimeError: true cloudConfig: | runcmd:- mkdir -p /tmp/test-dir
cloudConfig 命令範例
下列範例 cloudConfig 區段取自適用於 Linux 系統的 MySQL 伺服器的 WordPress 使用案例雲端範本代碼。
若要確保正確解譯命令,請一律包括管道字元 cloudConfig: |
,如下所示。
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
如果 cloud-init 指令碼行為異常,請在疑難排解時檢查 /var/log/cloud-init-output.log
中已擷取的主控台輸出。如需有關 cloud-init 的詳細資訊,請參閱 cloud-init 說明文件。
命令和自訂規格可能無法混合
部署至 vSphere 時,如果您嘗試合併內嵌的 cloudConfig 命令和自訂規格初始化,請務必謹慎進行。它們未正式相容,因此一起使用時可能會產生不一致或不必要的結果。
如需命令和自訂規格的互動方式範例,請參閱 Automation Assembler 中的 vSphere 靜態 IP 位址。