terraform plan 可以显示已更改资源的 json 差异吗?

Can terraform plan show me a json diff for a changed resource?

当我 运行 terraform plan 时,它显示了已更改的资源,恰好是 aws_s3_bucket_object 中的 JSON 数据。但是 JSON 很长,很难看出发生了什么变化。如何将其显示为差异?

https://github.com/coinbase/terraform-landscape 可以提供帮助。

  1. gem install terraform_landscape(在 macOS 上可能需要 sudo)
  2. terraform plan | landscape

这表明 JSON 变化是差异。这是来自 github 站点的示例:

我写了一个 bash 脚本来格式化 terraforms 丑陋的策略输出:

#!/bin/bash

input=$( xclip -o )

old=$( echo "$input" | awk -F' => ' '{ print  }'  | sed 's/\n/\n\r/g' | sed 's/\"/"/g' | sed 's/"{/{/' | sed 's/}"/}/' )
new=$( echo "$input" | awk -F' => ' '{ print  }'  | sed 's/\n/\n\r/g' | sed 's/\"/"/g' | sed 's/"{/{/' | sed 's/}"/}/' )

echo "----------------------------------------------------------------------------------------------"
echo "old:"
echo "$old" | jq '.'
echo "----------------------------------------------------------------------------------------------"
echo "new:"
echo "$new" | jq '.'
echo "----------------------------------------------------------------------------------------------"
echo "diff:"
diff -u --color <( echo "$old" | jq '.' ) <( echo "$new" | jq '.' )
echo "----------------------------------------------------------------------------------------------"

它显示了三个输出块,旧的,然后是新的,然后是差异。它使用 xclipjqdiff。用法是(在 Linux 上)突出显示 terrafrom 输出,然后调用脚本(我称之为 tf-diff,它位于 ~/bin 中)。