in tools/gcpviz/main.go [794:857]
func (v *GcpViz) loadRelationsMap(fileName string) error {
yamlFile, err := ioutil.ReadFile(fileName)
if err != nil {
return err
}
var relations RawResourceRelations
err = yaml.Unmarshal(yamlFile, &relations)
if err != nil {
return err
}
v.Relations.AssetTypes = make(map[string][]jsonpath.FilterFunc, len(relations.AssetTypes))
for assetType, paths := range relations.AssetTypes {
v.Relations.AssetTypes[assetType] = make([]jsonpath.FilterFunc, len(paths))
for idx, path := range paths {
preparedPath, err := jsonpath.Prepare(path)
if err != nil {
return err
}
v.Relations.AssetTypes[assetType][idx] = preparedPath
}
}
v.Relations.Aliases = make(map[string][]jsonpath.FilterFunc, len(relations.Aliases))
for assetType, paths := range relations.Aliases {
v.Relations.Aliases[assetType] = make([]jsonpath.FilterFunc, len(paths))
for idx, path := range paths {
preparedPath, err := jsonpath.Prepare(path)
if err != nil {
return err
}
v.Relations.Aliases[assetType][idx] = preparedPath
}
}
v.Relations.IpAddresses = make(map[string][]jsonpath.FilterFunc, len(relations.IpAddresses))
for assetType, paths := range relations.IpAddresses {
v.Relations.IpAddresses[assetType] = make([]jsonpath.FilterFunc, len(paths))
for idx, path := range paths {
preparedPath, err := jsonpath.Prepare(path)
if err != nil {
return err
}
v.Relations.IpAddresses[assetType][idx] = preparedPath
}
}
v.Relations.Enrich = make(map[string]map[string]map[string]jsonpath.FilterFunc, len(relations.Enrich))
for assetType, fields := range relations.Enrich {
v.Relations.Enrich[assetType] = make(map[string]map[string]jsonpath.FilterFunc, len(fields))
for fieldName, subAsset := range fields {
v.Relations.Enrich[assetType][fieldName] = make(map[string]jsonpath.FilterFunc, len(subAsset))
for subAssetType, path := range subAsset {
preparedPath, err := jsonpath.Prepare(path)
if err != nil {
return err
}
v.Relations.Enrich[assetType][fieldName][subAssetType] = preparedPath
}
}
}
return nil
}