如何解决如何使用Terraform在Google Cloud Container Optimized OS下执行脚本remote-exec
我知道容器优化的操作系统主要是“ noexec”。当我需要在主目录中执行一些简单的脚本,将文件从Docker映像复制到主机等时,我有一个用例。当我使用SSH登录实例时,这样做没有问题。但是使用terraform似乎无效:
resource "null_resource" "test_upload2" {
count = length(var.nodes)
provisioner "remote-exec" {
connection {
type = "ssh"
host = google_compute_address.static[count.index].address
private_key = file("keys/private_key")
user = var.admin_username
script_path = "/home/hyperledger/provision.sh"
}
inline = [
"ls"
]
}
depends_on = [google_compute_instance.peer-blockchain-vm,null_resource.test_upload]
}
我收到以下错误消息:
null_resource.test_upload[0] (remote-exec): bash: /home/hyperledger/provision.sh: Permission denied
Error: error executing "/home/hyperledger/provision.sh": Process exited with status 126
有没有一种方法可以完全使用terraform来执行此操作? 将此逻辑外包给某些本地Shell脚本并使用“ local-exec”实现目标似乎不太好。
解决方法
目前,我已经找到了解决方案。 创建实例时,请设置以下启动脚本:
resource "google_compute_instance" "my_vm" {
...
metadata_startup_script = "mkdir -p /home/hyperledger/tmp/;sudo mount -t tmpfs -o size=100M tmpfs /home/hyperledger/tmp/"
}
它将创建一个内存磁盘。然后,应按以下方式重新定义资源中的脚本路径:
script_path = "/home/hyperledger/tmp/provision.sh"
该临时目录中的所有脚本都可以执行。
第一个执行的供应商应该更改主目录的所有者,因为它是由上面的根所有者创建的:
provisioner "remote-exec" {
connection {
type = "ssh"
private_key = file(var.private_key)
user = var.admin_username
script_path = "/home/hyperledger/tmp/provision.sh"
}
inline = [
"sudo chown -R hyperledger:hyperledger /home/hyperledger"
]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。