...
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
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