...

Source file src/edge-infra.dev/pkg/sds/ien/bootoptions/bootoptions.go

Documentation: edge-infra.dev/pkg/sds/ien/bootoptions

     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  // FromConfigMap populates the BootOptions fields from the provided ConfigMap
    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  // ToConfigMap creates a boot-options configmap
    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  // FromConfigMap returns a new BootOptions object from the provided configmap
    48  func FromConfigMap(cm *corev1.ConfigMap) *BootOptions {
    49  	return (&BootOptions{}).FromConfigMap(cm)
    50  }
    51  
    52  // IsBootOptionsConfigMap returns true if the provided configmap is the
    53  // boot-options configmap, otherwise returns false
    54  func IsBootOptionsConfigMap(obj client.Object) bool {
    55  	return obj.GetName() == ConfigMapName && obj.GetNamespace() == ConfigMapNamespace
    56  }
    57  
    58  // FromClient retrieves the boot-options configmap from the cluster using the
    59  // provided client
    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  // FromClusterConfig returns a boot-options configmap from ClusterConfig
    74  func FromClusterConfig(clusterConfig *model.ClusterConfig) *corev1.ConfigMap {
    75  	return BuildConfigMap(clusterConfig.AcRelay, clusterConfig.BootstrapAck, clusterConfig.PxeEnabled)
    76  }
    77  
    78  // BuildConfigMap returns a boot-options configmap
    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