Skip to content

Commit 60c1650

Browse files
Merge pull request #8161 from zaneb/baremetal-in-all-builds
CORS-3419,OCPBUGS-30941: Include baremetal IPI in openshift-installer
2 parents ebbbdb8 + 78a8275 commit 60c1650

File tree

7 files changed

+65
-94
lines changed

7 files changed

+65
-94
lines changed

pkg/destroy/baremetal/baremetal.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
//go:build baremetal
2-
// +build baremetal
3-
41
package baremetal
52

63
import (

pkg/destroy/baremetal/register.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
//go:build baremetal
2-
// +build baremetal
3-
41
// Package baremetal provides a cluster-destroyer for bare metal clusters.
52
package baremetal
63

pkg/types/baremetal/validation/libvirt.go

Lines changed: 8 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
//go:build baremetal
2-
// +build baremetal
3-
41
package validation
52

63
import (
@@ -9,53 +6,12 @@ import (
96
"strings"
107

118
libvirt "github.com/digitalocean/go-libvirt"
12-
"k8s.io/apimachinery/pkg/util/validation/field"
13-
14-
"github.com/openshift/installer/pkg/types/baremetal"
15-
"github.com/openshift/installer/pkg/validate"
9+
"github.com/sirupsen/logrus"
1610
)
1711

18-
func init() {
19-
dynamicProvisioningValidators = append(dynamicProvisioningValidators, validateInterfaces)
20-
}
21-
22-
// validateInterfaces ensures that any interfaces required by the platform exist on the libvirt host.
23-
func validateInterfaces(p *baremetal.Platform, fldPath *field.Path) field.ErrorList {
24-
errorList := field.ErrorList{}
25-
26-
findInterface, err := interfaceValidator(p.LibvirtURI)
27-
if err != nil {
28-
errorList = append(errorList, field.InternalError(fldPath.Child("libvirtURI"), err))
29-
return errorList
30-
}
31-
32-
if err := findInterface(p.ExternalBridge); err != nil {
33-
errorList = append(errorList, field.Invalid(fldPath.Child("externalBridge"), p.ExternalBridge, err.Error()))
34-
}
35-
36-
if err := validate.MAC(p.ExternalMACAddress); p.ExternalMACAddress != "" && err != nil {
37-
errorList = append(errorList, field.Invalid(fldPath.Child("externalMACAddress"), p.ExternalMACAddress, err.Error()))
38-
}
39-
40-
if err := findInterface(p.ProvisioningBridge); p.ProvisioningNetwork != baremetal.DisabledProvisioningNetwork && err != nil {
41-
errorList = append(errorList, field.Invalid(fldPath.Child("provisioningBridge"), p.ProvisioningBridge, err.Error()))
42-
}
43-
44-
if err := validate.MAC(p.ProvisioningMACAddress); p.ProvisioningMACAddress != "" && err != nil {
45-
errorList = append(errorList, field.Invalid(fldPath.Child("provisioningMACAddress"), p.ProvisioningMACAddress, err.Error()))
46-
}
47-
48-
if p.ProvisioningMACAddress != "" && strings.EqualFold(p.ProvisioningMACAddress, p.ExternalMACAddress) {
49-
errorList = append(errorList, field.Duplicate(fldPath.Child("provisioningMACAddress"), "provisioning and external MAC addresses may not be identical"))
50-
}
51-
52-
return errorList
53-
}
54-
55-
// interfaceValidator fetches the valid interface names from a particular libvirt instance, and returns a closure
12+
// libvirtInterfaceValidator fetches the valid interface names from a particular libvirt instance, and returns a closure
5613
// to validate if an interface is found among them
57-
58-
func interfaceValidator(libvirtURI string) (func(string) error, error) {
14+
func libvirtInterfaceValidator(libvirtURI string) (func(string) error, error) {
5915
// Connect to libvirt and obtain a list of interface names
6016
interfaces := make(map[string]struct{})
6117
var exists = struct{}{}
@@ -69,7 +25,11 @@ func interfaceValidator(libvirtURI string) (func(string) error, error) {
6925
if err != nil {
7026
return nil, err
7127
}
72-
defer virt.Disconnect()
28+
defer func() {
29+
if err := virt.Disconnect(); err != nil {
30+
logrus.Errorln("error disconnecting from libvirt:", err)
31+
}
32+
}()
7333

7434
networks, _, err := virt.ConnectListAllNetworks(1, libvirt.ConnectListNetworksActive)
7535
if err != nil {

pkg/types/baremetal/validation/platform.go

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,9 @@ import (
2626
"github.com/openshift/installer/pkg/validate"
2727
)
2828

29-
// dynamicProvisioningValidator is a function that validates certain fields in the platform.
30-
type dynamicProvisioningValidator func(*baremetal.Platform, *field.Path) field.ErrorList
29+
type interfaceValidatorFactory func(string) (func(string) error, error)
3130

32-
// dynamicProvisioningValidators is an array of dynamicProvisioningValidator functions. This array can be added to by an init function, and
33-
// is intended to be used for validations that require dependencies not built with the default tags, e.g. libvirt
34-
// libraries.
35-
var dynamicProvisioningValidators []dynamicProvisioningValidator
31+
var interfaceValidator interfaceValidatorFactory = libvirtInterfaceValidator
3632

3733
func validateIPinMachineCIDR(vip string, n *types.Networking) error {
3834
var networks []string
@@ -484,6 +480,8 @@ func ValidateProvisioning(p *baremetal.Platform, n *types.Networking, fldPath *f
484480

485481
allErrs = append(allErrs, ValidateProvisioningNetworking(p, n, fldPath)...)
486482

483+
allErrs = append(allErrs, validateProvisioningBootstrapNetworking(p, fldPath)...)
484+
487485
return allErrs
488486
}
489487

@@ -579,9 +577,41 @@ func ValidateProvisioningNetworking(p *baremetal.Platform, n *types.Networking,
579577

580578
allErrs = append(allErrs, validateHostsBMCOnly(p.Hosts, fldPath)...)
581579

582-
for _, validator := range dynamicProvisioningValidators {
583-
allErrs = append(allErrs, validator(p, fldPath)...)
580+
return allErrs
581+
}
582+
583+
// validateProvisioningBootstrapNetworking checks that provisioning network requirements specified is valid for the bootstrap VM.
584+
func validateProvisioningBootstrapNetworking(p *baremetal.Platform, fldPath *field.Path) field.ErrorList {
585+
errorList := field.ErrorList{}
586+
587+
if interfaceValidator != nil {
588+
findInterface, err := interfaceValidator(p.LibvirtURI)
589+
if err != nil {
590+
errorList = append(errorList, field.InternalError(fldPath.Child("libvirtURI"), err))
591+
return errorList
592+
}
593+
594+
if err := findInterface(p.ExternalBridge); err != nil {
595+
errorList = append(errorList, field.Invalid(fldPath.Child("externalBridge"), p.ExternalBridge, err.Error()))
596+
}
597+
598+
if err := findInterface(p.ProvisioningBridge); p.ProvisioningNetwork != baremetal.DisabledProvisioningNetwork && err != nil {
599+
errorList = append(errorList, field.Invalid(fldPath.Child("provisioningBridge"), p.ProvisioningBridge, err.Error()))
600+
}
601+
584602
}
585603

586-
return allErrs
604+
if err := validate.MAC(p.ExternalMACAddress); p.ExternalMACAddress != "" && err != nil {
605+
errorList = append(errorList, field.Invalid(fldPath.Child("externalMACAddress"), p.ExternalMACAddress, err.Error()))
606+
}
607+
608+
if err := validate.MAC(p.ProvisioningMACAddress); p.ProvisioningMACAddress != "" && err != nil {
609+
errorList = append(errorList, field.Invalid(fldPath.Child("provisioningMACAddress"), p.ProvisioningMACAddress, err.Error()))
610+
}
611+
612+
if p.ProvisioningMACAddress != "" && strings.EqualFold(p.ProvisioningMACAddress, p.ExternalMACAddress) {
613+
errorList = append(errorList, field.Duplicate(fldPath.Child("provisioningMACAddress"), "provisioning and external MAC addresses may not be identical"))
614+
}
615+
616+
return errorList
587617
}

pkg/types/baremetal/validation/platform_test.go

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package validation
22

33
import (
4+
"fmt"
45
"net/http"
56
"net/http/httptest"
67
"strings"
@@ -418,21 +419,22 @@ func TestValidateProvisioning(t *testing.T) {
418419
}))
419420
defer imagesServer.Close()
420421

421-
interfaceValidator := func(p *baremetal.Platform, fldPath *field.Path) field.ErrorList {
422-
errorList := field.ErrorList{}
423-
424-
if p.ExternalBridge != "br0" {
425-
errorList = append(errorList, field.Invalid(fldPath.Child("externalBridge"), p.ExternalBridge,
426-
"invalid external bridge"))
427-
}
428-
if p.ProvisioningBridge != "br1" {
429-
errorList = append(errorList, field.Invalid(fldPath.Child("provisioningBridge"), p.ProvisioningBridge,
430-
"invalid provisioning bridge"))
431-
}
422+
origInterfaceValidator := interfaceValidator
423+
t.Cleanup(func() {
424+
interfaceValidator = origInterfaceValidator
425+
})
426+
interfaceValidator = func(libvirtURI string) (func(string) error, error) {
427+
return func(interfaceName string) error {
428+
interfaceNames := []string{"br0", "br1"}
429+
for _, foundInterface := range interfaceNames {
430+
if foundInterface == interfaceName {
431+
return nil
432+
}
433+
}
432434

433-
return errorList
435+
return fmt.Errorf("could not find interface %q, valid interfaces are %s", interfaceName, strings.Join(interfaceNames, ", "))
436+
}, nil
434437
}
435-
dynamicProvisioningValidators = append(dynamicProvisioningValidators, interfaceValidator)
436438

437439
cases := []struct {
438440
name string
@@ -524,7 +526,7 @@ func TestValidateProvisioning(t *testing.T) {
524526
name: "invalid_extbridge",
525527
platform: platform().
526528
ExternalBridge("noexist").build(),
527-
expected: "Invalid value: \"noexist\": invalid external bridge",
529+
expected: "Invalid value: \"noexist\": could not find interface \"noexist\", valid interfaces are br0, br1",
528530
},
529531
{
530532
name: "valid_extbridge_mac",
@@ -534,7 +536,7 @@ func TestValidateProvisioning(t *testing.T) {
534536
name: "invalid_provbridge",
535537
platform: platform().
536538
ProvisioningBridge("noexist").build(),
537-
expected: "Invalid value: \"noexist\": invalid provisioning bridge",
539+
expected: "Invalid value: \"noexist\": could not find interface \"noexist\", valid interfaces are br0, br1",
538540
},
539541
{
540542
name: "valid_provbridge_mac",

pkg/types/installconfig.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ var (
3939
PlatformNames = []string{
4040
aws.Name,
4141
azure.Name,
42+
baremetal.Name,
4243
gcp.Name,
4344
ibmcloud.Name,
4445
nutanix.Name,
@@ -50,7 +51,6 @@ var (
5051
// hidden-but-supported platform names. This list isn't presented
5152
// to the user in the interactive wizard.
5253
HiddenPlatformNames = []string{
53-
baremetal.Name,
5454
external.Name,
5555
none.Name,
5656
}

pkg/types/installconfig_baremetal.go

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)