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  }