This repository has been archived by the owner on May 3, 2022. It is now read-only.
/
app.go
88 lines (75 loc) · 2.22 KB
/
app.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
package chart
import (
"fmt"
"io/ioutil"
"os"
"github.com/spf13/cobra"
"sigs.k8s.io/yaml"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/bookingcom/shipper/cmd/shipperctl/config"
shipper "github.com/bookingcom/shipper/pkg/apis/shipper/v1alpha1"
)
var (
appName string
fileName string
renderAppCmd = &cobra.Command{
Use: "app",
Short: "render Shipper Charts for an Application",
RunE: renderChartFromApp,
PersistentPreRun: func(cmd *cobra.Command, args []string) {
if appName == "" && fileName == "" {
cmd.Printf("error: must have *one* of the flags: appName, filename\n")
os.Exit(1)
}
if appName != "" && fileName != "" {
cmd.Printf("error: must have *one* of the flags: appName, filename\n")
os.Exit(1)
}
},
}
)
func init() {
fileFlagName := "filename"
renderAppCmd.Flags().StringVar(&appName, "appName", "", "The name of an existing application to render chart for")
renderAppCmd.Flags().StringVar(&fileName, fileFlagName, "", "An application manifest in the current context to render chart for (e.g. `applicastion.yaml`)")
err := renderAppCmd.MarkFlagFilename(fileFlagName, "yaml")
if err != nil {
renderAppCmd.Printf("warning: could not mark %q for filename yaml autocompletion: %s\n", fileFlagName, err)
}
renderCmd.AddCommand(renderAppCmd)
}
func renderChartFromApp(cmd *cobra.Command, args []string) error {
c, err := newChartRenderConfig()
if err != nil {
return err
}
_, shipperClient, err := config.Load(kubeConfigFile, managementClusterContext)
if err != nil {
return err
}
var application shipper.Application
if appName != "" {
applicationPointer, err := shipperClient.ShipperV1alpha1().Applications(namespace).Get(appName, metav1.GetOptions{})
if err != nil {
return err
}
application = *applicationPointer
} else {
appYaml, err := ioutil.ReadFile(fileName)
if err != nil {
return err
}
if err := yaml.Unmarshal(appYaml, &application); err != nil {
return err
}
}
c.ReleaseName = fmt.Sprintf("%s-%s-%d", application.Name, "foobar", 0)
c.ChartSpec = application.Spec.Template.Chart
c.ChartValues = application.Spec.Template.Values
rendered, err := render(c)
if err != nil {
return err
}
cmd.Println(rendered)
return nil
}