diff --git a/pkg/asset/installconfig/platformprovisioncheck.go b/pkg/asset/installconfig/platformprovisioncheck.go index 9b6133bd7d1..8d34b3b7c5b 100644 --- a/pkg/asset/installconfig/platformprovisioncheck.go +++ b/pkg/asset/installconfig/platformprovisioncheck.go @@ -2,8 +2,12 @@ package installconfig import ( "context" + "errors" "fmt" + "k8s.io/apimachinery/pkg/util/sets" + + configv1 "github.com/openshift/api/config/v1" "github.com/openshift/installer/pkg/asset" alibabacloudconfig "github.com/openshift/installer/pkg/asset/installconfig/alibabacloud" awsconfig "github.com/openshift/installer/pkg/asset/installconfig/aws" @@ -51,6 +55,33 @@ func (a *PlatformProvisionCheck) Generate(dependencies asset.Parents) error { ic := &InstallConfig{} dependencies.Get(ic) platform := ic.Config.Platform.Name() + + // IPI requires MachineAPI capability + enabledCaps := sets.NewString() + if ic.Config.Capabilities == nil || ic.Config.Capabilities.BaselineCapabilitySet == "" { + // when Capabilities and/or BaselineCapabilitySet is not specified, default is vCurrent + baseSet := configv1.ClusterVersionCapabilitySets[configv1.ClusterVersionCapabilitySetCurrent] + for _, cap := range baseSet { + enabledCaps.Insert(string(cap)) + } + } + if ic.Config.Capabilities != nil { + if ic.Config.Capabilities.BaselineCapabilitySet != "" { + baseSet := configv1.ClusterVersionCapabilitySets[ic.Config.Capabilities.BaselineCapabilitySet] + for _, cap := range baseSet { + enabledCaps.Insert(string(cap)) + } + } + if ic.Config.Capabilities.AdditionalEnabledCapabilities != nil { + for _, cap := range ic.Config.Capabilities.AdditionalEnabledCapabilities { + enabledCaps.Insert(string(cap)) + } + } + } + if !enabledCaps.Has(string(configv1.ClusterVersionCapabilityMachineAPI)) { + return errors.New("IPI requires MachineAPI capability") + } + switch platform { case aws.Name: session, err := ic.AWS.Session(context.TODO())