package bootoptions import ( "context" "strconv" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" "edge-infra.dev/pkg/edge/api/graph/model" ) type BootOptions struct { ACRelay bool ACKBootstrap bool PXEEnabled bool } // FromConfigMap populates the BootOptions fields from the provided ConfigMap func (b *BootOptions) FromConfigMap(cm *corev1.ConfigMap) *BootOptions { b.ACRelay, _ = strconv.ParseBool(cm.Data[ACRelay]) b.ACKBootstrap, _ = strconv.ParseBool(cm.Data[ACKBootstrap]) b.PXEEnabled, _ = strconv.ParseBool(cm.Data[PXEEnabled]) return b } // ToConfigMap creates a boot-options configmap func (b BootOptions) ToConfigMap() *corev1.ConfigMap { return &corev1.ConfigMap{ TypeMeta: metav1.TypeMeta{ Kind: "ConfigMap", APIVersion: corev1.SchemeGroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: ConfigMapName, Namespace: ConfigMapNamespace, }, Data: map[string]string{ ACRelay: strconv.FormatBool(b.ACRelay), ACKBootstrap: strconv.FormatBool(b.ACKBootstrap), PXEEnabled: strconv.FormatBool(b.PXEEnabled), }, } } // FromConfigMap returns a new BootOptions object from the provided configmap func FromConfigMap(cm *corev1.ConfigMap) *BootOptions { return (&BootOptions{}).FromConfigMap(cm) } // IsBootOptionsConfigMap returns true if the provided configmap is the // boot-options configmap, otherwise returns false func IsBootOptionsConfigMap(obj client.Object) bool { return obj.GetName() == ConfigMapName && obj.GetNamespace() == ConfigMapNamespace } // FromClient retrieves the boot-options configmap from the cluster using the // provided client func FromClient(ctx context.Context, cli client.Client) (*BootOptions, error) { cfg := &corev1.ConfigMap{} key := client.ObjectKey{ Namespace: ConfigMapNamespace, Name: ConfigMapName, } if err := cli.Get(ctx, key, cfg); err != nil { return nil, err } return FromConfigMap(cfg), nil } // FromClusterConfig returns a boot-options configmap from ClusterConfig func FromClusterConfig(clusterConfig *model.ClusterConfig) *corev1.ConfigMap { return BuildConfigMap(clusterConfig.AcRelay, clusterConfig.BootstrapAck, clusterConfig.PxeEnabled) } // BuildConfigMap returns a boot-options configmap func BuildConfigMap(acRelay, ackBootstrap, pxeEnabled bool) *corev1.ConfigMap { b := &BootOptions{ ACRelay: acRelay, ACKBootstrap: ackBootstrap, PXEEnabled: pxeEnabled, } return b.ToConfigMap() }