即使文件存在以阻止其运行,GCP 的 Terraformmetadata_startup_script 也会运行

问题描述 投票:0回答:2

这两天一直在尝试解决这个问题。不确定这是 terraform 还是 GCP 问题。或者我的代码。我正在尝试创建虚拟机并运行一些安装。然后它在 /var/run 中创建一个名为 flag.txt 的文件。如果该文件存在,启动脚本应该退出并且不会在重新启动时运行。我编写了一个 python 脚本来将日期和时间写入 flag.txt 文件,以便我可以进行测试。但是,每次重新启动时,flag.txt 文件中的时间和日期都会更新,显示启动脚本正在运行。

这是我的metadata_startup_script代码

metadata_startup_script = <<-EOF

#!/bin/bash

if [ ! -f /var/run/flag.txt ];

then

sudo apt-get update

sudo apt-get install -y gcloud

echo '${local.script_content}' > /tmp/install_docker.sh

echo '${local.flag_content}' > /tmp/date_flag.py

chmod +x /tmp/install_docker.sh

chmod +x /tmp/date_flag.py

#Below command is just to show root is executing this script

#whoami >> /usr/bin/runner_id

bash /tmp/install_docker.sh

/usr/bin/python3 /tmp/date_flag.py

else

exit 0

fi

EOF

}

这里是创建flag.txt文件的date_flag.py文件

import datetime

current_datetime = datetime.datetime.now()
formatted_datetime = current_datetime.strftime("%Y-%m-%d_%H-%M-%S")
file_name = f"{formatted_datetime}.txt"
with open("/var/run/flag.txt", "w") as file:
    file.write("This file was created at: " + formatted_date

欢迎任何想法或建议。这真的让我发疯。

bash ubuntu google-cloud-platform terraform terraform-provider-gcp
2个回答
1
投票

事实证明 /var/run 符号链接到启动时创建的 /run。我通过将 flag.txt 文件写入 /etc 来修复此问题。


0
投票

将来,您始终可以从实例运行以下命令来获取脚本执行的日志:

journalctl -u google-startup-scripts.service
© www.soinside.com 2019 - 2024. All rights reserved.