...

Source file src/edge-infra.dev/pkg/sds/ien/k8s/controllers/nodeagent/plugins/thinclient/objectwatcher.go

Documentation: edge-infra.dev/pkg/sds/ien/k8s/controllers/nodeagent/plugins/thinclient

     1  package thinclient
     2  
     3  import (
     4  	"context"
     5  
     6  	corev1 "k8s.io/api/core/v1"
     7  	ctrl "sigs.k8s.io/controller-runtime"
     8  	"sigs.k8s.io/controller-runtime/pkg/client"
     9  
    10  	"edge-infra.dev/pkg/sds/ien/k8s/controllers/nodeagent/config"
    11  	"edge-infra.dev/pkg/sds/ien/k8s/controllers/nodeagent/plugins/thinclient/configobject"
    12  	"edge-infra.dev/pkg/sds/ien/k8s/controllers/nodeagent/plugins/thinclient/selector"
    13  	"edge-infra.dev/pkg/sds/lib/os/file"
    14  	"edge-infra.dev/pkg/sds/lib/os/passthrough"
    15  )
    16  
    17  type ConfigMapWatcherPlugin struct{}
    18  
    19  func (configMapWatcherPlugin ConfigMapWatcherPlugin) Reconcile(ctx context.Context, object client.Object, conf config.Config) error {
    20  	configMap, ok := object.(*corev1.ConfigMap)
    21  	if !ok {
    22  		return nil
    23  	}
    24  	configObject := configobject.NewFromConfigMap(*configMap)
    25  	return updateObject(ctx, configObject, conf)
    26  }
    27  
    28  type SecretWatcherPlugin struct{}
    29  
    30  func (secretWatcherPlugin SecretWatcherPlugin) Reconcile(ctx context.Context, object client.Object, conf config.Config) error {
    31  	secret, ok := object.(*corev1.Secret)
    32  	if !ok {
    33  		return nil
    34  	}
    35  	configObject := configobject.NewFromSecret(*secret)
    36  	return updateObject(ctx, configObject, conf)
    37  }
    38  
    39  func updateObject(ctx context.Context, configObject configobject.ConfigObject, conf config.Config) error {
    40  	log := ctrl.LoggerFrom(ctx)
    41  
    42  	selector, err := getSelectorForConfigObject(ctx, configObject, conf)
    43  	if err != nil {
    44  		log.Error(err, "failed to get selector for Secret")
    45  		return err
    46  	} else if selector == nil {
    47  		return nil // not a target
    48  	}
    49  
    50  	rootPath, err := conf.GetRootPath(ctx)
    51  	if err != nil {
    52  		log.Error(err, "failed to get host root path")
    53  		return err
    54  	}
    55  	if err = configObject.Update(selector.Directory, selector.Service, file.New(), passthrough.New(rootPath)); err != nil {
    56  		log.Error(err, "failed to update Secret")
    57  		return err
    58  	}
    59  	return nil
    60  }
    61  
    62  func getSelectorForConfigObject(ctx context.Context, configObject configobject.ConfigObject, conf config.Config) (*selector.Selector, error) {
    63  	thinclientConfiguration, err := conf.GetThinclientConfigMap(ctx)
    64  	if err != nil {
    65  		return nil, err
    66  	}
    67  	selectors, err := getSelectorsFromThinclientConfiguration(thinclientConfiguration)
    68  	if err != nil {
    69  		return nil, err
    70  	}
    71  	selectors, err = selectors.FilterByObjectType(configObject.ObjectType())
    72  	if err != nil {
    73  		return nil, err
    74  	}
    75  	selector, err := selectors.FindSelectorForConfigObject(configObject)
    76  	if err != nil {
    77  		return nil, err
    78  	}
    79  	return selector, nil
    80  }
    81  

View as plain text