/
kubernetes.go
82 lines (76 loc) · 2.13 KB
/
kubernetes.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
package infra
import (
"fmt"
"github.com/spf13/viper"
)
// Kubernetes represents a Kube Cluster
type Kubernetes struct {
Name string
Region string
Provider string
}
// Steps generates steps that provision a Kubernetes cluster
func (k *Kubernetes) Steps(runID int32) ([]Step, error) {
var s []Step
k8sName := k.internalName("k8s")
configName := k.internalName("kubeconfig")
vars := make(map[string]string)
vars["name"] = k.Name
vars["kubernetes"] = k.Provider
vars["region"] = k.Region
vars["args"] = fmt.Sprintf(`["%s","%s"]`, k8sName, viper.GetString("aws-region"))
remoteStates := make(map[string]string)
remoteStates["k8s"] = k8sName
s = append(s,
// Provision the cluster
Step{
&TerraformModule{
ID: k8sName,
Name: k8sName,
Source: "./infra/kubernetes/" + k.Provider,
Path: fmt.Sprintf("/tmp/%s-%d", k8sName, runID),
Variables: vars,
},
},
// Grab the Kubernetes Config
Step{
&TerraformModule{
ID: configName,
Name: configName,
Source: "./infra/kubernetes/kubeconfig",
Path: fmt.Sprintf("/tmp/%s-%d", configName, runID),
Variables: vars,
RemoteStates: remoteStates,
},
},
)
return s, nil
}
// Config returns steps to save a Kubernetes config
func (k *Kubernetes) Config(runID int32, path string) ([]Step, error) {
k8sName := k.internalName("k8s")
configName := k.internalName("kubeconfig")
vars := make(map[string]string)
vars["name"] = k.Name
vars["kubernetes"] = k.Provider
vars["region"] = k.Region
vars["args"] = fmt.Sprintf(`["%s","%s"]`, k8sName, viper.GetString("aws-region"))
vars["output_path"] = path
remoteStates := make(map[string]string)
remoteStates["k8s"] = k8sName
return []Step{
Step{
&TerraformModule{
ID: configName,
Name: configName,
Source: "./infra/kubernetes/kubeconfig",
Path: fmt.Sprintf("/tmp/%s-%d", configName, runID),
Variables: vars,
RemoteStates: remoteStates,
},
},
}, nil
}
func (k *Kubernetes) internalName(module string) string {
return fmt.Sprintf("%s-%s-%s-%s", k.Name, k.Region, k.Provider, module)
}