github.com/jenkins-x/jx/v2@v2.1.155/pkg/cloud/factory/factory.go (about) 1 package factory 2 3 import ( 4 v1 "github.com/jenkins-x/jx-api/pkg/apis/jenkins.io/v1" 5 "github.com/jenkins-x/jx-logging/pkg/log" 6 "github.com/jenkins-x/jx/v2/pkg/cloud" 7 aksStorage "github.com/jenkins-x/jx/v2/pkg/cloud/aks/storage" 8 amazonStorage "github.com/jenkins-x/jx/v2/pkg/cloud/amazon/storage" 9 "github.com/jenkins-x/jx/v2/pkg/cloud/buckets" 10 "github.com/jenkins-x/jx/v2/pkg/cloud/gke/storage" 11 "github.com/jenkins-x/jx/v2/pkg/cmd/clients" 12 "github.com/jenkins-x/jx/v2/pkg/config" 13 "github.com/jenkins-x/jx/v2/pkg/errorutil" 14 "github.com/jenkins-x/jx/v2/pkg/kube" 15 "github.com/pkg/errors" 16 ) 17 18 // NewBucketProvider creates a new bucket provider for a given Kubernetes provider 19 func NewBucketProvider(requirements *config.RequirementsConfig) buckets.Provider { 20 switch requirements.Cluster.Provider { 21 case cloud.GKE: 22 return storage.NewGKEBucketProvider(requirements) 23 case cloud.EKS: 24 fallthrough 25 case cloud.AWS: 26 return amazonStorage.NewAmazonBucketProvider(requirements) 27 case cloud.AKS: 28 return aksStorage.NewAKSBucketProvider(requirements) 29 default: 30 // we have an implementation for GKE / EKS but not for AKS so we should fall back to default 31 // but we don't have every func implemented 32 return buckets.NewLegacyBucketProvider() 33 } 34 } 35 36 // NewBucketProviderFromTeamSettingsConfiguration returns a bucket provider based on the jx-requirements file embedded in TeamSettings 37 func NewBucketProviderFromTeamSettingsConfiguration(factory clients.Factory) (buckets.Provider, error) { 38 jxClient, ns, err := factory.CreateJXClient() 39 if err != nil { 40 return nil, err 41 } 42 teamSettings, err := kube.GetDevEnvTeamSettings(jxClient, ns) 43 if err != nil { 44 return nil, errors.Wrap(err, "error obtaining the dev environment teamSettings to select the correct bucket provider") 45 } 46 requirements, err := config.GetRequirementsConfigFromTeamSettings(teamSettings) 47 if err != nil || requirements == nil { 48 return nil, errorutil.CombineErrors(err, errors.New("error obtaining the requirements file to decide bucket provider")) 49 } 50 return NewBucketProvider(requirements), nil 51 } 52 53 // NewBucketProviderFromTeamSettingsConfigurationOrDefault returns a bucket provider based on the jx-requirements file embedded in TeamSettings 54 // or returns the default LegacyProvider and initializes it 55 func NewBucketProviderFromTeamSettingsConfigurationOrDefault(factory clients.Factory, storageLocation v1.StorageLocation) (buckets.Provider, error) { 56 provider, err1 := NewBucketProviderFromTeamSettingsConfiguration(factory) 57 if err1 != nil { 58 log.Logger().Warn("Could not obtain a valid provider, falling back to DefaultProvider") 59 provider = buckets.NewLegacyBucketProvider() 60 } 61 // LegacyBucketProvider is just here to keep backwards compatibility with non boot clusters, that's why we need to pass 62 // some configuration in a different way, it shouldn't be the norm for providers 63 if legacyProvider, ok := provider.(*buckets.LegacyBucketProvider); ok { 64 err := legacyProvider.Initialize(storageLocation.BucketURL, storageLocation.Classifier) 65 if err != nil { 66 return nil, errorutil.CombineErrors(err1, errors.Wrap(err, "there was a problem initializing the legacy bucket provider")) 67 } 68 return legacyProvider, nil 69 } 70 return provider, nil 71 }