github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/orbiter/kinds/providers/providers.go (about) 1 package providers 2 3 import ( 4 "fmt" 5 6 "github.com/caos/orbos/pkg/secret" 7 8 "github.com/caos/orbos/internal/operator/orbiter/kinds/providers/cs" 9 10 "github.com/caos/orbos/internal/operator/orbiter/kinds/clusters/core/infra" 11 12 "github.com/caos/orbos/internal/operator/orbiter" 13 "github.com/caos/orbos/internal/operator/orbiter/kinds/providers/gce" 14 "github.com/caos/orbos/internal/operator/orbiter/kinds/providers/static" 15 "github.com/caos/orbos/mntr" 16 "github.com/caos/orbos/pkg/tree" 17 ) 18 19 func GetQueryAndDestroyFuncs( 20 monitor mntr.Monitor, 21 provID string, 22 providerTree *tree.Tree, 23 providerCurrent *tree.Tree, 24 whitelistChan chan []*orbiter.CIDR, 25 finishedChan chan struct{}, 26 orbiterCommit, orbID, repoURL, repoKey string, 27 oneoff bool, 28 pprof bool, 29 ) ( 30 orbiter.QueryFunc, 31 orbiter.DestroyFunc, 32 orbiter.ConfigureFunc, 33 bool, 34 map[string]*secret.Secret, 35 error, 36 ) { 37 38 monitor = monitor.WithFields(map[string]interface{}{"provider": provID}) 39 40 wlFunc := func() []*orbiter.CIDR { 41 monitor.Debug("Reading whitelist") 42 wl := <-whitelistChan 43 return wl 44 } 45 46 switch providerTree.Common.Kind { 47 case "orbiter.caos.ch/GCEProvider": 48 return gce.AdaptFunc( 49 provID, 50 orbID, 51 wlFunc, 52 orbiterCommit, repoURL, repoKey, 53 oneoff, 54 pprof, 55 )( 56 monitor, 57 finishedChan, 58 providerTree, 59 providerCurrent, 60 ) 61 case "orbiter.caos.ch/CloudScaleProvider": 62 return cs.AdaptFunc( 63 provID, 64 orbID, 65 wlFunc, 66 orbiterCommit, repoURL, repoKey, 67 oneoff, 68 pprof, 69 )( 70 monitor, 71 finishedChan, 72 providerTree, 73 providerCurrent, 74 ) 75 case "orbiter.caos.ch/StaticProvider": 76 return static.AdaptFunc( 77 provID, 78 wlFunc, 79 orbiterCommit, 80 repoURL, 81 repoKey, 82 pprof, 83 )( 84 monitor.WithFields(map[string]interface{}{"provider": provID}), 85 finishedChan, 86 providerTree, 87 providerCurrent) 88 default: 89 return nil, nil, nil, false, nil, mntr.ToUserError(fmt.Errorf("unknown provider kind %s", providerTree.Common.Kind)) 90 } 91 } 92 93 func ListMachines( 94 monitor mntr.Monitor, 95 providerTree *tree.Tree, 96 provID string, 97 orbID string, 98 ) ( 99 map[string]infra.Machine, 100 error, 101 ) { 102 103 switch providerTree.Common.Kind { 104 case "orbiter.caos.ch/GCEProvider": 105 return gce.ListMachines( 106 monitor, 107 providerTree, 108 orbID, 109 provID, 110 ) 111 case "orbiter.caos.ch/CloudScaleProvider": 112 return cs.ListMachines( 113 monitor, 114 providerTree, 115 orbID, 116 provID, 117 ) 118 case "orbiter.caos.ch/StaticProvider": 119 return static.ListMachines( 120 monitor, 121 providerTree, 122 provID, 123 ) 124 default: 125 return nil, mntr.ToUserError(fmt.Errorf("unknown provider kind %s", providerTree.Common.Kind)) 126 } 127 }