From 11dc0bcf5555caea832cda52f6c52b64590f6de6 Mon Sep 17 00:00:00 2001 From: Janos Pasztor Date: Mon, 4 Jan 2021 14:39:49 +0100 Subject: [PATCH 1/7] Added provider registry and base API structure --- pkg/externalprovider/const.go | 4 ++ pkg/externalprovider/provider/base.go | 7 +++ .../provider/defaultprovider/default.go | 6 +++ pkg/externalprovider/registry.go | 51 +++++++++++++++++++ pkg/externalprovider/simpleapi.go | 6 +++ 5 files changed, 74 insertions(+) create mode 100644 pkg/externalprovider/const.go create mode 100644 pkg/externalprovider/provider/base.go create mode 100644 pkg/externalprovider/provider/defaultprovider/default.go create mode 100644 pkg/externalprovider/registry.go create mode 100644 pkg/externalprovider/simpleapi.go diff --git a/pkg/externalprovider/const.go b/pkg/externalprovider/const.go new file mode 100644 index 00000000000..d2c8bf037db --- /dev/null +++ b/pkg/externalprovider/const.go @@ -0,0 +1,4 @@ +package externalprovider + +// Name is a const for convenience for external provider names. +type Name string diff --git a/pkg/externalprovider/provider/base.go b/pkg/externalprovider/provider/base.go new file mode 100644 index 00000000000..8bb50ac9601 --- /dev/null +++ b/pkg/externalprovider/provider/base.go @@ -0,0 +1,7 @@ +package provider + +// ExternalProvider is a provider that is not maintained by the core installer team. +type ExternalProvider interface { + // Name returns the name of the external provider. + Name() string +} diff --git a/pkg/externalprovider/provider/defaultprovider/default.go b/pkg/externalprovider/provider/defaultprovider/default.go new file mode 100644 index 00000000000..92344099247 --- /dev/null +++ b/pkg/externalprovider/provider/defaultprovider/default.go @@ -0,0 +1,6 @@ +package defaultprovider + +// DefaultProvider is a default implementation of most functions required by externalprovider.Provider. This struct +// should be embedded in all providers to make adding new APIs easier. +type DefaultProvider struct { +} diff --git a/pkg/externalprovider/registry.go b/pkg/externalprovider/registry.go new file mode 100644 index 00000000000..39e03e39163 --- /dev/null +++ b/pkg/externalprovider/registry.go @@ -0,0 +1,51 @@ +package externalprovider + +import ( + "errors" + + "github.com/openshift/installer/pkg/externalprovider/provider" +) + +// ErrNoSuchProvider is returned or thrown in panic when the specified provider is not registered. +var ErrNoSuchProvider = errors.New("no provider with the specified name registered") + +// Registry registers the providers to their names. +type Registry interface { + // Register registers a provider. + Register(provider provider.ExternalProvider) + // Get returns a provider registered to a name or ErrNoSuchProvider if the provider is not registered. + Get(name string) (provider.ExternalProvider, error) + // MustGet returns a provider registered to a name or throws a panic with ErrNoSuchProvider if the provider is not + // registered. + MustGet(name string) provider.ExternalProvider +} + +// NewRegistry creates a new copy of a Registry. +func NewRegistry() Registry { + return ®istry{ + providers: map[string]provider.ExternalProvider{}, + } +} + +type registry struct { + providers map[string]provider.ExternalProvider +} + +func (r *registry) Register(provider provider.ExternalProvider) { + r.providers[provider.Name()] = provider +} + +func (r *registry) Get(name string) (provider.ExternalProvider, error) { + if p, ok := r.providers[name]; ok { + return p, nil + } + return nil, ErrNoSuchProvider +} + +func (r *registry) MustGet(name string) provider.ExternalProvider { + p, err := r.Get(name) + if err != nil { + panic(err) + } + return p +} diff --git a/pkg/externalprovider/simpleapi.go b/pkg/externalprovider/simpleapi.go new file mode 100644 index 00000000000..1d2cb628336 --- /dev/null +++ b/pkg/externalprovider/simpleapi.go @@ -0,0 +1,6 @@ +package externalprovider + +var providerRegistry = NewRegistry() + +func init() { +} From 21c2ec8c0a1f1450da404083981b5c47d829a3a2 Mon Sep 17 00:00:00 2001 From: Janos Pasztor Date: Mon, 4 Jan 2021 14:42:29 +0100 Subject: [PATCH 2/7] Added oVirt as external provider --- pkg/externalprovider/const.go | 9 ++++++++ pkg/externalprovider/provider/ovirt/OWNERS | 7 ++++++ .../provider/ovirt/provider.go | 22 +++++++++++++++++++ pkg/externalprovider/simpleapi.go | 5 +++++ 4 files changed, 43 insertions(+) create mode 100644 pkg/externalprovider/provider/ovirt/OWNERS create mode 100644 pkg/externalprovider/provider/ovirt/provider.go diff --git a/pkg/externalprovider/const.go b/pkg/externalprovider/const.go index d2c8bf037db..3d844518446 100644 --- a/pkg/externalprovider/const.go +++ b/pkg/externalprovider/const.go @@ -1,4 +1,13 @@ package externalprovider +import ( + "github.com/openshift/installer/pkg/types/ovirt" +) + // Name is a const for convenience for external provider names. type Name string + +const ( + // NameOvirt is the name of the ovirt provider. + NameOvirt = Name(ovirt.Name) +) diff --git a/pkg/externalprovider/provider/ovirt/OWNERS b/pkg/externalprovider/provider/ovirt/OWNERS new file mode 100644 index 00000000000..0c8d12c37a6 --- /dev/null +++ b/pkg/externalprovider/provider/ovirt/OWNERS @@ -0,0 +1,7 @@ +# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md +# This file just uses aliases defined in OWNERS_ALIASES. + +approvers: + - ovirt-approvers +reviewers: + - ovirt-reviewers diff --git a/pkg/externalprovider/provider/ovirt/provider.go b/pkg/externalprovider/provider/ovirt/provider.go new file mode 100644 index 00000000000..01c82ff1bff --- /dev/null +++ b/pkg/externalprovider/provider/ovirt/provider.go @@ -0,0 +1,22 @@ +package ovirt + +import ( + "github.com/openshift/installer/pkg/externalprovider/provider" + "github.com/openshift/installer/pkg/externalprovider/provider/defaultprovider" + ovirttypes "github.com/openshift/installer/pkg/types/ovirt" +) + +// NewOvirtProvider creates a new oVirt provider. +func NewOvirtProvider() provider.ExternalProvider { + return &ovirtProvider{} +} + +// OvirtProvider +type ovirtProvider struct { + defaultprovider.DefaultProvider +} + +// Name returns the name of the provider +func (ovirt *ovirtProvider) Name() string { + return ovirttypes.Name +} diff --git a/pkg/externalprovider/simpleapi.go b/pkg/externalprovider/simpleapi.go index 1d2cb628336..195d93cb1bf 100644 --- a/pkg/externalprovider/simpleapi.go +++ b/pkg/externalprovider/simpleapi.go @@ -1,6 +1,11 @@ package externalprovider +import ( + "github.com/openshift/installer/pkg/externalprovider/provider/ovirt" +) + var providerRegistry = NewRegistry() func init() { + providerRegistry.Register(ovirt.NewOvirtProvider()) } From 8377ece88ff2fa01a52d48401350a96f4ea6cd57 Mon Sep 17 00:00:00 2001 From: Janos Pasztor Date: Mon, 4 Jan 2021 14:46:02 +0100 Subject: [PATCH 3/7] Implemented AddToInstallConfigPlatform API --- pkg/asset/installconfig/platform.go | 7 ++----- pkg/externalprovider/provider/base.go | 3 +++ .../provider/defaultprovider/default.go | 9 +++++++++ pkg/externalprovider/provider/installconfig.go | 11 +++++++++++ .../provider/ovirt/installconfig.go | 17 +++++++++++++++++ pkg/externalprovider/simpleapi.go | 10 ++++++++++ 6 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 pkg/externalprovider/provider/installconfig.go create mode 100644 pkg/externalprovider/provider/ovirt/installconfig.go diff --git a/pkg/asset/installconfig/platform.go b/pkg/asset/installconfig/platform.go index 0f40f1e4855..99a995b103b 100644 --- a/pkg/asset/installconfig/platform.go +++ b/pkg/asset/installconfig/platform.go @@ -15,8 +15,8 @@ import ( kubevirtconfig "github.com/openshift/installer/pkg/asset/installconfig/kubevirt" libvirtconfig "github.com/openshift/installer/pkg/asset/installconfig/libvirt" openstackconfig "github.com/openshift/installer/pkg/asset/installconfig/openstack" - ovirtconfig "github.com/openshift/installer/pkg/asset/installconfig/ovirt" vsphereconfig "github.com/openshift/installer/pkg/asset/installconfig/vsphere" + "github.com/openshift/installer/pkg/externalprovider" "github.com/openshift/installer/pkg/types" "github.com/openshift/installer/pkg/types/aws" "github.com/openshift/installer/pkg/types/azure" @@ -84,10 +84,7 @@ func (a *platform) Generate(asset.Parents) error { return err } case ovirt.Name: - a.Ovirt, err = ovirtconfig.Platform() - if err != nil { - return err - } + return externalprovider.AddToInstallConfigPlatform(externalprovider.NameOvirt, &a.Platform) case vsphere.Name: a.VSphere, err = vsphereconfig.Platform() if err != nil { diff --git a/pkg/externalprovider/provider/base.go b/pkg/externalprovider/provider/base.go index 8bb50ac9601..02e4dd7872a 100644 --- a/pkg/externalprovider/provider/base.go +++ b/pkg/externalprovider/provider/base.go @@ -4,4 +4,7 @@ package provider type ExternalProvider interface { // Name returns the name of the external provider. Name() string + + // InstallConfigExternalProvider contains the installconfig-specific steps. + InstallConfigExternalProvider } diff --git a/pkg/externalprovider/provider/defaultprovider/default.go b/pkg/externalprovider/provider/defaultprovider/default.go index 92344099247..2d3524549aa 100644 --- a/pkg/externalprovider/provider/defaultprovider/default.go +++ b/pkg/externalprovider/provider/defaultprovider/default.go @@ -1,6 +1,15 @@ package defaultprovider +import ( + "github.com/openshift/installer/pkg/types" +) + // DefaultProvider is a default implementation of most functions required by externalprovider.Provider. This struct // should be embedded in all providers to make adding new APIs easier. type DefaultProvider struct { } + +// AddToInstallConfigPlatform adds the current platform to the installconfig. +func (d *DefaultProvider) AddToInstallConfigPlatform(_ *types.Platform) error { + return nil +} diff --git a/pkg/externalprovider/provider/installconfig.go b/pkg/externalprovider/provider/installconfig.go new file mode 100644 index 00000000000..a185aa2a0ec --- /dev/null +++ b/pkg/externalprovider/provider/installconfig.go @@ -0,0 +1,11 @@ +package provider + +import ( + "github.com/openshift/installer/pkg/types" +) + +// InstallConfigExternalProvider describes the methods required for the installconfig asset. +type InstallConfigExternalProvider interface { + // AddToInstallConfigPlatform adds the current platform to the installconfig. + AddToInstallConfigPlatform(p *types.Platform) error +} diff --git a/pkg/externalprovider/provider/ovirt/installconfig.go b/pkg/externalprovider/provider/ovirt/installconfig.go new file mode 100644 index 00000000000..a7dad78cd5a --- /dev/null +++ b/pkg/externalprovider/provider/ovirt/installconfig.go @@ -0,0 +1,17 @@ +package ovirt + +import ( + ovirt2 "github.com/openshift/installer/pkg/asset/installconfig/ovirt" + "github.com/openshift/installer/pkg/types" +) + +func (ovirt *ovirtProvider) AddToInstallConfigPlatform( + p *types.Platform, +) error { + platform, err := ovirt2.Platform() + if err != nil { + return err + } + p.Ovirt = platform + return nil +} diff --git a/pkg/externalprovider/simpleapi.go b/pkg/externalprovider/simpleapi.go index 195d93cb1bf..abdd0298c61 100644 --- a/pkg/externalprovider/simpleapi.go +++ b/pkg/externalprovider/simpleapi.go @@ -2,6 +2,7 @@ package externalprovider import ( "github.com/openshift/installer/pkg/externalprovider/provider/ovirt" + "github.com/openshift/installer/pkg/types" ) var providerRegistry = NewRegistry() @@ -9,3 +10,12 @@ var providerRegistry = NewRegistry() func init() { providerRegistry.Register(ovirt.NewOvirtProvider()) } + +// AddToInstallConfigPlatform adds the current platform to the installconfig. +func AddToInstallConfigPlatform( + ProviderName Name, + p *types.Platform, +) error { + provider := providerRegistry.MustGet(string(ProviderName)) + return provider.AddToInstallConfigPlatform(p) +} From 40df377a1121f900a860e39ccfdf337177a3d460 Mon Sep 17 00:00:00 2001 From: Janos Pasztor Date: Mon, 4 Jan 2021 14:49:50 +0100 Subject: [PATCH 4/7] Implemented ValidateInstallConfig API --- pkg/asset/installconfig/installconfig.go | 10 ++++++++-- .../provider/defaultprovider/default.go | 13 ++++++++++++ .../provider/installconfig.go | 11 ++++++++++ .../provider/ovirt/installconfig.go | 12 +++++++++++ pkg/externalprovider/simpleapi.go | 20 +++++++++++++++++++ 5 files changed, 64 insertions(+), 2 deletions(-) diff --git a/pkg/asset/installconfig/installconfig.go b/pkg/asset/installconfig/installconfig.go index f281f77392d..2ea04702266 100644 --- a/pkg/asset/installconfig/installconfig.go +++ b/pkg/asset/installconfig/installconfig.go @@ -15,8 +15,8 @@ import ( icgcp "github.com/openshift/installer/pkg/asset/installconfig/gcp" ickubevirt "github.com/openshift/installer/pkg/asset/installconfig/kubevirt" icopenstack "github.com/openshift/installer/pkg/asset/installconfig/openstack" - icovirt "github.com/openshift/installer/pkg/asset/installconfig/ovirt" icvsphere "github.com/openshift/installer/pkg/asset/installconfig/vsphere" + "github.com/openshift/installer/pkg/externalprovider" "github.com/openshift/installer/pkg/types" "github.com/openshift/installer/pkg/types/conversion" "github.com/openshift/installer/pkg/types/defaults" @@ -190,7 +190,13 @@ func (a *InstallConfig) platformValidation() error { return icvsphere.Validate(a.Config) } if a.Config.Platform.Ovirt != nil { - return icovirt.Validate(a.Config) + return externalprovider.ValidateInstallConfig( + externalprovider.NameOvirt, + a.Config, + a.File, + a.AWS, + a.Azure, + ) } if a.Config.Platform.OpenStack != nil { return icopenstack.Validate(a.Config) diff --git a/pkg/externalprovider/provider/defaultprovider/default.go b/pkg/externalprovider/provider/defaultprovider/default.go index 2d3524549aa..5c8fff44a07 100644 --- a/pkg/externalprovider/provider/defaultprovider/default.go +++ b/pkg/externalprovider/provider/defaultprovider/default.go @@ -1,6 +1,9 @@ package defaultprovider import ( + "github.com/openshift/installer/pkg/asset" + "github.com/openshift/installer/pkg/asset/installconfig/aws" + "github.com/openshift/installer/pkg/asset/installconfig/azure" "github.com/openshift/installer/pkg/types" ) @@ -13,3 +16,13 @@ type DefaultProvider struct { func (d *DefaultProvider) AddToInstallConfigPlatform(_ *types.Platform) error { return nil } + +// ValidateInstallConfig validates the install config. +func (d *DefaultProvider) ValidateInstallConfig( + _ *types.InstallConfig, + _ *asset.File, + _ *aws.Metadata, + _ *azure.Metadata, +) error { + return nil +} diff --git a/pkg/externalprovider/provider/installconfig.go b/pkg/externalprovider/provider/installconfig.go index a185aa2a0ec..67cfa4e1fa3 100644 --- a/pkg/externalprovider/provider/installconfig.go +++ b/pkg/externalprovider/provider/installconfig.go @@ -1,6 +1,9 @@ package provider import ( + "github.com/openshift/installer/pkg/asset" + "github.com/openshift/installer/pkg/asset/installconfig/aws" + icazure "github.com/openshift/installer/pkg/asset/installconfig/azure" "github.com/openshift/installer/pkg/types" ) @@ -8,4 +11,12 @@ import ( type InstallConfigExternalProvider interface { // AddToInstallConfigPlatform adds the current platform to the installconfig. AddToInstallConfigPlatform(p *types.Platform) error + + // ValidateInstallConfig validates the install config. + ValidateInstallConfig( + Config *types.InstallConfig, + File *asset.File, + AWS *aws.Metadata, + Azure *icazure.Metadata, + ) error } diff --git a/pkg/externalprovider/provider/ovirt/installconfig.go b/pkg/externalprovider/provider/ovirt/installconfig.go index a7dad78cd5a..b557a25424e 100644 --- a/pkg/externalprovider/provider/ovirt/installconfig.go +++ b/pkg/externalprovider/provider/ovirt/installconfig.go @@ -1,6 +1,9 @@ package ovirt import ( + "github.com/openshift/installer/pkg/asset" + "github.com/openshift/installer/pkg/asset/installconfig/aws" + icazure "github.com/openshift/installer/pkg/asset/installconfig/azure" ovirt2 "github.com/openshift/installer/pkg/asset/installconfig/ovirt" "github.com/openshift/installer/pkg/types" ) @@ -15,3 +18,12 @@ func (ovirt *ovirtProvider) AddToInstallConfigPlatform( p.Ovirt = platform return nil } + +func (ovirt *ovirtProvider) ValidateInstallConfig( + Config *types.InstallConfig, + _ *asset.File, + _ *aws.Metadata, + _ *icazure.Metadata, +) error { + return ovirt2.Validate(Config) +} diff --git a/pkg/externalprovider/simpleapi.go b/pkg/externalprovider/simpleapi.go index abdd0298c61..d3767aafeb7 100644 --- a/pkg/externalprovider/simpleapi.go +++ b/pkg/externalprovider/simpleapi.go @@ -1,6 +1,9 @@ package externalprovider import ( + "github.com/openshift/installer/pkg/asset" + "github.com/openshift/installer/pkg/asset/installconfig/aws" + icazure "github.com/openshift/installer/pkg/asset/installconfig/azure" "github.com/openshift/installer/pkg/externalprovider/provider/ovirt" "github.com/openshift/installer/pkg/types" ) @@ -19,3 +22,20 @@ func AddToInstallConfigPlatform( provider := providerRegistry.MustGet(string(ProviderName)) return provider.AddToInstallConfigPlatform(p) } + +// ValidateInstallConfig validates the install config. +func ValidateInstallConfig( + ProviderName Name, + Config *types.InstallConfig, + File *asset.File, + AWS *aws.Metadata, + Azure *icazure.Metadata, +) error { + provider := providerRegistry.MustGet(string(ProviderName)) + return provider.ValidateInstallConfig( + Config, + File, + AWS, + Azure, + ) +} From 2253d8689bec35f46df8a25950d7a2e5f9dea51f Mon Sep 17 00:00:00 2001 From: Janos Pasztor Date: Mon, 4 Jan 2021 14:52:36 +0100 Subject: [PATCH 5/7] Implemented PlatformCredsCheck API --- pkg/asset/installconfig/platformcredscheck.go | 17 +++++++------- .../provider/defaultprovider/default.go | 10 +++++++++ .../provider/installconfig.go | 8 +++++++ .../provider/ovirt/installconfig.go | 22 +++++++++++++++++++ pkg/externalprovider/simpleapi.go | 17 ++++++++++++++ 5 files changed, 65 insertions(+), 9 deletions(-) diff --git a/pkg/asset/installconfig/platformcredscheck.go b/pkg/asset/installconfig/platformcredscheck.go index 2e0bbe73e38..485302d7df4 100644 --- a/pkg/asset/installconfig/platformcredscheck.go +++ b/pkg/asset/installconfig/platformcredscheck.go @@ -10,7 +10,7 @@ import ( gcpconfig "github.com/openshift/installer/pkg/asset/installconfig/gcp" kubevirtconfig "github.com/openshift/installer/pkg/asset/installconfig/kubevirt" openstackconfig "github.com/openshift/installer/pkg/asset/installconfig/openstack" - ovirtconfig "github.com/openshift/installer/pkg/asset/installconfig/ovirt" + "github.com/openshift/installer/pkg/externalprovider" "github.com/openshift/installer/pkg/types/aws" "github.com/openshift/installer/pkg/types/azure" "github.com/openshift/installer/pkg/types/baremetal" @@ -70,14 +70,13 @@ func (a *PlatformCredsCheck) Generate(dependencies asset.Parents) error { return errors.Wrap(err, "creating Azure session") } case ovirt.Name: - con, err := ovirtconfig.NewConnection() - if err != nil { - return errors.Wrap(err, "creating Engine connection") - } - err = con.Test() - if err != nil { - return errors.Wrap(err, "testing Engine connection") - } + return externalprovider.PlatformCredsCheck( + externalprovider.Name(ovirt.Name), + ic.Config, + ic.File, + ic.AWS, + ic.Azure, + ) case kubevirt.Name: client, err := kubevirtconfig.NewClient() if err != nil { diff --git a/pkg/externalprovider/provider/defaultprovider/default.go b/pkg/externalprovider/provider/defaultprovider/default.go index 5c8fff44a07..ebd7b468a95 100644 --- a/pkg/externalprovider/provider/defaultprovider/default.go +++ b/pkg/externalprovider/provider/defaultprovider/default.go @@ -26,3 +26,13 @@ func (d *DefaultProvider) ValidateInstallConfig( ) error { return nil } + +// PlatformCredsCheck validates the platform credentials. +func (d *DefaultProvider) PlatformCredsCheck( + _ *types.InstallConfig, + _ *asset.File, + _ *aws.Metadata, + _ *azure.Metadata, +) error { + return nil +} diff --git a/pkg/externalprovider/provider/installconfig.go b/pkg/externalprovider/provider/installconfig.go index 67cfa4e1fa3..5cebc937f0e 100644 --- a/pkg/externalprovider/provider/installconfig.go +++ b/pkg/externalprovider/provider/installconfig.go @@ -19,4 +19,12 @@ type InstallConfigExternalProvider interface { AWS *aws.Metadata, Azure *icazure.Metadata, ) error + + // PlatformCredsCheck validates the platform credentials. + PlatformCredsCheck( + Config *types.InstallConfig, + File *asset.File, + AWS *aws.Metadata, + Azure *icazure.Metadata, + ) error } diff --git a/pkg/externalprovider/provider/ovirt/installconfig.go b/pkg/externalprovider/provider/ovirt/installconfig.go index b557a25424e..e8b29c8e544 100644 --- a/pkg/externalprovider/provider/ovirt/installconfig.go +++ b/pkg/externalprovider/provider/ovirt/installconfig.go @@ -1,6 +1,8 @@ package ovirt import ( + "github.com/pkg/errors" + "github.com/openshift/installer/pkg/asset" "github.com/openshift/installer/pkg/asset/installconfig/aws" icazure "github.com/openshift/installer/pkg/asset/installconfig/azure" @@ -27,3 +29,23 @@ func (ovirt *ovirtProvider) ValidateInstallConfig( ) error { return ovirt2.Validate(Config) } + +func (ovirt *ovirtProvider) PlatformCredsCheck( + _ *types.InstallConfig, + _ *asset.File, + _ *aws.Metadata, + _ *icazure.Metadata, +) error { + con, err := ovirt2.NewConnection() + if err != nil { + return errors.Wrap(err, "creating Engine connection") + } + defer func() { + _ = con.Close() + }() + err = con.Test() + if err != nil { + return errors.Wrap(err, "testing Engine connection") + } + return nil +} diff --git a/pkg/externalprovider/simpleapi.go b/pkg/externalprovider/simpleapi.go index d3767aafeb7..e88fe9f4485 100644 --- a/pkg/externalprovider/simpleapi.go +++ b/pkg/externalprovider/simpleapi.go @@ -39,3 +39,20 @@ func ValidateInstallConfig( Azure, ) } + +// PlatformCredsCheck validates the platform credentials. +func PlatformCredsCheck( + ProviderName Name, + Config *types.InstallConfig, + File *asset.File, + AWS *aws.Metadata, + Azure *icazure.Metadata, +) error { + provider := providerRegistry.MustGet(string(ProviderName)) + return provider.PlatformCredsCheck( + Config, + File, + AWS, + Azure, + ) +} From 507eaea62803335a296e9e1dc8adb7b815fbf8f3 Mon Sep 17 00:00:00 2001 From: Janos Pasztor Date: Mon, 4 Jan 2021 14:54:20 +0100 Subject: [PATCH 6/7] Implemented PlatformPermsCheck API --- pkg/asset/installconfig/platformpermscheck.go | 11 ++++++++++- .../provider/defaultprovider/default.go | 10 ++++++++++ pkg/externalprovider/provider/installconfig.go | 8 ++++++++ pkg/externalprovider/simpleapi.go | 17 +++++++++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/pkg/asset/installconfig/platformpermscheck.go b/pkg/asset/installconfig/platformpermscheck.go index 46f2cb780d7..708977356de 100644 --- a/pkg/asset/installconfig/platformpermscheck.go +++ b/pkg/asset/installconfig/platformpermscheck.go @@ -9,6 +9,7 @@ import ( "github.com/openshift/installer/pkg/asset" awsconfig "github.com/openshift/installer/pkg/asset/installconfig/aws" gcpconfig "github.com/openshift/installer/pkg/asset/installconfig/gcp" + "github.com/openshift/installer/pkg/externalprovider" "github.com/openshift/installer/pkg/types/aws" "github.com/openshift/installer/pkg/types/azure" "github.com/openshift/installer/pkg/types/baremetal" @@ -84,7 +85,15 @@ func (a *PlatformPermsCheck) Generate(dependencies asset.Parents) error { if err = gcpconfig.ValidateEnabledServices(ctx, client, ic.Config.GCP.ProjectID); err != nil { return errors.Wrap(err, "failed to validate services in this project") } - case azure.Name, baremetal.Name, libvirt.Name, none.Name, openstack.Name, ovirt.Name, vsphere.Name, kubevirt.Name: + case ovirt.Name: + return externalprovider.PlatformPermsCheck( + externalprovider.Name(ovirt.Name), + ic.Config, + ic.File, + ic.AWS, + ic.Azure, + ) + case azure.Name, baremetal.Name, libvirt.Name, none.Name, openstack.Name, vsphere.Name, kubevirt.Name: // no permissions to check default: err = fmt.Errorf("unknown platform type %q", platform) diff --git a/pkg/externalprovider/provider/defaultprovider/default.go b/pkg/externalprovider/provider/defaultprovider/default.go index ebd7b468a95..c60259589a6 100644 --- a/pkg/externalprovider/provider/defaultprovider/default.go +++ b/pkg/externalprovider/provider/defaultprovider/default.go @@ -36,3 +36,13 @@ func (d *DefaultProvider) PlatformCredsCheck( ) error { return nil } + +// PlatformPermsCheck validates the platform permissions. +func (d *DefaultProvider) PlatformPermsCheck( + _ *types.InstallConfig, + _ *asset.File, + _ *aws.Metadata, + _ *azure.Metadata, +) error { + return nil +} diff --git a/pkg/externalprovider/provider/installconfig.go b/pkg/externalprovider/provider/installconfig.go index 5cebc937f0e..28660213fb1 100644 --- a/pkg/externalprovider/provider/installconfig.go +++ b/pkg/externalprovider/provider/installconfig.go @@ -27,4 +27,12 @@ type InstallConfigExternalProvider interface { AWS *aws.Metadata, Azure *icazure.Metadata, ) error + + // PlatformPermsCheck validates the platform permissions. + PlatformPermsCheck( + Config *types.InstallConfig, + File *asset.File, + AWS *aws.Metadata, + Azure *icazure.Metadata, + ) error } diff --git a/pkg/externalprovider/simpleapi.go b/pkg/externalprovider/simpleapi.go index e88fe9f4485..15206f0ddb6 100644 --- a/pkg/externalprovider/simpleapi.go +++ b/pkg/externalprovider/simpleapi.go @@ -56,3 +56,20 @@ func PlatformCredsCheck( Azure, ) } + +// PlatformPermsCheck validates the platform permissions. +func PlatformPermsCheck( + ProviderName Name, + Config *types.InstallConfig, + File *asset.File, + AWS *aws.Metadata, + Azure *icazure.Metadata, +) error { + provider := providerRegistry.MustGet(string(ProviderName)) + return provider.PlatformPermsCheck( + Config, + File, + AWS, + Azure, + ) +} From 00910741834db31eff7bba35ec72ac83228651d8 Mon Sep 17 00:00:00 2001 From: Janos Pasztor Date: Mon, 4 Jan 2021 14:55:43 +0100 Subject: [PATCH 7/7] Implemented PlatformProvisionCheck API --- .../installconfig/platformprovisioncheck.go | 11 ++++++++++- .../provider/defaultprovider/default.go | 10 ++++++++++ pkg/externalprovider/provider/installconfig.go | 8 ++++++++ pkg/externalprovider/simpleapi.go | 17 +++++++++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/pkg/asset/installconfig/platformprovisioncheck.go b/pkg/asset/installconfig/platformprovisioncheck.go index 28544ccb152..2b99596464c 100644 --- a/pkg/asset/installconfig/platformprovisioncheck.go +++ b/pkg/asset/installconfig/platformprovisioncheck.go @@ -9,6 +9,7 @@ import ( bmconfig "github.com/openshift/installer/pkg/asset/installconfig/baremetal" gcpconfig "github.com/openshift/installer/pkg/asset/installconfig/gcp" vsconfig "github.com/openshift/installer/pkg/asset/installconfig/vsphere" + "github.com/openshift/installer/pkg/externalprovider" "github.com/openshift/installer/pkg/types/aws" "github.com/openshift/installer/pkg/types/azure" "github.com/openshift/installer/pkg/types/baremetal" @@ -76,7 +77,15 @@ func (a *PlatformProvisionCheck) Generate(dependencies asset.Parents) error { if err != nil { return err } - case aws.Name, libvirt.Name, none.Name, openstack.Name, ovirt.Name, kubevirt.Name: + case ovirt.Name: + return externalprovider.PlatformProvisionCheck( + externalprovider.Name(ovirt.Name), + ic.Config, + ic.File, + ic.AWS, + ic.Azure, + ) + case aws.Name, libvirt.Name, none.Name, openstack.Name, kubevirt.Name: // no special provisioning requirements to check default: err = fmt.Errorf("unknown platform type %q", platform) diff --git a/pkg/externalprovider/provider/defaultprovider/default.go b/pkg/externalprovider/provider/defaultprovider/default.go index c60259589a6..675ac451629 100644 --- a/pkg/externalprovider/provider/defaultprovider/default.go +++ b/pkg/externalprovider/provider/defaultprovider/default.go @@ -46,3 +46,13 @@ func (d *DefaultProvider) PlatformPermsCheck( ) error { return nil } + +// PlatformProvisionCheck validates the if provisioning can commence on the platform. +func (d *DefaultProvider) PlatformProvisionCheck( + _ *types.InstallConfig, + _ *asset.File, + _ *aws.Metadata, + _ *azure.Metadata, +) error { + return nil +} diff --git a/pkg/externalprovider/provider/installconfig.go b/pkg/externalprovider/provider/installconfig.go index 28660213fb1..693fde9f8e1 100644 --- a/pkg/externalprovider/provider/installconfig.go +++ b/pkg/externalprovider/provider/installconfig.go @@ -35,4 +35,12 @@ type InstallConfigExternalProvider interface { AWS *aws.Metadata, Azure *icazure.Metadata, ) error + + // PlatformProvisionCheck validates the if provisioning can commence on the platform. + PlatformProvisionCheck( + Config *types.InstallConfig, + File *asset.File, + AWS *aws.Metadata, + Azure *icazure.Metadata, + ) error } diff --git a/pkg/externalprovider/simpleapi.go b/pkg/externalprovider/simpleapi.go index 15206f0ddb6..848471e772a 100644 --- a/pkg/externalprovider/simpleapi.go +++ b/pkg/externalprovider/simpleapi.go @@ -73,3 +73,20 @@ func PlatformPermsCheck( Azure, ) } + +// PlatformProvisionCheck validates the if provisioning can commence on the platform. +func PlatformProvisionCheck( + ProviderName Name, + Config *types.InstallConfig, + File *asset.File, + AWS *aws.Metadata, + Azure *icazure.Metadata, +) error { + provider := providerRegistry.MustGet(string(ProviderName)) + return provider.PlatformProvisionCheck( + Config, + File, + AWS, + Azure, + ) +}