blob: 8c006ba606e16aff6da16e0b5205daf77426fc6f [file] [log] [blame]
giolekva050609f2021-12-29 15:51:40 +04001package main
2
3import (
4 "embed"
5 "flag"
6 "io/ioutil"
7 "log"
8 "os"
9 "path/filepath"
10 "text/template"
11
12 "github.com/spf13/cobra"
13 "sigs.k8s.io/yaml"
14)
15
16var config = flag.String("config", "", "Path to config file")
17var outputDir = flag.String("output-dir", "", "Path to the output directory")
18
19//go:embed values-tmpl
20var valuesTmpls embed.FS
21
22var rootCmd *cobra.Command
23
24var installFlags struct {
25 config string
26 appName string
27 outputDir string
28}
29
30func init() {
31 rootCmd = &cobra.Command{
32 Use: "pcloud",
33 }
34 installCmd := &cobra.Command{
35 Use: "install",
36 RunE: installCmdRun,
37 }
38 installCmd.Flags().StringVar(
39 &installFlags.config,
40 "config",
41 "",
42 "",
43 )
44 installCmd.Flags().StringVar(
45 &installFlags.appName,
46 "app",
47 "",
48 "",
49 )
50 installCmd.Flags().StringVar(
51 &installFlags.outputDir,
52 "output-dir",
53 "",
54 "",
55 )
56 rootCmd.AddCommand(installCmd)
57}
58
59func readConfig(config string) (Config, error) {
60 var cfg Config
61 inp, err := ioutil.ReadFile(config)
62 if err != nil {
63 return cfg, err
64 }
65 err = yaml.UnmarshalStrict(inp, &cfg)
66 return cfg, err
67}
68
69func installCmdRun(cmd *cobra.Command, args []string) error {
70 cfg, err := readConfig(installFlags.config)
71 if err != nil {
72 return err
73 }
74 tmpls, err := template.ParseFS(valuesTmpls, "values-tmpl/*.yaml")
75 if err != nil {
76 log.Fatal(err)
77 }
giolekvaef76a3e2022-01-10 12:22:28 +040078 apps := CreateAllApps(tmpls)
giolekva050609f2021-12-29 15:51:40 +040079 for _, a := range apps {
80 if a.Name == installFlags.appName {
81 for _, t := range a.Templates {
82 out, err := os.Create(filepath.Join(installFlags.outputDir, t.Name()))
83 if err != nil {
84 return err
85 }
86 defer out.Close()
87 if err := t.Execute(out, cfg); err != nil {
88 return err
89 }
90 }
91 break
92 }
93 }
94 return nil
95}
96
97func main() {
98 if err := rootCmd.Execute(); err != nil {
99 log.Fatal(err)
100 }
101}