首页 文章

如何在terraform中运行sudo命令?

提问于
浏览
3

我的问题类似于这个git hub帖子,但遗憾的是它尚未解决:

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

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

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

这是我要运行的 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命令呢?

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

1 回答

  • 8

    答案是在我的第一个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"
        ]
      }
    

相关问题