【问题标题】:Passing dynamic terraform variables in json using shell script使用 shell 脚本在 json 中传递动态 terraform 变量
【发布时间】:2021-10-17 22:30:35
【问题描述】:

我正在编写一个 shell 脚本,用于使用 shell 将 json 文件中的关键字替换为动态值。

123.json

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
          "AWS": [
            "arn:aws:iam::xxxxxx:role/role1",
            "arn:aws:iam::yyyyyy:role/role2"
          ]
        },
        "Action": "sts:AssumeRole",
        "Condition": {}
      }
    ]
  }

我将 role1 和 role2 的值作为 shell 脚本中的 terraform 变量

shell.sh 文件有

echo $role1
echo $role2

$ cat 123.json | sed -n '/role1/ s/role1/$role/ p' 
$ cat 123.json | sed -n '/role1/ s/role1/$role/ p' 

但是角色 1 和角色 2 没有得到更新。谁能帮帮我。

【问题讨论】:

  • 我不明白 - 你是否使用名为 role1role2role 的变量?
  • @smac2020 角色 1 和角色 2

标签: amazon-web-services shell scripting terraform amazon-eks


【解决方案1】:

您的 sed 命令不起作用,因为 shell 不扩展变量 在单引号中。但是 sed 并不是编辑结构化的好工具 JSON 等格式 - jq 是更好的选择:

jq --argjson foo "\"$role1\"" '.Statement[].Principal.AWS[0] |= sub("role1$";$foo)' < 123.json
jq --argjson foo "\"$role2\"" '.Statement[].Principal.AWS[1] |= sub("role2$";$foo)' < 123.json

"\"$role2\"" 从带有文字的 shell 变量创建一个 jq 变量 在开头和结尾添加双引号。

要将输出保存回文件,您需要使用外部实用程序,因为 jq 没有 sed 等工具所具有的 -i 选项。你可以 要么使用sponge,它是 moreutils:

$ jq --argjson foo "\"$role1\"" '.Statement[].Principal.AWS[0] |= sub("role1$";$foo)' < 123.json | sponge 123.json
$ jq --argjson foo "\"$role2\"" '.Statement[].Principal.AWS[1] |= sub("role2$";$foo)' < 123.json | sponge 123.json

或手动写入临时文件并移动文件代替 123.json:

$ temp="$(mktemp)"
$ jq --argjson foo "\"$role1\"" '.Statement[].Principal.AWS[0] |= sub("role1$";$foo)' < 123.json  > "$temp"
$ mv "$temp" 123.json
$ temp="$(mktemp)"
$ jq --argjson foo "\"$role2\"" '.Statement[].Principal.AWS[1] |= sub("role2$";$foo)' < 123.json > "$temp"
$ mv "$temp" 123.json

【讨论】:

  • 你能试着解释一下你在做什么。 jq --argjson foo "\"$role1\""
  • 我运行了上面的命令更新文件但没有保存它。你能帮忙吗?
猜你喜欢
  • 2018-08-06
  • 1970-01-01
  • 2014-03-11
  • 2018-07-28
  • 2022-01-02
  • 1970-01-01
  • 2017-05-24
  • 2020-10-02
  • 2015-03-26
相关资源
最近更新 更多