diff --git a/Dockerfile.assisted-service b/Dockerfile.assisted-service index 725882b300..7eef8740f4 100644 --- a/Dockerfile.assisted-service +++ b/Dockerfile.assisted-service @@ -22,7 +22,7 @@ COPY . . RUN CGO_ENABLED=1 GOFLAGS="" GO111MODULE=on go build -o /build/assisted-service cmd/main.go RUN CGO_ENABLED=0 GOFLAGS="" GO111MODULE=on go build -o /build/assisted-service-operator cmd/operator/main.go -FROM quay.io/ocpmetal/oc-image:bug-1823143 as oc-image +FROM quay.io/ocpmetal/oc-image:bug-1823143-multi-arch as oc-image # Create final image FROM quay.io/centos/centos:stream8 diff --git a/internal/bminventory/inventory.go b/internal/bminventory/inventory.go index e0983ebc73..08505a5da6 100644 --- a/internal/bminventory/inventory.go +++ b/internal/bminventory/inventory.go @@ -665,6 +665,10 @@ func (b *bareMetalInventory) getNewClusterCPUArchitecture(newClusterParams *mode return common.DefaultCPUArchitecture, nil } + if !swag.BoolValue(newClusterParams.UserManagedNetworking) { + return "", errors.Errorf("Non x86_64 CPU architectures are supported only with User Managed Networking") + } + cpuArchitectures, err := b.versionsHandler.GetCPUArchitectures(*newClusterParams.OpenshiftVersion) if err != nil { return "", err diff --git a/internal/bminventory/inventory_test.go b/internal/bminventory/inventory_test.go index c0f72dad97..5f63519923 100644 --- a/internal/bminventory/inventory_test.go +++ b/internal/bminventory/inventory_test.go @@ -8751,10 +8751,12 @@ var _ = Describe("TestRegisterCluster", func() { reply := bm.RegisterCluster(ctx, installer.RegisterClusterParams{ NewClusterParams: &models.ClusterCreateParams{ - Name: swag.String("some-cluster-name"), - OpenshiftVersion: swag.String(common.TestDefaultConfig.OpenShiftVersion), - CPUArchitecture: "arm64", - PullSecret: swag.String("{\"auths\":{\"cloud.openshift.com\":{\"auth\":\"dG9rZW46dGVzdAo=\",\"email\":\"coyote@acme.com\"}}}"), + Name: swag.String("some-cluster-name"), + OpenshiftVersion: swag.String(common.TestDefaultConfig.OpenShiftVersion), + CPUArchitecture: "arm64", + UserManagedNetworking: swag.Bool(true), + VipDhcpAllocation: swag.Bool(false), + PullSecret: swag.String("{\"auths\":{\"cloud.openshift.com\":{\"auth\":\"dG9rZW46dGVzdAo=\",\"email\":\"coyote@acme.com\"}}}"), }, }) Expect(reflect.TypeOf(reply)).Should(Equal(reflect.TypeOf(installer.NewRegisterClusterCreated()))) @@ -8762,6 +8764,19 @@ var _ = Describe("TestRegisterCluster", func() { Expect(actual.Payload.CPUArchitecture).To(Equal("arm64")) }) + It("Register cluster with arm64 CPU architecture - without UserManagedNetworking", func() { + reply := bm.RegisterCluster(ctx, installer.RegisterClusterParams{ + NewClusterParams: &models.ClusterCreateParams{ + Name: swag.String("some-cluster-name"), + OpenshiftVersion: swag.String(common.TestDefaultConfig.OpenShiftVersion), + CPUArchitecture: "arm64", + UserManagedNetworking: swag.Bool(false), + PullSecret: swag.String("{\"auths\":{\"cloud.openshift.com\":{\"auth\":\"dG9rZW46dGVzdAo=\",\"email\":\"coyote@acme.com\"}}}"), + }, + }) + Expect(reply).Should(BeAssignableToTypeOf(common.NewApiError(http.StatusBadRequest, errors.Errorf("error")))) + }) + It("Register cluster without specified CPU architecture", func() { mockClusterRegisterSuccess(bm, true) mockAMSSubscription(ctx) diff --git a/internal/ignition/dummy.go b/internal/ignition/dummy.go index 048ae3b826..638ab14075 100644 --- a/internal/ignition/dummy.go +++ b/internal/ignition/dummy.go @@ -32,7 +32,7 @@ func NewDummyGenerator(workDir string, cluster *common.Cluster, s3Client s3wrapp } // Generate creates the expected ignition and related files but with nonsense content -func (g *dummyGenerator) Generate(_ context.Context, installConfig []byte) error { +func (g *dummyGenerator) Generate(_ context.Context, installConfig []byte, platformType models.PlatformType) error { installConfigPath := filepath.Join(g.workDir, "install-config.yaml") err := ioutil.WriteFile(installConfigPath, installConfig, 0600) if err != nil { diff --git a/internal/ignition/ignition.go b/internal/ignition/ignition.go index 34ded0f744..b18ae4a92d 100644 --- a/internal/ignition/ignition.go +++ b/internal/ignition/ignition.go @@ -311,7 +311,7 @@ var fileNames = [...]string{ // Generator can generate ignition files and upload them to an S3-like service type Generator interface { - Generate(ctx context.Context, installConfig []byte) error + Generate(ctx context.Context, installConfig []byte, platformType models.PlatformType) error UploadToS3(ctx context.Context) error UpdateEtcHosts(string) error } @@ -389,10 +389,10 @@ func (g *installerGenerator) UploadToS3(ctx context.Context) error { } // Generate generates ignition files and applies modifications. -func (g *installerGenerator) Generate(ctx context.Context, installConfig []byte) error { +func (g *installerGenerator) Generate(ctx context.Context, installConfig []byte, platformType models.PlatformType) error { log := logutil.FromContext(ctx, g.log) installerPath, err := installercache.Get(g.releaseImage, g.releaseImageMirror, g.installerDir, - g.cluster.PullSecret, log) + g.cluster.PullSecret, platformType, log) if err != nil { return errors.Wrap(err, "failed to get installer path") } diff --git a/internal/ignition/mock_ignition.go b/internal/ignition/mock_ignition.go index 6d5c116899..89a094b692 100644 --- a/internal/ignition/mock_ignition.go +++ b/internal/ignition/mock_ignition.go @@ -10,6 +10,7 @@ import ( gomock "github.com/golang/mock/gomock" common "github.com/openshift/assisted-service/internal/common" + models "github.com/openshift/assisted-service/models" auth "github.com/openshift/assisted-service/pkg/auth" ) @@ -37,17 +38,17 @@ func (m *MockGenerator) EXPECT() *MockGeneratorMockRecorder { } // Generate mocks base method. -func (m *MockGenerator) Generate(ctx context.Context, installConfig []byte) error { +func (m *MockGenerator) Generate(ctx context.Context, installConfig []byte, platformType models.PlatformType) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Generate", ctx, installConfig) + ret := m.ctrl.Call(m, "Generate", ctx, installConfig, platformType) ret0, _ := ret[0].(error) return ret0 } // Generate indicates an expected call of Generate. -func (mr *MockGeneratorMockRecorder) Generate(ctx, installConfig interface{}) *gomock.Call { +func (mr *MockGeneratorMockRecorder) Generate(ctx, installConfig, platformType interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Generate", reflect.TypeOf((*MockGenerator)(nil).Generate), ctx, installConfig) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Generate", reflect.TypeOf((*MockGenerator)(nil).Generate), ctx, installConfig, platformType) } // UpdateEtcHosts mocks base method. diff --git a/internal/installercache/installercache.go b/internal/installercache/installercache.go index 1b3fa9bb2b..bf6b94c943 100644 --- a/internal/installercache/installercache.go +++ b/internal/installercache/installercache.go @@ -4,6 +4,7 @@ import ( "sync" "github.com/openshift/assisted-service/internal/oc" + "github.com/openshift/assisted-service/models" "github.com/openshift/assisted-service/pkg/executer" "github.com/sirupsen/logrus" ) @@ -38,7 +39,7 @@ func (i *installers) Get(releaseID string) *release { // Get returns the path to an openshift-baremetal-install binary extracted from // the referenced release image. Tries the mirror release image first if it's set. It is safe for concurrent use. A cache of // binaries is maintained to reduce re-downloading of the same release. -func Get(releaseID, releaseIDMirror, cacheDir, pullSecret string, log logrus.FieldLogger) (string, error) { +func Get(releaseID, releaseIDMirror, cacheDir, pullSecret string, platformType models.PlatformType, log logrus.FieldLogger) (string, error) { r := cache.Get(releaseID) r.Lock() defer r.Unlock() @@ -48,7 +49,7 @@ func Get(releaseID, releaseIDMirror, cacheDir, pullSecret string, log logrus.Fie //cache miss if r.path == "" { path, err = oc.NewRelease(&executer.CommonExecuter{}, oc.Config{ - MaxTries: oc.DefaultTries, RetryDelay: oc.DefaltRetryDelay}).Extract(log, releaseID, releaseIDMirror, cacheDir, pullSecret) + MaxTries: oc.DefaultTries, RetryDelay: oc.DefaltRetryDelay}).Extract(log, releaseID, releaseIDMirror, cacheDir, pullSecret, platformType) if err != nil { return "", err } diff --git a/internal/oc/mock_release.go b/internal/oc/mock_release.go index f9e3736b48..f21240e1e7 100644 --- a/internal/oc/mock_release.go +++ b/internal/oc/mock_release.go @@ -8,6 +8,7 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" + models "github.com/openshift/assisted-service/models" logrus "github.com/sirupsen/logrus" ) @@ -35,18 +36,18 @@ func (m *MockRelease) EXPECT() *MockReleaseMockRecorder { } // Extract mocks base method. -func (m *MockRelease) Extract(log logrus.FieldLogger, releaseImage, releaseImageMirror, cacheDir, pullSecret string) (string, error) { +func (m *MockRelease) Extract(log logrus.FieldLogger, releaseImage, releaseImageMirror, cacheDir, pullSecret string, platformType models.PlatformType) (string, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Extract", log, releaseImage, releaseImageMirror, cacheDir, pullSecret) + ret := m.ctrl.Call(m, "Extract", log, releaseImage, releaseImageMirror, cacheDir, pullSecret, platformType) ret0, _ := ret[0].(string) ret1, _ := ret[1].(error) return ret0, ret1 } // Extract indicates an expected call of Extract. -func (mr *MockReleaseMockRecorder) Extract(log, releaseImage, releaseImageMirror, cacheDir, pullSecret interface{}) *gomock.Call { +func (mr *MockReleaseMockRecorder) Extract(log, releaseImage, releaseImageMirror, cacheDir, pullSecret, platformType interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Extract", reflect.TypeOf((*MockRelease)(nil).Extract), log, releaseImage, releaseImageMirror, cacheDir, pullSecret) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Extract", reflect.TypeOf((*MockRelease)(nil).Extract), log, releaseImage, releaseImageMirror, cacheDir, pullSecret, platformType) } // GetMCOImage mocks base method. diff --git a/internal/oc/release.go b/internal/oc/release.go index fcf45cd888..320b1fbff4 100644 --- a/internal/oc/release.go +++ b/internal/oc/release.go @@ -9,6 +9,7 @@ import ( "time" "github.com/hashicorp/go-version" + "github.com/openshift/assisted-service/models" "github.com/openshift/assisted-service/pkg/executer" "github.com/sirupsen/logrus" "github.com/thedevsaddam/retry" @@ -32,7 +33,7 @@ type Release interface { GetMustGatherImage(log logrus.FieldLogger, releaseImage string, releaseImageMirror string, pullSecret string) (string, error) GetOpenshiftVersion(log logrus.FieldLogger, releaseImage string, releaseImageMirror string, pullSecret string) (string, error) GetMajorMinorVersion(log logrus.FieldLogger, releaseImage string, releaseImageMirror string, pullSecret string) (string, error) - Extract(log logrus.FieldLogger, releaseImage string, releaseImageMirror string, cacheDir string, pullSecret string) (string, error) + Extract(log logrus.FieldLogger, releaseImage string, releaseImageMirror string, cacheDir string, pullSecret string, platformType models.PlatformType) (string, error) } type release struct { @@ -50,7 +51,7 @@ func NewRelease(executer executer.Executer, config Config) Release { const ( templateGetImage = "oc adm release info --image-for=%s --insecure=%t %s" templateGetVersion = "oc adm release info -o template --template '{{.metadata.version}}' --insecure=%t %s" - templateExtract = "oc adm release extract --command=openshift-baremetal-install --to=%s --insecure=%t %s" + templateExtract = "oc adm release extract --command=%s --to=%s --insecure=%t %s" ) // GetMCOImage gets mcoImage url from the releaseImageMirror if provided. @@ -158,7 +159,7 @@ func (r *release) getOpenshiftVersionFromRelease(log logrus.FieldLogger, release // Extract openshift-baremetal-install binary from releaseImageMirror if provided. // Else extract from the source releaseImage -func (r *release) Extract(log logrus.FieldLogger, releaseImage string, releaseImageMirror string, cacheDir string, pullSecret string) (string, error) { +func (r *release) Extract(log logrus.FieldLogger, releaseImage string, releaseImageMirror string, cacheDir string, pullSecret string, platformType models.PlatformType) (string, error) { var path string var err error if releaseImage == "" && releaseImageMirror == "" { @@ -166,13 +167,13 @@ func (r *release) Extract(log logrus.FieldLogger, releaseImage string, releaseIm } if releaseImageMirror != "" { //TODO: Get mirror registry certificate from install-config - path, err = r.extractFromRelease(log, releaseImageMirror, cacheDir, pullSecret, true) + path, err = r.extractFromRelease(log, releaseImageMirror, cacheDir, pullSecret, true, platformType) if err != nil { log.WithError(err).Errorf("failed to extract openshift-baremetal-install from mirror release image %s", releaseImageMirror) return "", err } } else { - path, err = r.extractFromRelease(log, releaseImage, cacheDir, pullSecret, false) + path, err = r.extractFromRelease(log, releaseImage, cacheDir, pullSecret, false, platformType) if err != nil { log.WithError(err).Errorf("failed to extract openshift-baremetal-install from release image %s", releaseImageMirror) return "", err @@ -183,22 +184,29 @@ func (r *release) Extract(log logrus.FieldLogger, releaseImage string, releaseIm // extractFromRelease returns the path to an openshift-baremetal-install binary extracted from // the referenced release image. -func (r *release) extractFromRelease(log logrus.FieldLogger, releaseImage, cacheDir, pullSecret string, insecure bool) (string, error) { +func (r *release) extractFromRelease(log logrus.FieldLogger, releaseImage, cacheDir, pullSecret string, insecure bool, platformType models.PlatformType) (string, error) { + var binary string + if platformType == models.PlatformTypeNone { + binary = "openshift-install" + } else { + binary = "openshift-baremetal-install" + } + workdir := filepath.Join(cacheDir, releaseImage) - log.Infof("extracting openshift-baremetal-install binary to %s", workdir) + log.Infof("extracting %s binary to %s", binary, workdir) err := os.MkdirAll(workdir, 0755) if err != nil { return "", err } - cmd := fmt.Sprintf(templateExtract, workdir, insecure, releaseImage) + cmd := fmt.Sprintf(templateExtract, binary, workdir, insecure, releaseImage) _, err = retry.Do(r.config.MaxTries, r.config.RetryDelay, execute, log, r.executer, pullSecret, cmd) if err != nil { return "", err } // set path - path := filepath.Join(workdir, "openshift-baremetal-install") - log.Info("Successfully extracted openshift-baremetal-install binary from the release to: $s", path) + path := filepath.Join(workdir, binary) + log.Info("Successfully extracted $s binary from the release to: $s", binary, path) return path, nil } diff --git a/internal/oc/release_test.go b/internal/oc/release_test.go index a4c8fb8fde..c19cafbc27 100644 --- a/internal/oc/release_test.go +++ b/internal/oc/release_test.go @@ -11,19 +11,22 @@ import ( gomock "github.com/golang/mock/gomock" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" + "github.com/openshift/assisted-service/models" "github.com/openshift/assisted-service/pkg/executer" logrus "github.com/sirupsen/logrus" ) var ( - log = logrus.New() - releaseImage = "release_image" - releaseImageMirror = "release_image_mirror" - cacheDir = "/tmp" - pullSecret = "pull secret" - fullVersion = "4.6.0-0.nightly-2020-08-31-220837" - mcoImage = "mco_image" - mustGatherImage = "must_gather_image" + log = logrus.New() + releaseImage = "release_image" + releaseImageMirror = "release_image_mirror" + cacheDir = "/tmp" + pullSecret = "pull secret" + fullVersion = "4.6.0-0.nightly-2020-08-31-220837" + mcoImage = "mco_image" + mustGatherImage = "must_gather_image" + baremetalInstallBinary = "openshift-baremetal-install" + installBinary = "openshift-install" ) var _ = Describe("oc", func() { @@ -257,56 +260,68 @@ var _ = Describe("oc", func() { Context("Extract", func() { It("extract baremetal-install from release image", func() { command := fmt.Sprintf(templateExtract+" --registry-config=%s", - filepath.Join(cacheDir, releaseImage), false, releaseImage, tempFilePath) + baremetalInstallBinary, filepath.Join(cacheDir, releaseImage), false, releaseImage, tempFilePath) args := splitStringToInterfacesArray(command) mockExecuter.EXPECT().Execute(args[0], args[1:]...).Return("", "", 0).Times(1) - path, err := oc.Extract(log, releaseImage, "", cacheDir, pullSecret) - filePath := filepath.Join(cacheDir+"/"+releaseImage, "openshift-baremetal-install") + path, err := oc.Extract(log, releaseImage, "", cacheDir, pullSecret, models.PlatformTypeBaremetal) + filePath := filepath.Join(cacheDir+"/"+releaseImage, baremetalInstallBinary) Expect(path).To(Equal(filePath)) Expect(err).ShouldNot(HaveOccurred()) }) It("extract baremetal-install from release image mirror", func() { command := fmt.Sprintf(templateExtract+" --registry-config=%s", - filepath.Join(cacheDir, releaseImageMirror), true, releaseImageMirror, tempFilePath) + baremetalInstallBinary, filepath.Join(cacheDir, releaseImageMirror), true, releaseImageMirror, tempFilePath) args := splitStringToInterfacesArray(command) mockExecuter.EXPECT().Execute(args[0], args[1:]...).Return("", "", 0).Times(1) - path, err := oc.Extract(log, releaseImage, releaseImageMirror, cacheDir, pullSecret) - filePath := filepath.Join(cacheDir+"/"+releaseImageMirror, "openshift-baremetal-install") + path, err := oc.Extract(log, releaseImage, releaseImageMirror, cacheDir, pullSecret, models.PlatformTypeBaremetal) + filePath := filepath.Join(cacheDir+"/"+releaseImageMirror, baremetalInstallBinary) Expect(path).To(Equal(filePath)) Expect(err).ShouldNot(HaveOccurred()) }) It("extract baremetal-install with no release image or mirror", func() { - path, err := oc.Extract(log, "", "", cacheDir, pullSecret) + path, err := oc.Extract(log, "", "", cacheDir, pullSecret, models.PlatformTypeBaremetal) Expect(path).Should(BeEmpty()) Expect(err).Should(HaveOccurred()) }) It("extract baremetal-install from release image with retry", func() { command := fmt.Sprintf(templateExtract+" --registry-config=%s", - filepath.Join(cacheDir, releaseImage), false, releaseImage, tempFilePath) + baremetalInstallBinary, filepath.Join(cacheDir, releaseImage), false, releaseImage, tempFilePath) args := splitStringToInterfacesArray(command) mockExecuter.EXPECT().Execute(args[0], args[1:]...).Return("", "Failed to extract the installer", 1).Times(1) mockExecuter.EXPECT().Execute(args[0], args[1:]...).Return("", "", 0).Times(1) - path, err := oc.Extract(log, releaseImage, "", cacheDir, pullSecret) - filePath := filepath.Join(cacheDir+"/"+releaseImage, "openshift-baremetal-install") + path, err := oc.Extract(log, releaseImage, "", cacheDir, pullSecret, models.PlatformTypeBaremetal) + filePath := filepath.Join(cacheDir+"/"+releaseImage, baremetalInstallBinary) Expect(path).To(Equal(filePath)) Expect(err).ShouldNot(HaveOccurred()) }) It("extract baremetal-install from release image retry exhausted", func() { command := fmt.Sprintf(templateExtract+" --registry-config=%s", - filepath.Join(cacheDir, releaseImage), false, releaseImage, tempFilePath) + baremetalInstallBinary, filepath.Join(cacheDir, releaseImage), false, releaseImage, tempFilePath) args := splitStringToInterfacesArray(command) mockExecuter.EXPECT().Execute(args[0], args[1:]...).Return("", "Failed to extract the installer", 1).Times(5) - path, err := oc.Extract(log, releaseImage, "", cacheDir, pullSecret) + path, err := oc.Extract(log, releaseImage, "", cacheDir, pullSecret, models.PlatformTypeBaremetal) Expect(path).To(Equal("")) Expect(err).Should(HaveOccurred()) }) + + It("extract openshift-install from release image", func() { + command := fmt.Sprintf(templateExtract+" --registry-config=%s", + installBinary, filepath.Join(cacheDir, releaseImage), false, releaseImage, tempFilePath) + args := splitStringToInterfacesArray(command) + mockExecuter.EXPECT().Execute(args[0], args[1:]...).Return("", "", 0).Times(1) + + path, err := oc.Extract(log, releaseImage, "", cacheDir, pullSecret, models.PlatformTypeNone) + filePath := filepath.Join(cacheDir+"/"+releaseImage, installBinary) + Expect(path).To(Equal(filePath)) + Expect(err).ShouldNot(HaveOccurred()) + }) }) }) diff --git a/models/platform_type.go b/models/platform_type.go index 3f29a4c3e6..43667984b9 100644 --- a/models/platform_type.go +++ b/models/platform_type.go @@ -25,6 +25,9 @@ const ( // PlatformTypeVsphere captures enum value "vsphere" PlatformTypeVsphere PlatformType = "vsphere" + + // PlatformTypeNone captures enum value "none" + PlatformTypeNone PlatformType = "none" ) // for schema @@ -32,7 +35,7 @@ var platformTypeEnum []interface{} func init() { var res []PlatformType - if err := json.Unmarshal([]byte(`["baremetal","vsphere"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["baremetal","vsphere","none"]`), &res); err != nil { panic(err) } for _, v := range res { diff --git a/pkg/generator/generator.go b/pkg/generator/generator.go index 907d7aacd7..d0ee42f572 100644 --- a/pkg/generator/generator.go +++ b/pkg/generator/generator.go @@ -9,6 +9,7 @@ import ( "github.com/openshift/assisted-service/internal/common" "github.com/openshift/assisted-service/internal/ignition" "github.com/openshift/assisted-service/internal/operators" + "github.com/openshift/assisted-service/models" logutil "github.com/openshift/assisted-service/pkg/log" "github.com/openshift/assisted-service/pkg/s3wrapper" "github.com/sirupsen/logrus" @@ -91,7 +92,7 @@ func (k *installGenerator) GenerateInstallConfig(ctx context.Context, cluster co } else { generator = ignition.NewGenerator(clusterWorkDir, installerCacheDir, &cluster, releaseImage, k.Config.ReleaseImageMirror, k.Config.ServiceCACertPath, k.Config.InstallInvoker, k.s3Client, log, k.operatorsApi) } - err = generator.Generate(ctx, cfg) + err = generator.Generate(ctx, cfg, k.getClusterPlatformType(cluster)) if err != nil { return err } @@ -111,3 +112,12 @@ func (k *installGenerator) GenerateInstallConfig(ctx context.Context, cluster co return nil } + +func (k *installGenerator) getClusterPlatformType(cluster common.Cluster) models.PlatformType { + // Using platform type as an indication for which openshift install binary to use. + // I.e. None x86_64 clusters should use the openshift-install binary. + if cluster.CPUArchitecture != common.DefaultCPUArchitecture { + return models.PlatformTypeNone + } + return cluster.Platform.Type +} diff --git a/restapi/embedded_spec.go b/restapi/embedded_spec.go index d40574276c..acd95fbd4d 100644 --- a/restapi/embedded_spec.go +++ b/restapi/embedded_spec.go @@ -9982,7 +9982,8 @@ func init() { "type": "string", "enum": [ "baremetal", - "vsphere" + "vsphere", + "none" ] }, "preflight-hardware-requirements": { @@ -20401,7 +20402,8 @@ func init() { "type": "string", "enum": [ "baremetal", - "vsphere" + "vsphere", + "none" ] }, "preflight-hardware-requirements": { diff --git a/swagger.yaml b/swagger.yaml index 1c9926e94f..4d3d554fa0 100644 --- a/swagger.yaml +++ b/swagger.yaml @@ -6499,6 +6499,7 @@ definitions: enum: - baremetal - vsphere + - none memory_method: type: string