github.com/avenga/couper@v1.12.2/config/configload/deprecated.go (about) 1 package configload 2 3 import ( 4 "github.com/hashicorp/hcl/v2/hclsyntax" 5 "github.com/sirupsen/logrus" 6 ) 7 8 type deprecated struct { 9 newName string 10 version string 11 } 12 13 type ( 14 attributesList map[string]deprecated 15 blocksList map[string]deprecated 16 labelsList map[string]deprecated 17 ) 18 19 var ( 20 deprecatedAttributes attributesList 21 deprecatedBlocks blocksList 22 deprecatedLabels labelsList 23 ) 24 25 func init() { 26 deprecatedAttributes = make(map[string]deprecated) 27 deprecatedBlocks = make(map[string]deprecated) 28 deprecatedLabels = make(map[string]deprecated) 29 30 // Deprecated attributes: 31 // deprecatedAttributes["..."] = deprecated{"...", "..."} 32 deprecatedAttributes["beta_permissions_claim"] = deprecated{"permissions_claim", "1.13"} 33 deprecatedAttributes["beta_permissions_map"] = deprecated{"permissions_map", "1.13"} 34 deprecatedAttributes["beta_permissions_map_file"] = deprecated{"permissions_map_file", "1.13"} 35 deprecatedAttributes["beta_required_permission"] = deprecated{"required_permission", "1.13"} 36 deprecatedAttributes["beta_roles_claim"] = deprecated{"roles_claim", "1.13"} 37 deprecatedAttributes["beta_roles_map"] = deprecated{"roles_map", "1.13"} 38 deprecatedAttributes["beta_roles_file"] = deprecated{"roles_map_file", "1.13"} 39 40 // Deprecated blocks: 41 // deprecatedBlocks["..."] = deprecated{"...", "..."} 42 43 // Deprecated labels: 44 // deprecatedLabels["..."] = deprecated{"...", "..."} 45 deprecatedLabels["beta_insufficient_permissions"] = deprecated{"insufficient_permissions", "1.13"} 46 47 // TODO with 1.13, also remove 48 // ctxAcMap["beta_"+grantedPermissions] = seetie.GoToValue(gp) 49 // ctxAcMap["beta_"+requiredPermission] = seetie.GoToValue(rp) 50 // in eval/context.go newVariable() 51 } 52 53 func deprecate(bodies []*hclsyntax.Body, logger *logrus.Entry) { 54 for _, body := range bodies { 55 deprecateBody(body, logger) 56 } 57 } 58 59 func deprecateBody(body *hclsyntax.Body, logger *logrus.Entry) { 60 if body == nil { 61 return 62 } 63 64 body.Attributes = deprecateAttributes(body.Attributes, logger) 65 66 deprecateBlocks(body.Blocks, logger) 67 } 68 69 func deprecateAttributes(attributes hclsyntax.Attributes, logger *logrus.Entry) hclsyntax.Attributes { 70 attrs := make(hclsyntax.Attributes) 71 72 for _, attr := range attributes { 73 name := attr.Name 74 75 if rename, exists := deprecatedAttributes[name]; exists { 76 rename.log("attribute", name, logger) 77 78 name = rename.newName 79 } 80 81 attrs[name] = attr 82 } 83 84 return attrs 85 } 86 87 func deprecateBlocks(blocks hclsyntax.Blocks, logger *logrus.Entry) { 88 for _, block := range blocks { 89 block.Labels = deprecateLabels(block, logger) 90 91 if rename, exists := deprecatedBlocks[block.Type]; exists { 92 rename.log("block", block.Type, logger) 93 94 block.Type = rename.newName 95 } 96 97 deprecateBody(block.Body, logger) 98 } 99 } 100 101 func deprecateLabels(block *hclsyntax.Block, logger *logrus.Entry) []string { 102 var ( 103 err error 104 labels []string = block.Labels 105 renamed []string 106 ) 107 108 if block.Type == errorHandler { 109 labels, err = newKindsFromLabels(block, false) 110 111 if err != nil { 112 return block.Labels 113 } 114 } 115 116 for _, label := range labels { 117 name := label 118 119 if rename, exists := deprecatedLabels[label]; exists { 120 rename.log("label", label, logger) 121 122 name = rename.newName 123 } 124 125 renamed = append(renamed, name) 126 } 127 128 return renamed 129 } 130 131 // In some test cases the logger is <nil>, but not in production code. 132 func (d deprecated) log(name, old string, logger *logrus.Entry) { 133 if logger != nil { 134 logger.Warnf( 135 "replacing %s %q with %q; as of Couper version %s, the old value is no longer supported", 136 name, old, d.newName, d.version, 137 ) 138 } 139 }