terraform计划能为我显示一个更改资源的json diff吗?

时间:2017-04-21 02:09:24

标签: terraform

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

2 个答案:

答案 0 :(得分:9)

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

  1. gem install terraform_landscape(可能需要在macOS上使用sudo)
  2. terraform plan | landscape
  3. 这显示JSON更改为diff。这是来自github网站的一个例子:

    enter image description here

答案 1 :(得分:0)

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

#!/bin/bash

input=$( xclip -o )

old=$( echo "$input" | awk -F' => ' '{ print $1 }'  | sed 's/\\n/\n\r/g' | sed 's/\\"/"/g' | sed 's/"{/{/' | sed 's/}"/}/' )
new=$( echo "$input" | awk -F' => ' '{ print $2 }'  | 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中)。