/
testutils.go
36 lines (31 loc) · 950 Bytes
/
testutils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
package engine
import "github.com/fatih/structs"
func resourceSliceToMap(resources []interface{}) map[string]interface{} {
resourceMap := map[string]interface{}{}
for _, resource := range resources {
if isARMResource(resource) {
resourceName := extractNameFromARMType(resource)
resourceMap[resourceName] = resource
}
}
return resourceMap
}
func extractNameFromARMType(resource interface{}) string {
s := structs.New(resource)
fields := s.Field(s.Names()[1]).Fields()
for _, f := range fields {
innerField := s.Field(f.Name())
innerFieldValue := innerField.Value()
if innerStringValue, ok := innerFieldValue.(*string); ok && innerField.Name() == "Name" {
return *innerStringValue
}
}
return ""
}
func isARMResource(resource interface{}) bool {
s := structs.New(resource)
_, ok := s.FieldOk("ARMResource")
return ok
}