2017-07-18 126 views
2

我遇到Terraform配置問題。當我第一次運行terraform時,我正在使用AWS控制檯中生成的SSH密鑰。此密鑰正在添加到ubuntu用戶(它是Ubuntu 16.04 AMI)。然後我跑remote-exec配置:Terraform條件配置

provisioner "remote-exec" { 
    inline = [ 
    "sudo apt -y update && sudo apt install -y python" 
    ] 
    connection { 
    user = "ubuntu" 
    private_key = "${file("${var.aws_default_key_name}.pem")}" 
    } 
} 

我需要蟒蛇正裝,所以我可以在以後使用Ansible。這是我唯一需要這個密鑰的地方,從來沒有更多,因爲我用我的私鑰創建了自己的用戶。但是,當我嘗試在以後運行terraform時,它將搜索文件file("${var.aws_default_key_name}.pem"。 現在我有一個問題,如何在隨後的運行中跳過此配置?

我不想在存儲庫中存儲SSH密鑰。

我可以創建一個空文件來「欺騙」terraform,但我不喜歡這個解決方案。

有什麼更好的點子?

回答

2

而不是在aws_instance塊中進行設置,使用適當的觸發器將其移出到null_resource塊。

resource "aws_instance" "cluster" { 
    count = 3 

    # ... 
} 

resource "null_resource" "cluster" { 
    # Changes to any instance of the cluster requires re-provisioning 
    triggers { 
    cluster_instance_ids = "${join(",", aws_instance.cluster.*.id)}" 
    } 

    connection { 
    host = "${element(aws_instance.cluster.*.public_ip, 0)}" 
    } 

    provisioner "remote-exec" { 
    inline = [something] 
    } 
} 

如果您的觸發器不改變,null_resource配置將不會在隨後的運行中被觸發。

+0

我會測試並讓你知道,但看起來很有前途! – Mat

0

Sparrowform是基於Terraform的基礎架構的輕量級配置器。對其他供應工具的好處,是terraform apply這個階段該做的基礎設施的引導是脫鉤提供舞臺,所以你可以這樣做:

$ terraform apply # does infra bootstrap 

$ nano sparrowfile # Sparrowdo equivalent for remote-exec chunk 

#!/usr/bin/env perl6 

bash 'apt -y update'; 
package-install 'python'; 

$ sparrowform --ssh_user=my-user --ssh_private_key=/path/to/key # do provision stage 

很明顯,你可以自由不會在隨後的運行sparrowform運行。它是它的工作(安裝可靠的相關依賴關係,就是這樣)。然後,你放棄你的初始ssh_private_key,並與新的私人密鑰(我相信嗎?)

PS。披露 - 我是工具作者