10

我的问题类似于这个 git hub 帖子,但不幸的是它没有解决:

https://github.com/hashicorp/terraform/issues/550

provisioner "remote-exec" { }我想要一种简单的方法来为在我的 terraform 脚本块中运行的命令提供 sudo 权限。

我来自 ansible 背景,在我的 ansible-playbook 运行命令中sudo: yes使用可选选项时,该选项允许任何命令 ansible 运行以 sudo 权限运行命令。--ask-sudo-pass我想在provisioner "remote-exec"我的 terraform 脚本块中做类似的事情。

这是provisioner "remote-exec"我要运行的块:

  provisioner "remote-exec" {
    inline = [
      "sudo apt-get update",
      "sudo apt-get install -y curl"
    ]
  }

当我在我的中运行它时,我terraform apply看到以下行出现在此命令的输出中:

openstack_compute_instance_v2.test.0 (remote-exec): [sudo] password for myUserName:
openstack_compute_instance_v2.test.1 (remote-exec): [sudo] password for myUserName:
openstack_compute_instance_v2.test.2 (remote-exec): [sudo] password for myUserName:

然后它只是给了我无限数量的这些:

openstack_compute_instance_v2.test.0: Still creating... 
openstack_compute_instance_v2.test.1: Still creating... 
openstack_compute_instance_v2.test.2: Still creating... 

那么我该如何解决这个问题并让 terraform 运行 sudo 命令呢?

注意:我的provisioner "remote-exec"块的连接不能是 root,所以即使这是一个简单的解决方案,它也不是我可以使用的。

4

3 回答 3

17

答案是在我的第一个 sudo 命令中使用以下语法:

"echo yourPW | sudo -S someCommand" 

这绕过了 sudo 密码提示,直接在命令中输入密码。我已经将我的 sudo 密码作为变量"${var.pw}",因此运行我的 sudo 命令很简单,只需将我的第一个命令更改为:

  provisioner "remote-exec" {
    inline = [
      "echo ${var.pw} | sudo -S apt-get update",
      "sudo apt-get install -y curl"
    ]
  }
于 2016-06-16T15:08:34.673 回答
3

关于什么:

echo ${var.pw} | sudo -S -k apt-get update

-k意味着忽略缓存的凭据以强制 sudo 始终询问。这是为了一致的行为。

https://superuser.com/q/67765

于 2019-05-23T14:19:53.307 回答
0

在 EC2 实例的情况下,很难用密码处理。我只是尝试了以下解决方案,它奏效了。

第 1 步:将所有命令放入当前工作区/工作目录的 script.sh 文件中

第 2 步:使用脚本参数代替内联参数,并在资源块中简单地包含以下代码行。

provisioner "file" {
    source      = "script.sh"
    destination = "/tmp/script.sh"
  }

  provisioner "remote-exec" {
    inline = [
      "chmod +x /tmp/script.sh",
      "sudo /tmp/script.sh args",
    ]
  }

使用此解决方案,terraform 将复制包含需要在服务器的 /tmp 位置执行的所有 shell 命令的 script.sh,并将执行具有 sudo 权限的文件。以下是参考链接。

https://www.terraform.io/docs/provisioners/remote-exec.html

于 2020-05-24T12:33:52.593 回答