通过cloud-init配置Azure VM开机执行.sh脚本失败,求排查配置错误
cloud-init配置错误排查及修复方案
核心问题1:误用HTML转义字符导致YAML解析中断
- 配置中
content字段内的>、"属于HTML转义实体,cloud-init的YAML解析器无法识别这类转义符,会直接导致解析到write_files第一段内容时抛出异常,后续的test.sh写入配置、cloud_final_modules配置全部不会被加载,刚好对应你观测到的第2、3个现象。
核心问题2:脚本内命令逻辑错误
- 你写入的
ubuntuVMexscript.sh中的cat命令语法错误,正确的将文件内容写入testCat的写法应为cat /var/lib/cloud/scripts/per-boot/ubuntuVMexscript.sh > testCat,你当前的重定向顺序完全颠倒,即使转义问题修复也无法正常执行。
认知误区纠正
- 你在user-data中传入的
cloud_final_modules参数属于cloud-init运行时生效的配置,不会持久化写入/etc/cloud/cloud.cfg文件,如果你要验证该配置是否生效,可以查看/var/log/cloud-init.log日志,搜索cloud_final_modules关键字即可确认加载的配置。
额外注意点
- 要确保你指定的
afshan用户是你创建Azure VM时设置的管理员用户名,如果用户名不匹配,/home/afshan目录不存在,会直接导致test.sh写入失败。
修复后的完整配置
#cloud-config package_upgrade: true write_files: - owner: afshan:afshan path: /var/lib/cloud/scripts/per-boot/ubuntuVMexscript.sh permissions: '0755' content: | #!/bin/sh cat /var/lib/cloud/scripts/per-boot/ubuntuVMexscript.sh > testCat - owner: afshan:afshan path: /home/afshan/test.sh permissions: '0755' content: | #!/bin/sh echo "test" cloud_final_modules: - rightscale_userdata - scripts-vendor - scripts-per-once - scripts-per-boot - scripts-per-instance - [scripts-user, always] - ssh-authkey-fingerprints - keys-to-console - phone-home - final-message - power-state-change
验证方法
- 部署完成后执行
cat /var/log/cloud-init.log | grep -i error检查是否有解析错误 - 执行
ls /home/afshan/test.sh验证文件是否生成 - 执行
cat /run/cloud-init/user-data确认传入的配置没有被自动转义
内容的提问来源于stack exchange,提问作者Afshan Navazdeen
相关产品推荐
相关产品推荐

