This repository has been archived by the owner on Oct 30, 2023. It is now read-only.
/
config.go
70 lines (58 loc) · 1.74 KB
/
config.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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
Copyright © 2019 Michael Gruener
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 config implements the playbook config format
*/
package config
import (
"encoding/json"
"github.com/mitchellh/mapstructure"
"sigs.k8s.io/yaml"
)
// decode the given data with the default decoder settings
func decode(data *map[string]interface{}, result interface{}) error {
// TODO: check https://github.com/mitchellh/mapstructure/issues/187 to
// support mitchellh/mapstructure > 1.3.1
decoderConfig := &mapstructure.DecoderConfig{
ZeroFields: true,
ErrorUnused: false,
WeaklyTypedInput: true,
TagName: "json",
Result: &result,
}
decoder, err := mapstructure.NewDecoder(decoderConfig)
if err != nil {
return err
}
err = decoder.Decode(data)
return err
}
// NewConfigFromMap takes raw config data and parses it into an
// inventory config
func NewConfigFromMap(data *map[string]interface{}) (*Config, error) {
var config Config
err := decode(data, &config)
return &config, err
}
// NewConfig returns an empty playbook config
func NewConfig() *Config {
return &Config{
Plays: make([]*Play, 0),
}
}
func (c *Config) YAML() ([]byte, error) {
return yaml.Marshal(c)
}
func (c *Config) JSON() ([]byte, error) {
return json.Marshal(c)
}