blob: eb49736a4516baf4773cafff631ebf026f6fb4d2 [file] [log] [blame]
giolekva8aa73e82022-07-09 11:34:39 +04001package main
2
3import (
4 "io/ioutil"
5 "os"
6 "path/filepath"
7
8 "github.com/giolekva/pcloud/core/installer"
9 "github.com/spf13/cobra"
10 "sigs.k8s.io/yaml"
11)
12
13var installFlags struct {
14 config string
15 appName string
16 outputDir string
17}
18
19func installCmd() *cobra.Command {
20 cmd := &cobra.Command{
21 Use: "install",
22 RunE: installCmdRun,
23 }
24 cmd.Flags().StringVar(
25 &installFlags.config,
26 "config",
27 "",
28 "",
29 )
30 cmd.Flags().StringVar(
31 &installFlags.appName,
32 "app",
33 "",
34 "",
35 )
36 cmd.Flags().StringVar(
37 &installFlags.outputDir,
38 "output-dir",
39 "",
40 "",
41 )
42 return cmd
43}
44
45func installCmdRun(cmd *cobra.Command, args []string) error {
46 cfg, err := readConfig(installFlags.config)
47 if err != nil {
48 return err
49 }
50 apps := installer.CreateAllApps()
51 for _, a := range apps {
52 if a.Name == installFlags.appName {
53 for _, t := range a.Templates {
54 out, err := os.Create(filepath.Join(installFlags.outputDir, t.Name()))
55 if err != nil {
56 return err
57 }
58 defer out.Close()
59 if err := t.Execute(out, cfg); err != nil {
60 return err
61 }
62 }
63 break
64 }
65 }
66 return nil
67}
68
69func readConfig(config string) (installer.Config, error) {
70 var cfg installer.Config
71 inp, err := ioutil.ReadFile(config)
72 if err != nil {
73 return cfg, err
74 }
75 err = yaml.UnmarshalStrict(inp, &cfg)
76 return cfg, err
77}