forked from jenkins-x/jx
-
Notifications
You must be signed in to change notification settings - Fork 0
/
extensions.go
64 lines (58 loc) · 1.73 KB
/
extensions.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
package kube
import (
"github.com/ghodss/yaml"
"io/ioutil"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"path/filepath"
)
const extensionsConfigDefaultFile = "jenkins-x-extensions.yaml"
const extensionsConfigDefaultConfigMap = "jenkins-x-extensions"
type ExtensionsConfig struct {
Extensions map[string]ExtensionConfig `json:"extensions"`
}
type ExtensionConfig struct {
Parameters map[string]string `json: "parameters"`
}
func (extensionsConfig *ExtensionsConfig) LoadFromFile() (cfg *ExtensionsConfig, err error) {
extensionsYamlPath, err := filepath.Abs(extensionsConfigDefaultFile)
if err != nil {
return nil, err
}
extensionsYaml, err := ioutil.ReadFile(extensionsYamlPath)
if err != nil {
return nil, err
}
err = yaml.Unmarshal(extensionsYaml, extensionsConfig)
if err != nil {
return nil, err
}
return extensionsConfig, nil
}
func (extensionsConfig *ExtensionsConfig) LoadFromConfigMap(client kubernetes.Interface, namespace string) (cfg *ExtensionsConfig, err error) {
cm, err := client.CoreV1().ConfigMaps(namespace).Get(extensionsConfigDefaultConfigMap, metav1.GetOptions{})
if err != nil {
// CM doesn't exist, create it
cm, err = client.CoreV1().ConfigMaps(namespace).Create(&corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: extensionsConfigDefaultConfigMap,
},
})
if err != nil {
return nil, err
}
}
extensionsConfig.Extensions = make(map[string]ExtensionConfig)
for k, v := range cm.Data {
parameters := make(map[string]string, 0)
err = yaml.Unmarshal([]byte(v), ¶meters)
if err != nil {
return nil, err
}
extensionsConfig.Extensions[k] = ExtensionConfig{
Parameters: parameters,
}
}
return extensionsConfig, nil
}