From 9c9ccf622a419689029f795548df6875ad5e7fc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Cluseau?= Date: Sat, 7 Jul 2018 10:12:08 +1100 Subject: [PATCH] feat: apply config from stdin --- cmd/dkl-apply-config/main.go | 15 ++++- go.mod | 2 +- vendor/novit.nc/direktil/pkg/config/config.go | 60 +++++++++++++------ vendor/vgo.list | 2 +- 4 files changed, 58 insertions(+), 21 deletions(-) diff --git a/cmd/dkl-apply-config/main.go b/cmd/dkl-apply-config/main.go index d21faec..24b274d 100644 --- a/cmd/dkl-apply-config/main.go +++ b/cmd/dkl-apply-config/main.go @@ -14,13 +14,24 @@ var ( ) func main() { - configPath := flag.String("config", "config.yaml", "config to load") + configPath := flag.String("config", "config.yaml", "config to load (\"-\" for stdin)") doFiles := flag.Bool("files", false, "apply files") flag.Parse() log.SetConsole(os.Stderr) - cfg, err := config.Load(*configPath) + var ( + cfg *config.Config + err error + ) + + if *configPath == "-" { + cfg, err = config.Read(os.Stdin) + + } else { + cfg, err = config.Load(*configPath) + } + if err != nil { log.Print("failed to load config: ", err) } diff --git a/go.mod b/go.mod index 98d4ceb..f462ae6 100644 --- a/go.mod +++ b/go.mod @@ -3,5 +3,5 @@ module novit.nc/direktil/inits require ( github.com/sparrc/go-ping v0.0.0-20160208162908-416e72114cd1 golang.org/x/net v0.0.0-20180706051357-32a936f46389 - novit.nc/direktil/pkg v0.0.0-20180703072055-a44d1cbe7fbb + novit.nc/direktil/pkg v0.0.0-20180706230842-852aa03280f9 ) diff --git a/vendor/novit.nc/direktil/pkg/config/config.go b/vendor/novit.nc/direktil/pkg/config/config.go index ca246db..dc9a902 100644 --- a/vendor/novit.nc/direktil/pkg/config/config.go +++ b/vendor/novit.nc/direktil/pkg/config/config.go @@ -2,12 +2,54 @@ package config import ( "fmt" - "io/ioutil" + "io" "os" yaml "gopkg.in/yaml.v2" ) +// Load a config from a file. +func Load(file string) (config *Config, err error) { + f, err := os.Open(file) + if err != nil { + return + } + + defer f.Close() + + config, err = Read(f) + if err != nil { + return nil, fmt.Errorf("failed to parse %s: %v", file, err) + } + + return +} + +// Read a config from a reader. +func Read(reader io.Reader) (config *Config, err error) { + config = &Config{} + + err = yaml.NewDecoder(reader).Decode(config) + + if err != nil { + return nil, err + } + + return +} + +// Parse the config in data. +func Parse(data []byte) (config *Config, err error) { + config = &Config{} + + err = yaml.Unmarshal(data, config) + if err != nil { + return nil, err + } + + return +} + // Config represent this system's configuration type Config struct { Vars []VarDefault @@ -83,19 +125,3 @@ type NetworkDef struct { Optional bool Script string } - -func Load(file string) (config *Config, err error) { - config = &Config{} - - configData, err := ioutil.ReadFile(file) - if err != nil { - return nil, fmt.Errorf("failed to read %s: %v", file, err) - } - - err = yaml.Unmarshal(configData, config) - if err != nil { - return nil, fmt.Errorf("failed to parse %s: %v", file, err) - } - - return -} diff --git a/vendor/vgo.list b/vendor/vgo.list index e529015..e704e48 100644 --- a/vendor/vgo.list +++ b/vendor/vgo.list @@ -18,7 +18,7 @@ golang.org/x/net/ipv6 gopkg.in/check.v1 # gopkg.in/yaml.v2 v2.2.1 gopkg.in/yaml.v2 -# novit.nc/direktil/pkg v0.0.0-20180703072055-a44d1cbe7fbb +# novit.nc/direktil/pkg v0.0.0-20180706230842-852aa03280f9 novit.nc/direktil/pkg/color novit.nc/direktil/pkg/config novit.nc/direktil/pkg/log