/
register.go
90 lines (74 loc) · 2.82 KB
/
register.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
// Package v1beta1 contains API Schema definitions for the vsphereprovider v1beta1 API group
// +k8s:openapi-gen=true
// +k8s:deepcopy-gen=package,register
// +k8s:conversion-gen=github.com/openshift/machine-api-operator/pkg/apis/vsphereprovider
// +k8s:defaulter-gen=TypeMeta
// +groupName=vsphereprovider.machine.openshift.io
package v1beta1
import (
"encoding/json"
"fmt"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/scheme"
"sigs.k8s.io/yaml"
)
var (
// SchemeGroupVersion is group version used to register these objects
SchemeGroupVersion = schema.GroupVersion{Group: "vsphereprovider.openshift.io", Version: "v1beta1"}
// SchemeBuilder is used to add go types to the GroupVersionKind scheme
SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion}
)
// RawExtensionFromProviderSpec marshals the machine provider spec.
func RawExtensionFromProviderSpec(spec *VSphereMachineProviderSpec) (*runtime.RawExtension, error) {
if spec == nil {
return &runtime.RawExtension{}, nil
}
var rawBytes []byte
var err error
if rawBytes, err = json.Marshal(spec); err != nil {
return nil, fmt.Errorf("error marshalling providerSpec: %v", err)
}
return &runtime.RawExtension{
Raw: rawBytes,
}, nil
}
// RawExtensionFromProviderStatus marshals the provider status
func RawExtensionFromProviderStatus(status *VSphereMachineProviderStatus) (*runtime.RawExtension, error) {
if status == nil {
return &runtime.RawExtension{}, nil
}
var rawBytes []byte
var err error
if rawBytes, err = json.Marshal(status); err != nil {
return nil, fmt.Errorf("error marshalling providerStatus: %v", err)
}
return &runtime.RawExtension{
Raw: rawBytes,
}, nil
}
// ProviderSpecFromRawExtension unmarshals the JSON-encoded spec
func ProviderSpecFromRawExtension(rawExtension *runtime.RawExtension) (*VSphereMachineProviderSpec, error) {
if rawExtension == nil {
return &VSphereMachineProviderSpec{}, nil
}
spec := new(VSphereMachineProviderSpec)
if err := yaml.Unmarshal(rawExtension.Raw, &spec); err != nil {
return nil, fmt.Errorf("error unmarshalling providerSpec: %v", err)
}
klog.V(5).Infof("Got provider spec from raw extension: %+v", spec)
return spec, nil
}
// ProviderStatusFromRawExtension unmarshals a raw extension into a VSphereMachineProviderStatus type
func ProviderStatusFromRawExtension(rawExtension *runtime.RawExtension) (*VSphereMachineProviderStatus, error) {
if rawExtension == nil {
return &VSphereMachineProviderStatus{}, nil
}
providerStatus := new(VSphereMachineProviderStatus)
if err := yaml.Unmarshal(rawExtension.Raw, providerStatus); err != nil {
return nil, fmt.Errorf("error unmarshalling providerStatus: %v", err)
}
klog.V(5).Infof("Got provider Status from raw extension: %+v", providerStatus)
return providerStatus, nil
}