问题描述
在 GCP 中,在使用 terraform 创建 VM 时,我们有这个参数“Metadata_startup_script”,我们实际上设置了一个模板文件(bash 脚本),该文件在 VM 重新启动时运行。
这与 cloud-init 不同,因为只有在创建新 VM 时才会调用 cloud-init。
我正在寻找天蓝色的替代品。我们可以有这种启动脚本,如果每次重启虚拟机都应该运行。
我发现了 custom_data 字段,但我认为它只存储只有在创建 VM 时才会运行的 cloud-init 配置。
解决方法
没有功能可以设置在 Azure Terraform 中 VM 重新启动时运行的脚本。您可以做的是自己通过 VM extension 设置 Cron 任务。
,我使用自定义数据来提供 cloud-init 配置,其中我定义了一个类型为 oneshot 的 systemd 单元文件,使其执行我想在每次 VM 重新启动时运行的 shell 脚本。
write_files:
- path: /etc/systemd/system/testserv.service
permissions: 0777
owner: root:root
content: |
[Unit]
Description=One Shot
[Service]
ExecStart=/etc/createfile
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
- path: /etc/createfile
permissions: 0777
owner: root:root
content: |
#!/bin/sh
sudo cat /usr/bin/test-file.txt
echo 'text here' >> /usr/bin/test-file.txt
runcmd:
- systemctl enable testserv
- systemctl start testserv