在Octopus部署中,我已经使用他们的Apply Terraform模板设置了Terraform Apply步骤
在我的Terraform main.tf文件中,我想使用一个连接在AWS的Amazon Linux EC2实例上运行远程执行程序
resource "aws_instance" "nginx" {
ami = "${var.aws_ami}"
instance_type = "t2.nano"
key_name = "${var.key_name}"
connection {
type = "ssh"
user = "ec2-user"
private_key = "${var.aws_key_path}"
}
provisioner "remote-exec" {
inline = [
"sudo amazon-linux-extras install epel -y",
"sudo yum update -y",
"sudo amazon-linux-extras install nginx1.12 -y",
"sudo systemctl enable nginx.service",
"sudo systemctl start nginx.service",
"sudo systemctl status nginx.service"
]
}
}
作为连接块的一部分,我们需要使用SSH密钥对和私钥PEM进行连接,以对存储在AWS上的公钥进行身份验证
我的私钥在八达通部署中作为变量存储在我的项目中
为使我的私钥在Terraform中正确解释为多行字符串,我必须使用'here doc'语法,并使用起始EOF和结束EOF
此语法说明可以在Terraform官方文档中找到
https://www.terraform.io/docs/configuration-0-11/syntax.html
这是我最初的问题,因为我没有正确处理多行PEM文件,并且我通过Octopus Deploy支持在下面提出了问题,所以我的变量语法崩溃了
https://help.octopus.com/t/terraform-apply-step-pem-variable-set-to-unix-lf-ucs-2-le-bom/23659
他们友善地将我指向EOF语法的方向
这一切在Terraform v0.11上都很好用,但是我们这边有很多代码是用v0.12的最新HCL2编写的
因此,我想强制Octopus Deploy使用v0.12二进制文件,而不是Octopus Deploy随附的预打包v0.11。而且它们提供了内置的Special var,因此您可以使用其他二进制文件
但是当我使用此二进制文件运行该脚本时,它会因以下错误而崩溃
Error: Unterminated template string
No closing marker was found for the string.
August 6th 2019 14:54:07 Error
Calamari.Integration.Processes.CommandLineException: The following command: "C:\Program Files\Octopus Deploy\Octopus\bin\terraform.exe" apply -no-color -auto-approve -var-file="octopus_vars.tfvars"
August 6th 2019 14:54:07 Error
With the working directory of: C:\Octopus\Work\20190806135350-47862-353\staging
August 6th 2019 14:54:07 Error
Failed with exit code: 1
August 6th 2019 14:54:07 Error
Error: Unterminated template string
August 6th 2019 14:54:07 Error
on octopus_vars.tfvars line 34:
我看过v0.12的官方文档
https://www.terraform.io/docs/configuration/syntax.html#terraform-syntax
我不确定在v0.11中如何管理多行方面是否有什么帮助
这是从我的tfvars文件成功在v0.11中工作的代码块
aws_ami = "#{ami}"
key_name = "#{awsPublicKey}"
aws_private_key = <<-EOF
#{testPrivateKey}
-EOF
当我使用最新版本的Terraform v0.12.6运行此程序时,预期结果是它将正常运行并在Octopus Deploy中运行Terraform Apply
我在这里希望Hashicorp的某人对此有一个解决方法,因为我认为应该使用https://github.com/hashicorp/terraform/pull/20281
解决此问题。但是在编写今天下载的v0.12.6时,我正在使用最新的二进制文件
有人建议如何在v0.12中运行它吗?干杯
答案 0 :(得分:2)
“ flush heredoc”的正确语法在最终标记上不包含破折号:
import pandas as pd
a = pd.DataFrame([0,1,2,3,4,5,6,7])
a.values[-1] # returns 7
a.values[-5:-1]# returns 3,4,5,6
a.values[-5:]# returns 3,4,5,6,7
b = []
for i in range(0,len(a)):
b.append(a.values[-(i+1):-i])
如果先前的版本接受aws_key_path = <<-EOF
#{martinTestPrivateKey}
EOF
来结束heredoc,那么很遗憾,这是一个错误,现在已在Terraform 0.12中修复,因此,继续前进时,您必须使用the syntax as documented,并且单独使用标记最后一行。