可以将 cloudConfig 部分添加到 Cloud Assembly 模板代码中,在其中添加在部署时运行的计算机初始化脚本。
cloudConfig 命令格式
- Linux - 初始化命令遵循开放的 cloud-init 标准。
- Windows - 初始化命令使用 Cloudbase-init。
Linux cloud-init 和 Windows Cloudbase-init 不共享相同的语法。一个操作系统的 cloudConfig 部分在其他操作系统的计算机映像中不起作用。
cloudConfig 命令有何作用
您可以使用初始化命令在创建实例时自动应用数据或设置,以自定义用户、权限、安装或任何其他基于命令的操作。示例包括:
- 设置主机名
- 生成并设置 SSH 私钥
- 安装软件包
可以在何处添加 cloudConfig 命令
可以在云模板代码中添加 cloudConfig 部分,但也可以在配置基础架构时提前在计算机映像中添加一个 cloudConfig 部分。之后,引用源映像的所有云模板都将进行相同的初始化。
您可能有一个映像映射和一个云模板,这两者都包含初始化命令。在部署时,这些命令将合并,Cloud Assembly 会运行合并的命令。
当两个位置中出现相同的命令但包含不同的参数时,系统只会运行映像映射命令。
有关更多详细信息,请参见了解有关 vRealize 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 命令和自定义规范初始化,请小心进行。两者未正式兼容,因此一起使用时可能会产生不一致或不需要的结果。
有关命令和自定义规范如何交互的示例,请参见 Cloud Assembly 中的 vSphere 静态 IP 地址。