由于动态变量,cloud-init yaml 文件无效
The cloud-init yaml file is not valid due to dynamic variable
我的 cloud-init yaml 内容出错。
我执行的命令是:
cloud-init devel schema --config-file test.yaml
这是 test.yaml 文件。
#cloud-config
---
users:
- default
runcmd:
- [ TOKEN=$(echo "Htkdi_8js") ]
- [ wget, -O, /tmp/some.sh, "https://some_public_website", --header="Authorization: Token $TOKEN" ]
错误是
Cloud config schema errors: runcmd.1: ['wget', '-O', '/tmp/some.sh', 'https://some_public_website', {'--header="Authorization': 'Token $TOKEN"'}] is not valid under any of the given schemas
我是 cloud-init 的新手。谢谢。
在 YAML 流序列 ([…]
) 中,一个项目可以是单个节点,也可以是键值对。例如,在此 YAML 中:
[a, b: c]
a
是单节点,b: c
是键值对。其语义等同于
[a, {b: c}]
即键值对是 shorthand 用于具有单个条目的映射。
您的问题是您按流程顺序给出了以下项目:
--header="Authorization: Token $TOKEN"
这被 YAML 解析为具有值 Token $TOKEN"
的键 --header="Authorization
,这不是您想要的。您可以在错误输出中看到这一点。
虽然 YAML 确实支持引号,但要将引号识别为句法 YAML 结构,项目的 first 字符必须是引号。在您的情况下,情况并非如此,因此内容被处理为普通标量,其中内部引号仅作为内容处理,这就是您的情况。
解决这个问题最明显的方法是使用单引号:
- [ wget, -O, /tmp/some.sh, "https://some_public_website", '--header="Authorization: Token $TOKEN"' ]
有了这些,项目被处理为单引号标量,:
被处理为内容的一部分,因为它在 YAML 处理的引号内。
我的 cloud-init yaml 内容出错。 我执行的命令是:
cloud-init devel schema --config-file test.yaml
这是 test.yaml 文件。
#cloud-config
---
users:
- default
runcmd:
- [ TOKEN=$(echo "Htkdi_8js") ]
- [ wget, -O, /tmp/some.sh, "https://some_public_website", --header="Authorization: Token $TOKEN" ]
错误是
Cloud config schema errors: runcmd.1: ['wget', '-O', '/tmp/some.sh', 'https://some_public_website', {'--header="Authorization': 'Token $TOKEN"'}] is not valid under any of the given schemas
我是 cloud-init 的新手。谢谢。
在 YAML 流序列 ([…]
) 中,一个项目可以是单个节点,也可以是键值对。例如,在此 YAML 中:
[a, b: c]
a
是单节点,b: c
是键值对。其语义等同于
[a, {b: c}]
即键值对是 shorthand 用于具有单个条目的映射。
您的问题是您按流程顺序给出了以下项目:
--header="Authorization: Token $TOKEN"
这被 YAML 解析为具有值 Token $TOKEN"
的键 --header="Authorization
,这不是您想要的。您可以在错误输出中看到这一点。
虽然 YAML 确实支持引号,但要将引号识别为句法 YAML 结构,项目的 first 字符必须是引号。在您的情况下,情况并非如此,因此内容被处理为普通标量,其中内部引号仅作为内容处理,这就是您的情况。
解决这个问题最明显的方法是使用单引号:
- [ wget, -O, /tmp/some.sh, "https://some_public_website", '--header="Authorization: Token $TOKEN"' ]
有了这些,项目被处理为单引号标量,:
被处理为内容的一部分,因为它在 YAML 处理的引号内。