/
openshift.go
73 lines (61 loc) · 1.87 KB
/
openshift.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
package resources
import (
"encoding/json"
"fmt"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/client-go/kubernetes/scheme"
)
var (
Scheme = scheme.Scheme
codecs = serializer.NewCodecFactory(Scheme)
)
func LoadKubernetesResource(jsonData []byte, namespace string) (runtime.Object, error) {
u := unstructured.Unstructured{}
err := u.UnmarshalJSON(jsonData)
if err != nil {
return nil, err
}
u.SetNamespace(namespace)
setIntegreatlyLabel(&u)
if u.GetObjectKind().GroupVersionKind().Kind == "ImageStream" {
u.SetAPIVersion("image.openshift.io/v1")
}
if u.GetObjectKind().GroupVersionKind().Kind == "Template" {
u.SetAPIVersion("template.openshift.io/v1")
}
return RuntimeObjectFromUnstructured(&u)
}
func RuntimeObjectFromUnstructured(u *unstructured.Unstructured) (runtime.Object, error) {
gvk := u.GroupVersionKind()
decoder := codecs.UniversalDecoder(gvk.GroupVersion())
b, err := u.MarshalJSON()
if err != nil {
return nil, fmt.Errorf("error running MarshalJSON on unstructured object: %v", err)
}
ro, _, err := decoder.Decode(b, &gvk, nil)
if err != nil {
return nil, fmt.Errorf("failed to decode json data with gvk(%v): %v", gvk.String(), err)
}
return ro, nil
}
func UnstructuredFromRuntimeObject(ro runtime.Object) (*unstructured.Unstructured, error) {
b, err := json.Marshal(ro)
if err != nil {
return nil, fmt.Errorf("error running MarshalJSON on runtime object: %v", err)
}
var u unstructured.Unstructured
if err := json.Unmarshal(b, &u.Object); err != nil {
return nil, fmt.Errorf("failed to unmarshal json into unstructured object: %v", err)
}
return &u, nil
}
func setIntegreatlyLabel(u *unstructured.Unstructured) {
labels := u.GetLabels()
if labels == nil {
labels = map[string]string{}
}
labels["integreatly"] = "true"
u.SetLabels(labels)
}