github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/aws/diff_suppress_funcs.go (about) 1 package aws 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "log" 7 "net/url" 8 "strings" 9 10 "github.com/hashicorp/terraform/helper/schema" 11 "github.com/jen20/awspolicyequivalence" 12 ) 13 14 func suppressEquivalentAwsPolicyDiffs(k, old, new string, d *schema.ResourceData) bool { 15 equivalent, err := awspolicy.PoliciesAreEquivalent(old, new) 16 if err != nil { 17 return false 18 } 19 20 return equivalent 21 } 22 23 // Suppresses minor version changes to the db_instance engine_version attribute 24 func suppressAwsDbEngineVersionDiffs(k, old, new string, d *schema.ResourceData) bool { 25 // First check if the old/new values are nil. 26 // If both are nil, we have no state to compare the values with, so register a diff. 27 // This populates the attribute field during a plan/apply with fresh state, allowing 28 // the attribute to still be used in future resources. 29 // See https://github.com/hashicorp/terraform/issues/11881 30 if old == "" && new == "" { 31 return false 32 } 33 34 if v, ok := d.GetOk("auto_minor_version_upgrade"); ok { 35 if v.(bool) { 36 // If we're set to auto upgrade minor versions 37 // ignore a minor version diff between versions 38 if strings.HasPrefix(old, new) { 39 log.Printf("[DEBUG] Ignoring minor version diff") 40 return true 41 } 42 } 43 } 44 45 // Throw a diff by default 46 return false 47 } 48 49 func suppressEquivalentJsonDiffs(k, old, new string, d *schema.ResourceData) bool { 50 ob := bytes.NewBufferString("") 51 if err := json.Compact(ob, []byte(old)); err != nil { 52 return false 53 } 54 55 nb := bytes.NewBufferString("") 56 if err := json.Compact(nb, []byte(new)); err != nil { 57 return false 58 } 59 60 return jsonBytesEqual(ob.Bytes(), nb.Bytes()) 61 } 62 63 func suppressOpenIdURL(k, old, new string, d *schema.ResourceData) bool { 64 oldUrl, err := url.Parse(old) 65 if err != nil { 66 return false 67 } 68 69 newUrl, err := url.Parse(new) 70 if err != nil { 71 return false 72 } 73 74 oldUrl.Scheme = "https" 75 76 return oldUrl.String() == newUrl.String() 77 }