cloud-init yaml配置含动态变量时schema校验报错问题求助
问题原因排查
你遇到的报错由两个关联问题共同导致:
- YAML语法解析错误:你在
runcmd第二个列表项中写入的--header="Authorization: Token $TOKEN"包含:加空格的组合,YAML会自动将这段内容识别为键值对(字典)结构,不符合runcmd要求的纯字符串数组格式,这就是报错信息中出现{'--header="Authorization': 'Token $TOKEN"'}字典结构的根本原因。 - 变量作用域不共享:
runcmd配置下的每一个列表项都是独立运行的 shell 进程,第一个列表项中定义的$TOKEN变量无法传递到第二个列表项的进程中,即便修复了YAML语法问题,后续wget请求也无法取到正确的TOKEN值。
修复方案
直接将两条命令合并为单条shell字符串写入runcmd即可同时解决两个问题,修改后的完整配置如下:
#cloud-config --- users: - default runcmd: - TOKEN=$(echo "Htkdi_8js") && wget -O /tmp/some.sh "https://some_public_website" --header="Authorization: Token $TOKEN"
修改后再执行校验命令就不会再报错,命令也能正常执行。
内容的提问来源于stack exchange,提问作者devwannabe
相关产品推荐
相关产品推荐

