forked from vmware-tanzu/sonobuoy
/
sonobuoyconfig.go
67 lines (52 loc) · 1.67 KB
/
sonobuoyconfig.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
/*
Copyright 2018 Heptio 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 app
import (
"encoding/json"
"io/ioutil"
"github.com/heptio/sonobuoy/pkg/config"
"github.com/pkg/errors"
"github.com/spf13/pflag"
)
// SonobuoyConfig is a config.Config that implements pflag.Value from a file path
type SonobuoyConfig struct {
config.Config
raw string
}
var _ pflag.Value = &SonobuoyConfig{}
// String is needed for pflag.Value.
func (c *SonobuoyConfig) String() string {
return c.raw
}
// Type is needed for pflag.Value.
func (c *SonobuoyConfig) Type() string { return "Sonobuoy config" }
// Set attempts to read a file, then deserialise the json into a config.Config struct.
func (c *SonobuoyConfig) Set(str string) error {
bytes, err := ioutil.ReadFile(str)
if err != nil {
return errors.Wrap(err, "cloudn't open config file")
}
if err := json.Unmarshal(bytes, &c.Config); err != nil {
return errors.Wrap(err, "couldn't Unmarshal sonobuoy config")
}
c.raw = string(bytes)
return nil
}
// Get will return the config.Config if one is available, otherwise nil.
func (c *SonobuoyConfig) Get() *config.Config {
// Don't just return zero structs
if c.raw == "" {
return nil
}
return &c.Config
}