我知道云初始化允许作为以下部分运行命令云初始化yml
runcmd:
- [ pwd ]
但我正在寻找一种执行完整 shell 脚本的方法。
有些人只是将 a 的输出通过管道传输curl
到 shell 中 - 但这种方法感觉很不靠谱。也许可以通过某种模板将脚本集成到 yml 中,但这听起来也不太好。
更好的方法是将脚本与 yml 一起发送到主机并参考它。但我还没有找到有关如何执行此操作的任何文档。
这可能吗?
我在用改造地形设置服务器,但我想知道这是否也可以用纯云初始化。
答案1
如果你仅有的想要运行脚本,您可以直接将脚本作为用户数据传递,而不必使用云配置。只要脚本以 开头#!
,cloud-init 就会尝试直接运行它,而不是将其解释为云配置。
如果您想同时运行 cloud-config 和单独的脚本,而其他已发布的write_files
解决方案也可以工作,那么您也可以传递 mime 多部分存档。Cloud-init 包含一个辅助脚本,可让此操作更加简单。假设您在名为的文件中拥有用户数据my-user-data
:
#cloud-config
runcmd:
- echo 'test-from-cloud-config' > /var/tmp/test_from_cloud_config
您想要运行的脚本名为test.sh
: ecd:
#!/bin/bash
echo 'test_from_script' > /var/tmp/test_from_script
你可以致电:
cloud-init devel make-mime -a test.sh:x-shellscript -a my-user-data:cloud-config > /tmp/userdata
您可以获取生成的多部分文件并将其作为用户数据传递给 cloud-init(例如使用 LXD):
lxc launch ubuntu:focal multi -c user.user-data="$(cat /tmp/userdata)"
您可以看到 cloud-config 和脚本都已运行:
root@multi:~# cat /var/tmp/test_from_cloud_config
test-from-cloud-config
root@multi:~# cat /var/tmp/test_from_script
test_from_script
看cloud-init 文档以供参考。