78 lines
1.9 KiB
Go
78 lines
1.9 KiB
Go
package aws
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"log"
|
|
"net/url"
|
|
"strings"
|
|
|
|
"github.com/hashicorp/terraform/helper/schema"
|
|
"github.com/jen20/awspolicyequivalence"
|
|
)
|
|
|
|
func suppressEquivalentAwsPolicyDiffs(k, old, new string, d *schema.ResourceData) bool {
|
|
equivalent, err := awspolicy.PoliciesAreEquivalent(old, new)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
return equivalent
|
|
}
|
|
|
|
// Suppresses minor version changes to the db_instance engine_version attribute
|
|
func suppressAwsDbEngineVersionDiffs(k, old, new string, d *schema.ResourceData) bool {
|
|
// First check if the old/new values are nil.
|
|
// If both are nil, we have no state to compare the values with, so register a diff.
|
|
// This populates the attribute field during a plan/apply with fresh state, allowing
|
|
// the attribute to still be used in future resources.
|
|
// See https://github.com/hashicorp/terraform/issues/11881
|
|
if old == "" && new == "" {
|
|
return false
|
|
}
|
|
|
|
if v, ok := d.GetOk("auto_minor_version_upgrade"); ok {
|
|
if v.(bool) {
|
|
// If we're set to auto upgrade minor versions
|
|
// ignore a minor version diff between versions
|
|
if strings.HasPrefix(old, new) {
|
|
log.Printf("[DEBUG] Ignoring minor version diff")
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
|
|
// Throw a diff by default
|
|
return false
|
|
}
|
|
|
|
func suppressEquivalentJsonDiffs(k, old, new string, d *schema.ResourceData) bool {
|
|
ob := bytes.NewBufferString("")
|
|
if err := json.Compact(ob, []byte(old)); err != nil {
|
|
return false
|
|
}
|
|
|
|
nb := bytes.NewBufferString("")
|
|
if err := json.Compact(nb, []byte(new)); err != nil {
|
|
return false
|
|
}
|
|
|
|
return jsonBytesEqual(ob.Bytes(), nb.Bytes())
|
|
}
|
|
|
|
func suppressOpenIdURL(k, old, new string, d *schema.ResourceData) bool {
|
|
oldUrl, err := url.Parse(old)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
newUrl, err := url.Parse(new)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
oldUrl.Scheme = "https"
|
|
|
|
return oldUrl.String() == newUrl.String()
|
|
}
|