由于动态变量,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 处理的引号内。