tcu*_*rdt 4 server-setup cloud-init terraform
我知道cloud-init允许将命令作为cloud-init yml的一部分运行
runcmd:
- [ pwd ]
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一种执行完整 shell 脚本的方法。
有些人只是将 a 的输出通过管道传输curl
到 shell 中 - 但这感觉像是一种非常不稳定的方法。也许脚本可以通过一些模板集成到 yml 中,但这听起来也不太好。
更好的方法是将脚本与 yml 一起发送给主机并引用它。但我还没有找到任何有关如何执行此操作的文档。
这可能吗?
我正在使用terraform来设置服务器,但我想知道这是否也可以使用纯cloud-init来完成。
小智 5
如果您只想运行脚本,可以直接将脚本作为用户数据传递,而不是使用云配置。只要脚本以 开头#!
,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
Run Code Online (Sandbox Code Playgroud)
以及您想要运行的脚本 callecd test.sh
:
#!/bin/bash
echo 'test_from_script' > /var/tmp/test_from_script
Run Code Online (Sandbox Code Playgroud)
您可以致电:
cloud-init devel make-mime -a test.sh:x-shellscript -a my-user-data:cloud-config > /tmp/userdata
Run Code Online (Sandbox Code Playgroud)
您可以获取生成的多部分文件并将其作为用户数据传递给cloud-init(例如使用LXD):
lxc launch ubuntu:focal multi -c user.user-data="$(cat /tmp/userdata)"
Run Code Online (Sandbox Code Playgroud)
您可以看到 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
Run Code Online (Sandbox Code Playgroud)
请参阅cloud-init 文档以供参考。
归档时间: |
|
查看次数: |
15503 次 |
最近记录: |