微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Terraform在Google Cloud Container Optimized OS下执行脚本remote-exec

如何解决如何使用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 举报,一经查实,本站将立刻删除。