首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Autoinstall /Cloud中运行复杂的管道命令?

如何在Autoinstall /Cloud中运行复杂的管道命令?
EN

Ask Ubuntu用户
提问于 2022-02-02 22:35:19
回答 1查看 2K关注 0票数 1

无论是在云init用户数据runcmd中,还是在自动安装后期命令中,我都需要从本质上运行这个命令,作为LUKS加密卷的Clevis + Tang初始化的一部分:

代码语言:javascript
复制
echo '<secret>' | clevis luks bind -d /dev/sda2 tang '{"url": "http://<ip-tangserver>" , "adv": "/tmp/adv.jws" }'

问题是,我很难确定这是否真的可以使用runcmd或后继命令,如果是的话,我如何能够以符合YAML的方式做到这一点,例如:

代码语言:javascript
复制
runcmd:
  - echo 'some-luks-temp-passwd' | clevis luks bind -d /dev/vda3 tang '{"url": "http://192.168.122.150" , "adv": "/tmp/adv.jws" }'

将上面的整个字符串括起来似乎也不起作用,yamllint仍然显示了语法错误:

代码语言:javascript
复制
runcmd:
  - "echo 'some-luks-temp-passwd' | clevis luks bind -d /dev/vda3 tang '{"url": "http://192.168.122.150" , "adv": "/tmp/adv.jws" }'"

谢谢!

EN

回答 1

Ask Ubuntu用户

发布于 2022-02-10 23:26:22

您可能会使用YAML多行语法。我不知道您当前的语法失败了什么,但是这里有一个autoinstall片段,它使用json、管道、输出重定向和使用多行语法的Heredoc。

代码语言:javascript
复制
#cloud-config
runcmd:
  - |
    echo '{"foo":"FOO" , "bar" : "BAR"}' > /run/cmd.log
    cat <<EOF | xxd >> /run/cmd.log
    {
      "foo": "FOO",
      "bar": "BAR"
    }
    EOF

这是生成的/run/cmd.log文件

代码语言:javascript
复制
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                                  .}.
票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1390768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档