github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/core/adapt.go (about) 1 package core 2 3 import ( 4 "fmt" 5 6 "gopkg.in/yaml.v3" 7 8 "github.com/caos/orbos/mntr" 9 "github.com/caos/orbos/pkg/git" 10 "github.com/caos/orbos/pkg/kubernetes" 11 "github.com/caos/orbos/pkg/kubernetes/resources" 12 "github.com/caos/orbos/pkg/secret" 13 "github.com/caos/orbos/pkg/tree" 14 ) 15 16 type AdaptFunc func( 17 monitor mntr.Monitor, 18 desired *tree.Tree, 19 current *tree.Tree, 20 ) ( 21 QueryFunc, 22 DestroyFunc, 23 map[string]*secret.Secret, 24 map[string]*secret.Existing, 25 bool, 26 error, 27 ) 28 29 type EnsureFunc func(k8sClient kubernetes.ClientInt) error 30 31 type DestroyFunc func(k8sClient kubernetes.ClientInt) error 32 33 type QueryFunc func(k8sClient kubernetes.ClientInt, queried map[string]interface{}) (EnsureFunc, error) 34 35 func Parse(gitClient *git.Client, file string) (*tree.Tree, error) { 36 if err := gitClient.Clone(); err != nil { 37 return nil, err 38 } 39 40 tree := &tree.Tree{} 41 if err := yaml.Unmarshal(gitClient.Read(file), tree); err != nil { 42 return nil, err 43 } 44 45 return tree, nil 46 } 47 48 func ResourceDestroyToZitadelDestroy(destroyFunc resources.DestroyFunc) DestroyFunc { 49 return func(k8sClient kubernetes.ClientInt) error { 50 return destroyFunc(k8sClient) 51 } 52 } 53 54 func ResourceQueryToZitadelQuery(queryFunc resources.QueryFunc) QueryFunc { 55 return func(k8sClient kubernetes.ClientInt, queried map[string]interface{}) (EnsureFunc, error) { 56 ensure, err := queryFunc(k8sClient, queried) 57 ensureInternal := ResourceEnsureToZitadelEnsure(ensure) 58 59 return func(k8sClient kubernetes.ClientInt) error { 60 return ensureInternal(k8sClient) 61 }, err 62 } 63 } 64 65 func ResourceEnsureToZitadelEnsure(ensureFunc resources.EnsureFunc) EnsureFunc { 66 return func(k8sClient kubernetes.ClientInt) error { 67 return ensureFunc(k8sClient) 68 } 69 } 70 func EnsureFuncToQueryFunc(ensure EnsureFunc) QueryFunc { 71 return func(k8sClient kubernetes.ClientInt, queried map[string]interface{}) (ensureFunc EnsureFunc, err error) { 72 return ensure, err 73 } 74 } 75 76 func QueriersToEnsureFunc(monitor mntr.Monitor, infoLogs bool, queriers []QueryFunc, k8sClient kubernetes.ClientInt, queried map[string]interface{}) (EnsureFunc, error) { 77 if infoLogs { 78 monitor.Info("querying...") 79 } else { 80 monitor.Debug("querying...") 81 } 82 ensurers := make([]EnsureFunc, 0) 83 for _, querier := range queriers { 84 ensurer, err := querier(k8sClient, queried) 85 if err != nil { 86 return nil, fmt.Errorf("error while querying:_%w", err) 87 } 88 ensurers = append(ensurers, ensurer) 89 } 90 if infoLogs { 91 monitor.Info("queried") 92 } else { 93 monitor.Debug("queried") 94 } 95 return func(k8sClient kubernetes.ClientInt) error { 96 if infoLogs { 97 monitor.Info("ensuring...") 98 } else { 99 monitor.Debug("ensuring...") 100 } 101 for _, ensurer := range ensurers { 102 if err := ensurer(k8sClient); err != nil { 103 return fmt.Errorf("error while ensuring: %w", err) 104 } 105 } 106 if infoLogs { 107 monitor.Info("ensured") 108 } else { 109 monitor.Debug("ensured") 110 } 111 return nil 112 }, nil 113 } 114 115 func DestroyersToDestroyFunc(monitor mntr.Monitor, destroyers []DestroyFunc) DestroyFunc { 116 return func(k8sClient kubernetes.ClientInt) error { 117 monitor.Info("destroying...") 118 for _, destroyer := range destroyers { 119 if err := destroyer(k8sClient); err != nil { 120 return fmt.Errorf("error while destroying: %w", err) 121 } 122 } 123 monitor.Info("destroyed") 124 return nil 125 } 126 }