通过 cloud-init 运行脚本

通过 cloud-init 运行脚本

我知道云初始化允许作为以下部分运行命令云初始化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 文档以供参考。

答案2

尝试结合写入文件

您可以在某处编写脚本(例如/usr/local/bin/myscript.sh)然后执行runcmd: /usr/local/bin/myscript.sh

确保设置可执行权限。

相关内容