【问题标题】:terraform external data not returning bash outputterraform 外部数据不返回 bash 输出
【发布时间】:2021-06-12 18:16:12
【问题描述】:

我,尝试通过 Terraform data "external" 返回 bash 执行,但出现错误:

│ jq: error (at <stdin>:0): Cannot iterate over null (null)
│ 
│ 
│   with data.external.fetchssh,
│   on dovpccloud.tf line 31, in data "external" "fetchssh":
│   31: data "external" "fetchssh" {

然而 bash 脚本成功返回 ssh-script:

#!/bin/bash
do_token=`echo "var.do-token" | terraform -chdir=/input console`
curl -X GET -s -H "Authorization: Bearer ${do_token//\"}" "https://api.digitalocean.com/v2/account/keys?page=1" | jq -r --arg queryname "User's key" '.ssh_keys[] | select(.name == $queryname).public_key'

它返回常见的 ssh-rsa。 在数据“外部”之后,我将在液滴资源中使用它:

resource "digitalocean_droplet" "web" {
  image  = "ubuntu-18-04-x64"
  name   = "web-1"
  region = "lon1"
  size   = "s-1vcpu-1gb"
  tags = [digitalocean_tag.devops.id, digitalocean_tag.your_email.id]
  ssh_keys = [digitalocean_ssh_key.user.id, data.external.fetchssh]
}

我怀疑问题出在内部 terraform 方法的程序执行中,但无法得到什么。

【问题讨论】:

  • curl 的示例输出是什么?否则,很难推测您的 jq 失败的原因。

标签: bash curl terraform jq digital-ocean


【解决方案1】:

已经构建了几个模块来处理这种情况并使其更易于使用。 This 是我首选的 shell 数据源;将它与curl 命令一起使用(忘记jq),然后在stdout 响应中使用jsondecode 并访问您需要的任何字段。

或者,您可以使用HTTP provider 代替curl(如果有办法从terraform 中获取您的令牌)。

【讨论】:

    猜你喜欢
    • 2023-01-24
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    相关资源
    最近更新 更多