在terraform中,我试图使用null_resource通过curl命令进行PUT调用,并在local_exec提供程序中执行命令。请求的主体是json数组。
该命令要求数据采用字符串格式。我的数据在本地是元组的。我使用jsonencode将tupple序列化为字符串并传递给curl。但是在jsonencode中,形成的字符串在json字符串中的每个“前面都有一个附加的\前缀。
例如:预期的json字符串是:
"[{"key-1" : "value-1", "key-2": "value-2"}]"但是,在jsonencode之后,格式化的字符串如下:
"[{\"key-1\" : \"value-1\", \"key-2\": \"value-2\"}]"附加反斜杠与引号一起添加。
由于格式错误的请求主体,API返回糟糕的请求响应。
我们如何正确地序列化tupple/list以更正Terraform中的json字符串并传递给curl命令?
这是我的null_resource:
resource "null_resource" "call_API" {
for_each = { for x in local.array: x.name => {
name = x.name
vars = jsonencode(x.vars)
} }
provisioner "local-exec" {
command = <<EOF
curl -X PUT ${var.url} -d ${each.value.vars} -H 'Content-Type:application/json' -H 'Authorization:${local.bearer_token}'
EOF
} 发布于 2022-02-27 01:10:31
我想我理解你想传递这个变量
"[{"key-1" : "value-1", "key-2": "value-2"}]"你试过用EOF吗?你可以做这样的事
variable "body" {
type = "string"
}
variable = <<EOF
"[{"key-1" : "value-1", "key-2": "value-2"}]"
EOF或者用EOT,老实说,我不记得是哪一种工作
编辑:如果json不是静态的,并且从其他模块或其他模块接收到它,则可以尝试在EOFs中展开变量。
body = <<EOF
${var.json}
EOFhttps://stackoverflow.com/questions/71278023
复制相似问题