...
1 package bootoptions
2
3 import (
4 "context"
5 "strconv"
6
7 corev1 "k8s.io/api/core/v1"
8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9 "sigs.k8s.io/controller-runtime/pkg/client"
10
11 "edge-infra.dev/pkg/edge/api/graph/model"
12 )
13
14 type BootOptions struct {
15 ACRelay bool
16 ACKBootstrap bool
17 PXEEnabled bool
18 }
19
20
21 func (b *BootOptions) FromConfigMap(cm *corev1.ConfigMap) *BootOptions {
22 b.ACRelay, _ = strconv.ParseBool(cm.Data[ACRelay])
23 b.ACKBootstrap, _ = strconv.ParseBool(cm.Data[ACKBootstrap])
24 b.PXEEnabled, _ = strconv.ParseBool(cm.Data[PXEEnabled])
25 return b
26 }
27
28
29 func (b BootOptions) ToConfigMap() *corev1.ConfigMap {
30 return &corev1.ConfigMap{
31 TypeMeta: metav1.TypeMeta{
32 Kind: "ConfigMap",
33 APIVersion: corev1.SchemeGroupVersion.String(),
34 },
35 ObjectMeta: metav1.ObjectMeta{
36 Name: ConfigMapName,
37 Namespace: ConfigMapNamespace,
38 },
39 Data: map[string]string{
40 ACRelay: strconv.FormatBool(b.ACRelay),
41 ACKBootstrap: strconv.FormatBool(b.ACKBootstrap),
42 PXEEnabled: strconv.FormatBool(b.PXEEnabled),
43 },
44 }
45 }
46
47
48 func FromConfigMap(cm *corev1.ConfigMap) *BootOptions {
49 return (&BootOptions{}).FromConfigMap(cm)
50 }
51
52
53
54 func IsBootOptionsConfigMap(obj client.Object) bool {
55 return obj.GetName() == ConfigMapName && obj.GetNamespace() == ConfigMapNamespace
56 }
57
58
59
60 func FromClient(ctx context.Context, cli client.Client) (*BootOptions, error) {
61 cfg := &corev1.ConfigMap{}
62 key := client.ObjectKey{
63 Namespace: ConfigMapNamespace,
64 Name: ConfigMapName,
65 }
66 if err := cli.Get(ctx, key, cfg); err != nil {
67 return nil, err
68 }
69
70 return FromConfigMap(cfg), nil
71 }
72
73
74 func FromClusterConfig(clusterConfig *model.ClusterConfig) *corev1.ConfigMap {
75 return BuildConfigMap(clusterConfig.AcRelay, clusterConfig.BootstrapAck, clusterConfig.PxeEnabled)
76 }
77
78
79 func BuildConfigMap(acRelay, ackBootstrap, pxeEnabled bool) *corev1.ConfigMap {
80 b := &BootOptions{
81 ACRelay: acRelay,
82 ACKBootstrap: ackBootstrap,
83 PXEEnabled: pxeEnabled,
84 }
85 return b.ToConfigMap()
86 }
87
View as plain text