aboutsummaryrefslogtreecommitdiff
path: root/internal/mappings/parse.go
diff options
context:
space:
mode:
authorRaúl Benencia <raul@thousandeyes.com>2018-04-13 16:30:31 -0700
committerRaúl Benencia <raul@thousandeyes.com>2018-05-11 15:02:34 -0700
commit77c172b823b64ebface655681ab0749b9d2f7081 (patch)
tree09c13e626eb95ae1d33e76ed683172eab1ab6c96 /internal/mappings/parse.go
First public commit
Diffstat (limited to 'internal/mappings/parse.go')
-rw-r--r--internal/mappings/parse.go78
1 files changed, 78 insertions, 0 deletions
diff --git a/internal/mappings/parse.go b/internal/mappings/parse.go
new file mode 100644
index 0000000..64de5bb
--- /dev/null
+++ b/internal/mappings/parse.go
@@ -0,0 +1,78 @@
+// Copyright 2018 ThousandEyes Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package mappings
+
+import (
+ "io/ioutil"
+ "os"
+
+ "gopkg.in/yaml.v2"
+
+ "github.com/thousandeyes/shoelaces/internal/log"
+)
+
+// Mappings struct contains YamlNetworkMaps and YamlHostnameMaps.
+type Mappings struct {
+ NetworkMaps []YamlNetworkMap `yaml:"networkMaps"`
+ HostnameMaps []YamlHostnameMap `yaml:"hostnameMaps"`
+}
+
+// YamlNetworkMap struct contains an association between a CIDR network and a
+// Script. It's different than mapping.NetworkMap in the sense that this
+// struct can be used to parse the JSON mapping file.
+type YamlNetworkMap struct {
+ Network string
+ Script YamlScript
+}
+
+// YamlHostnameMap struct contains an association between a hostname regular
+// expression and a Script. It's different than mapping.HostnameMap in the
+// sense that this struct can be used to parse the JSON mapping file.
+type YamlHostnameMap struct {
+ Hostname string
+ Script YamlScript
+}
+
+// YamlScript holds information regarding a script. Its name, its environment
+// and its parameters.
+type YamlScript struct {
+ Name string
+ Environment string
+ Params map[string]string
+}
+
+// ParseYamlMappings parses the mappings yaml file into a Mappings struct.
+func ParseYamlMappings(logger log.Logger, mappingsFile string) *Mappings {
+ var mappings Mappings
+
+ logger.Info("component", "config", "msg", "Reading mappings", "source", mappingsFile)
+ yamlFile, err := ioutil.ReadFile(mappingsFile)
+
+ if err != nil {
+ logger.Error(err)
+ os.Exit(1)
+ }
+
+ mappings.NetworkMaps = make([]YamlNetworkMap, 0)
+ mappings.HostnameMaps = make([]YamlHostnameMap, 0)
+
+ err = yaml.Unmarshal(yamlFile, &mappings)
+ if err != nil {
+ logger.Error(err)
+ os.Exit(1)
+ }
+
+ return &mappings
+}
nihil fit ex nihilo