Skip to content

Commit d68b893

Browse files
committed
Bump version. Add null field checks for config creation. Updated config format
1 parent 73185a1 commit d68b893

File tree

7 files changed

+212
-131
lines changed

7 files changed

+212
-131
lines changed

akamai-terraform-gtm.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
)
2020

2121
var (
22-
VERSION = "0.0.1-dev"
22+
VERSION = "0.0.1-dev-2"
2323
)
2424

2525
func main() {

command_create_domain.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,36 @@ variable "groupid" {
6969
}
7070
`)
7171

72+
var nullFieldMap = &configgtm.NullFieldMapStruct{}
73+
74+
// retrieve Null Values for Domain
75+
func getDomainNullValues() configgtm.NullPerObjectAttributeStruct {
76+
77+
return nullFieldMap.Domain
78+
79+
}
80+
81+
// retrieve Null Values for Object Type
82+
func getNullValuesList(objType string) map[string]configgtm.NullPerObjectAttributeStruct {
83+
84+
switch objType {
85+
case "Properties":
86+
return nullFieldMap.Properties
87+
case "Datacenters":
88+
return nullFieldMap.Datacenters
89+
case "Resources":
90+
return nullFieldMap.Resources
91+
case "CidrMaps":
92+
return nullFieldMap.CidrMaps
93+
case "GeoMaps":
94+
return nullFieldMap.GeoMaps
95+
case "AsMaps":
96+
return nullFieldMap.AsMaps
97+
}
98+
99+
return map[string]configgtm.NullPerObjectAttributeStruct{}
100+
}
101+
72102
// command function create-domain
73103
func cmdCreateDomain(c *cli.Context) error {
74104

@@ -221,6 +251,12 @@ func cmdCreateDomain(c *cli.Context) error {
221251
return cli.NewExitError(color.RedString("Failed to open/create config file."), 1)
222252
}
223253
defer domainTFfileHandle.Close()
254+
//initialize Null Fields Struct
255+
nullFieldMap, err = domain.NullFieldMap()
256+
if err != nil {
257+
akamai.StopSpinnerFail()
258+
return cli.NewExitError(color.RedString("Failed to initialize Domain null fields map"), 1)
259+
}
224260
// build tf file
225261
if len(tfConfig) == 0 {
226262
// if tf pre existed, domain has to exist by definition

tf.go

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,8 @@ var ignoredKeys map[string]int = map[string]int{"AsMaps": 0, "Resources": 0, "Pr
3232
"WeightedHashBitsForIPv4": 0, "WeightedHashBitsForIPv6": 0}
3333

3434
var mappedKeys map[string]string = map[string]string{"DynamicTTL": "dynamic_ttl", "StaticTTL": "static_ttl", "StaticRRSets": "static_rr_sets",
35-
"TTL": "ttl", "DatacenterId": "datacenter_id", "HandoutCName": "handout_cname"}
36-
37-
var intNullableKeys map[string]int = map[string]int{"UpperBound": 0, "DefaultTimeOutPenalty": 0, "CloneOf": 0, "Latitude": 0, "Longitude": 0,
38-
"DefaultErrorPenalty": 0, "DefaultTimeoutPenalty": 0, "HealthThreshold": 0,
39-
"HealthMultiplier": 0, "HealthMax": 0}
40-
41-
var stringNotNullableKeys map[string]int = map[string]int{"Nickname": 0, "Name": 0, "Value": 0, "LoadObject": 0, "HandoutCName": 0, "Type": 0, "TestObject": 0,
42-
"RequestString": 0, "ResponseString": 0, "TestObjectProtocol": 0, "TestObjectPassword": 0, "SslClientPrivateKey": 0, "SslClientCertificate": 0,
43-
"HostHeader": 0, "TestObjectUsername": 0, "ResourceType": 0}
35+
"TTL": "ttl", "DatacenterId": "datacenter_id", "HandoutCName": "handout_cname", "StickinessBonusPercentage": "stickiness_bonus_percentage",
36+
"CName": "cname"}
4437

4538
var tab4 = " "
4639
var tab8 = " "
@@ -66,18 +59,29 @@ var dependsClauseP1 = fmt.Sprintf(` depends_on = [
6659
// process domain
6760
func processDomain(domain *gtm.Domain, resourceDomainName string) string {
6861

62+
var nullFieldsMap gtm.NullPerObjectAttributeStruct
63+
coreFieldsNullMap := getDomainNullValues().CoreObjectFields
64+
6965
domainBody := ""
7066
domainString := gtmHeaderConfig
67+
68+
fmt.Println("Domain Null Map: ", nullFieldsMap)
69+
fmt.Println("Domain Null Core Map: ",coreFieldsNullMap)
70+
7171
domElems := reflect.ValueOf(domain).Elem()
7272
for i := 0; i < domElems.NumField(); i++ {
7373
varName := domElems.Type().Field(i).Name
7474
varType := domElems.Type().Field(i).Type
7575
varValue := domElems.Field(i).Interface()
76-
keyVal := fmt.Sprint(varValue)
77-
key := convertKey(varName, keyVal, varType.Kind())
78-
if key == "" {
79-
continue
80-
}
76+
// Skip if field is null
77+
if _, ok := coreFieldsNullMap[varName]; ok {
78+
continue
79+
}
80+
keyVal := fmt.Sprint(varValue)
81+
key := convertKey(varName, keyVal, varType.Kind())
82+
if key == "" {
83+
continue
84+
}
8185
if varName == "EmailNotificationList" {
8286
keyVal = processStringList(domain.EmailNotificationList)
8387
}
@@ -144,14 +148,6 @@ func convertKey(inKey string, keyVal string, keyKind reflect.Kind) string {
144148
if _, ok := ignoredKeys[inKey]; ok {
145149
return ""
146150
}
147-
if _, ok := intNullableKeys[inKey]; ok {
148-
return ""
149-
}
150-
if keyKind == reflect.String && keyVal == "" {
151-
if _, ok := stringNotNullableKeys[inKey]; !ok {
152-
return ""
153-
}
154-
}
155151
if val, ok := mappedKeys[inKey]; ok {
156152
return val
157153
}

tf_datacenter.go

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,21 @@ resource "akamai_gtm_datacenter" `)
3232
// Process datacenter resources
3333
func processDatacenters(datacenters []*gtm.Datacenter, dcImportList map[int]string, resourceDomainName string) string {
3434

35+
// Get Null values list
36+
var coreFieldsNullMap map[string]string
37+
nullFieldsMap := getNullValuesList("Datacenters")
38+
3539
datacentersString := ""
3640
for _, datacenter := range datacenters {
3741
if _, ok := dcImportList[datacenter.DatacenterId]; !ok {
3842
continue
3943
}
44+
// Retrieve Core null fields map
45+
if dcNullFieldObjectMap, ok := nullFieldsMap[strconv.Itoa(datacenter.DatacenterId)]; ok {
46+
coreFieldsNullMap = dcNullFieldObjectMap.CoreObjectFields
47+
} else {
48+
coreFieldsNullMap = map[string]string{}
49+
}
4050
datacenterBody := ""
4151
name := ""
4252
dcid := 0
@@ -46,6 +56,9 @@ func processDatacenters(datacenters []*gtm.Datacenter, dcImportList map[int]stri
4656
varName := dcElems.Type().Field(i).Name
4757
varType := dcElems.Type().Field(i).Type
4858
varValue := dcElems.Field(i).Interface()
59+
if _, ok := coreFieldsNullMap[varName]; ok {
60+
continue
61+
}
4962
keyVal := fmt.Sprint(varValue)
5063
key := convertKey(varName, keyVal, varType.Kind())
5164
if key == "" {
@@ -59,16 +72,13 @@ func processDatacenters(datacenters []*gtm.Datacenter, dcImportList map[int]stri
5972
name = keyVal
6073
}
6174
if varName == "DefaultLoadObject" {
62-
dlo := "["
63-
dloBody := processLoadObject(varValue.(*gtm.LoadObject))
64-
if dloBody == "" {
65-
dlo += "]"
66-
} else {
67-
dlo += "{\n"
68-
dlo += dloBody
69-
dlo += tab4 + "}]"
75+
if varValue.(*gtm.LoadObject) == nil {
76+
continue
7077
}
71-
keyVal = dlo
78+
datacenterBody += tab4 + key + " {\n"
79+
datacenterBody += processLoadObject(varValue.(*gtm.LoadObject))
80+
datacenterBody += tab4 + "}\n"
81+
continue
7282
}
7383
datacenterBody += tab4 + key + " = "
7484
if varType.Kind() == reflect.String {

tf_maps.go

Lines changed: 41 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,13 @@ func processCidrmaps(cidrmaps []*gtm.CidrMap, cidrImportList map[string][]int, d
5959
}
6060
switch varName {
6161
case "DefaultDatacenter":
62-
keyVal = processDefaultDatacenter(varValue.(*gtm.DatacenterBase), true)
63-
case "Assignments":
64-
keyVal = processCidrAssignments(varValue.([]*gtm.CidrAssignment))
62+
mapBody += tab4 + key + " {\n"
63+
mapBody += processDefaultDatacenter(varValue.(*gtm.DatacenterBase), true)
64+
mapBody += tab4 + "}\n"
65+
continue
66+
case "Assignments":
67+
mapBody += processCidrAssignments(varValue.([]*gtm.CidrAssignment))
68+
continue
6569
}
6670
mapBody += tab4 + key + " = "
6771
if varType.Kind() == reflect.String {
@@ -115,9 +119,13 @@ func processGeomaps(geomaps []*gtm.GeoMap, geoImportList map[string][]int, dcIL
115119
}
116120
switch varName {
117121
case "DefaultDatacenter":
118-
keyVal = processDefaultDatacenter(varValue.(*gtm.DatacenterBase), true)
119-
case "Assignments":
120-
keyVal = processGeoAssignments(varValue.([]*gtm.GeoAssignment))
122+
mapBody += tab4 + key + " {\n"
123+
mapBody += processDefaultDatacenter(varValue.(*gtm.DatacenterBase), true)
124+
mapBody += tab4 + "}\n"
125+
continue
126+
case "Assignments":
127+
mapBody += processGeoAssignments(varValue.([]*gtm.GeoAssignment))
128+
continue
121129
}
122130
mapBody += tab4 + key + " = "
123131
if varType.Kind() == reflect.String {
@@ -171,9 +179,13 @@ func processAsmaps(asmaps []*gtm.AsMap, asImportList map[string][]int, dcIL map[
171179
}
172180
switch varName {
173181
case "DefaultDatacenter":
174-
keyVal = processDefaultDatacenter(varValue.(*gtm.DatacenterBase), true)
182+
mapBody += tab4 + key + " {\n"
183+
mapBody += processDefaultDatacenter(varValue.(*gtm.DatacenterBase), true)
184+
mapBody += tab4 + "}\n"
185+
continue
175186
case "Assignments":
176-
keyVal = processAsAssignments(varValue.([]*gtm.AsAssignment))
187+
mapBody += processAsAssignments(varValue.([]*gtm.AsAssignment))
188+
continue
177189
}
178190
mapBody += tab4 + key + " = "
179191
if varType.Kind() == reflect.String {
@@ -204,9 +216,6 @@ func processAsmaps(asmaps []*gtm.AsMap, asImportList map[string][]int, dcIL map[
204216
func processDefaultDatacenter(ddc *gtm.DatacenterBase, structreq bool) string {
205217

206218
ddcString := ""
207-
if structreq {
208-
ddcString += "[{\n"
209-
}
210219
ddcElems := reflect.ValueOf(ddc).Elem()
211220
for i := 0; i < ddcElems.NumField(); i++ {
212221
varName := ddcElems.Type().Field(i).Name
@@ -220,63 +229,62 @@ func processDefaultDatacenter(ddc *gtm.DatacenterBase, structreq bool) string {
220229
ddcString += tab8 + key + " = " + keyVal + "\n"
221230
}
222231
}
223-
if structreq {
224-
ddcString += tab4 + "}]"
225-
} else {
232+
if !structreq {
226233
ddcString = strings.TrimSuffix(ddcString, "\n") // remove trailing new line
227234
}
235+
228236
return ddcString
229237

230238
}
231239

232240
func processCidrAssignments(assigns []*gtm.CidrAssignment) string {
233241

234242
if len(assigns) == 0 {
235-
return "[]"
243+
return ""
236244
}
237-
assignString := "[{\n" // assume MT
238-
for ii, assign := range assigns {
245+
assignString := ""
246+
for _, assign := range assigns {
239247
aElems := reflect.ValueOf(assign).Elem()
240-
assignString += processAssignmentsBase(aElems, "Blocks", (ii < len(assigns)-1))
248+
assignString += processAssignmentsBase(aElems, "Blocks")
241249
}
242-
assignString += tab4 + "]"
250+
243251
return assignString
244252

245253
}
246254

247255
func processGeoAssignments(assigns []*gtm.GeoAssignment) string {
248256

249257
if len(assigns) == 0 {
250-
return "[]"
258+
return ""
251259
}
252-
assignString := "[{\n" // assume MT
253-
for ii, assign := range assigns {
260+
assignString := ""
261+
for _, assign := range assigns {
254262
aElems := reflect.ValueOf(assign).Elem()
255-
assignString += processAssignmentsBase(aElems, "Countries", (ii < len(assigns)-1))
263+
assignString += processAssignmentsBase(aElems, "Countries")
256264
}
257-
assignString += tab4 + "]"
265+
258266
return assignString
259267

260268
}
261269

262270
func processAsAssignments(assigns []*gtm.AsAssignment) string {
263271

264272
if len(assigns) == 0 {
265-
return "[]"
273+
return ""
266274
}
267-
assignString := "[{\n" // assume MT
268-
for ii, assign := range assigns {
275+
assignString := ""
276+
for _, assign := range assigns {
269277
aElems := reflect.ValueOf(assign).Elem()
270-
assignString += processAssignmentsBase(aElems, "AsNumbers", (ii < len(assigns)-1))
278+
assignString += processAssignmentsBase(aElems, "AsNumbers")
271279
}
272-
assignString += tab4 + "]"
280+
273281
return assignString
274282

275283
}
276284

277-
func processAssignmentsBase(elem reflect.Value, assignKey string, last bool) string {
285+
func processAssignmentsBase(elem reflect.Value, assignKey string) string {
278286

279-
assignStr := ""
287+
assignStr := tab4 + "assignment {\n"
280288
for i := 0; i < elem.NumField(); i++ {
281289
varName := elem.Type().Field(i).Name
282290
varType := elem.Type().Field(i).Type
@@ -302,11 +310,8 @@ func processAssignmentsBase(elem reflect.Value, assignKey string, last bool) str
302310
}
303311
}
304312
}
305-
if last {
306-
assignStr += tab8 + "},\n" + tab8 + "{\n"
307-
} else {
308-
assignStr += tab8 + "}\n"
309-
}
313+
assignStr += tab4 + "}\n"
314+
310315
return assignStr
311316

312317
}

0 commit comments

Comments
 (0)