-
Notifications
You must be signed in to change notification settings - Fork 24
/
new.go
101 lines (84 loc) · 2.71 KB
/
new.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package configure
import (
"context"
"fmt"
"io"
"os"
"path/filepath"
"github.com/aserto-dev/topaz/pkg/cc/config"
"github.com/aserto-dev/topaz/pkg/cli/cc"
"github.com/aserto-dev/topaz/pkg/cli/cmd/certs"
"github.com/aserto-dev/topaz/pkg/cli/cmd/common"
"github.com/fatih/color"
"github.com/pkg/errors"
)
type NewConfigCmd struct {
Name ConfigName `short:"n" help:"config name"`
LocalPolicyImage string `short:"l" help:"local policy image name"`
Resource string `short:"r" help:"resource url"`
Stdout bool `short:"p" help:"print to stdout"`
EdgeDirectory bool `short:"d" help:"enable edge directory" default:"false"`
Force bool `flag:"" default:"false" short:"f" required:"false" help:"skip confirmation prompt"`
}
func (cmd *NewConfigCmd) Run(c *cc.CommonCtx) error {
if cmd.Name == "" && cmd.Resource == "" {
if cmd.LocalPolicyImage == "" {
return errors.New("you either need to provide a local policy image or the resource and the policy name for the configuration")
}
}
configFile := cmd.Name.String() + ".yaml"
if configFile != c.Config.Active.ConfigFile {
c.Config.Active.Config = cmd.Name.String()
c.Config.Active.ConfigFile = filepath.Join(cc.GetTopazCfgDir(), configFile)
}
if !cmd.Stdout {
_, _ = fmt.Fprint(color.Error, color.GreenString(">>> configure policy"))
}
configGenerator := config.NewGenerator(cmd.Name.String()).
WithVersion(config.ConfigFileVersion).
WithLocalPolicyImage(cmd.LocalPolicyImage).
WithPolicyName(cmd.Name.String()).
WithResource(cmd.Resource).
WithEdgeDirectory(cmd.EdgeDirectory)
_, err := configGenerator.CreateConfigDir()
if err != nil {
return err
}
if _, err := configGenerator.CreateCertsDir(); err != nil {
return err
}
certGenerator := certs.GenerateCertsCmd{CertsDir: cc.GetTopazCertsDir()}
err = certGenerator.Run(c)
if err != nil {
return err
}
if _, err := configGenerator.CreateDataDir(); err != nil {
return err
}
var w io.Writer
if cmd.Stdout {
w = c.UI.Output()
} else {
if !cmd.Force {
if _, err := os.Stat(c.Config.Active.ConfigFile); err == nil {
c.UI.Exclamation().Msg("A configuration file already exists.")
if !common.PromptYesNo("Do you want to continue?", false) {
return nil
}
}
}
w, err = os.Create(c.Config.Active.ConfigFile)
if err != nil {
return err
}
}
if !cmd.Stdout {
if cmd.LocalPolicyImage != "" {
color.Green("using local policy image: %s", cmd.LocalPolicyImage)
return configGenerator.GenerateConfig(w, config.LocalImageTemplate)
}
color.Green("policy name: %s", cmd.Name)
}
c.Context = context.WithValue(c.Context, common.Save, true)
return configGenerator.GenerateConfig(w, config.Template)
}