in tools/gcpviz/main.go [912:975]
func (v *GcpViz) loadStyleMap(fileName string, override map[string]string) error {
yamlFile, err := ioutil.ReadFile(fileName)
if err != nil {
return err
}
err = yaml.Unmarshal(yamlFile, &Style)
if err != nil {
return err
}
if override != nil && len(override) > 0 {
jsn, err := json.Marshal(Style)
if err != nil {
return errors.Wrap(err, "marshaling to json")
}
var jsnStr = string(jsn)
for path, newValue := range override {
jsnStr, err = sjson.Set(jsnStr, path, newValue)
if err != nil {
return err
}
}
var temp map[string]interface{}
err = json.Unmarshal([]byte(jsnStr), &temp)
if err != nil {
return errors.Wrap(err, "marshaling to interface")
}
updatedYaml, err := yaml.Marshal(temp)
if err != nil {
return err
}
err = yaml.Unmarshal(updatedYaml, &Style)
if err != nil {
return err
}
}
Nodes = make(map[string]*template.Template, len(Style.Nodes))
for k, v := range Style.Nodes {
s, err := template.New(k).Funcs(templateFuncMap).Parse(v)
if err != nil {
return errors.Wrap(err, fmt.Sprintf("error parsing node style for resource type %s", k))
}
Nodes[k] = s
}
Edges = make(map[string]map[string]*template.Template, len(Style.Edges))
for k, v := range Style.Edges {
Edges[k] = make(map[string]*template.Template, len(v))
for kk, vv := range v {
s, err := template.New(k).Funcs(templateFuncMap).Parse(vv)
if err != nil {
return errors.Wrap(err, fmt.Sprintf("error parsing edge style for resource type %s", k))
}
Edges[k][kk] = s
}
}
return nil
}