blob: e9ec79b3f264cef2bf070d9d6fc31d429991afca [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 }
78 apps := []App{
79 CreateAppIngressPrivate(tmpls),
80 CreateAppCoreAuth(tmpls),
81 CreateAppVaultwarden(tmpls),
82 CreateAppMatrix(tmpls),
83 CreateAppPihole(tmpls),
84 CreateAppMaddy(tmpls),
85 }
86 for _, a := range apps {
87 if a.Name == installFlags.appName {
88 for _, t := range a.Templates {
89 out, err := os.Create(filepath.Join(installFlags.outputDir, t.Name()))
90 if err != nil {
91 return err
92 }
93 defer out.Close()
94 if err := t.Execute(out, cfg); err != nil {
95 return err
96 }
97 }
98 break
99 }
100 }
101 return nil
102}
103
104func main() {
105 if err := rootCmd.Execute(); err != nil {
106 log.Fatal(err)
107 }
108}