如何与Terraform同步目录?

时间:2018-06-21 10:09:59

标签: terraform

我有一个本地目录,要同步到远程服务器上。我有这个提供者:

resource "null_resource" "test" {
  connection {
    type        = "ssh"
    user        = "deploy"
    host        = "${MYHOST}"
    port        = 22
    private_key = "${MYKEY}"
  }

  provisioner "local-exec" {
    command = "mkdir -p /tmp/hello && touch /tmp/hello/world"
  }

  provisioner "remote-exec" {
    inline = ["mkdir -p /tmp/mytest"]
  }

  provisioner "file" {
    source      = "/tmp/hello"
    destination = "/tmp/mytest/hello"
  }
}

这是第一次。该目录现在位于远程服务器上。

$ find /tmp/mytest
/tmp/mytest
/tmp/mytest/hello
/tmp/mytest/hello/world

但是,如果我污染并重新应用资源,则第二次存在该远程目录,并且该目录在内部内同步:

$ find /tmp/mytest
/tmp/mytest
/tmp/mytest/hello
/tmp/mytest/hello/hello
/tmp/mytest/hello/hello/world
/tmp/mytest/hello/world

我可以通过在同步之前远程删除整个目录树来解决此问题,但这似乎不够优雅,可能效率低下并且容易出错。

是否存在重复同步目录的标准解决方案?

1 个答案:

答案 0 :(得分:0)

这在文件供应商文档中得到解决:

  

接下来,源路径上是否存在斜杠将决定目录名称将被嵌入到目标中还是将创建目标。一个示例可以最好地说明这一点:

     

如果源是/ foo(不带斜杠),而目标是/ tmp,则本地计算机上/ foo的内容将被上载到远程计算机上的/ tmp / foo。远程计算机上的foo目录将由Terraform创建。

     

但是,如果源是/ foo /(存在斜杠),而目标是/ tmp,则/ foo的内容将直接直接上传到/ tmp。

https://www.terraform.io/docs/provisioners/file.html