在 cloud-init user-data runcmd 或 autoinstall late-commands 中,我都需要将此命令作为 LUKS 加密卷的 Clevis + Tang 初始化的一部分来运行:
echo '<secret>' | clevis luks bind -d /dev/sda2 tang '{"url": "http://<ip-tangserver>" , "adv": "/tmp/adv.jws" }'
问题是,我很难确定使用 runcmd 或 late-commands 是否真的可以实现这一点,如果可以,我如何以符合 YAML 的方式执行此操作,例如:
runcmd:
- echo 'some-luks-temp-passwd' | clevis luks bind -d /dev/vda3 tang '{"url": "http://192.168.122.150" , "adv": "/tmp/adv.jws" }'
上面括住整个字符串似乎也不起作用,yamllint 仍然显示语法错误:
runcmd:
- "echo 'some-luks-temp-passwd' | clevis luks bind -d /dev/vda3 tang '{"url": "http://192.168.122.150" , "adv": "/tmp/adv.jws" }'"
谢谢!
答案1
您可以使用YAML 多行语法。我不确定您当前的语法有什么问题,但这里有一个autoinstall
使用 json、管道、输出重定向和 Heredoc 的多行语法代码片段。
#cloud-config
runcmd:
- |
echo '{"foo":"FOO" , "bar" : "BAR"}' > /run/cmd.log
cat <<EOF | xxd >> /run/cmd.log
{
"foo": "FOO",
"bar": "BAR"
}
EOF
FWIW,这是结果/run/cmd.log
文件
root@ubuntu-server:/# cat /run/cmd.log
{"foo":"FOO" , "bar" : "BAR"}
00000000: 7b0a 2020 2266 6f6f 223a 2022 464f 4f22 {. "foo": "FOO"
00000010: 2c0a 2020 2262 6172 223a 2022 4241 5222 ,. "bar": "BAR"
00000020: 0a7d 0a .}.