Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ require (
github.com/openshift/hive/apis v0.0.0
github.com/openshift/installer v1.4.21-pre2.0.20260112230456-1c2444827f23
github.com/openshift/library-go v0.0.0-20251107090138-0de9712313a5
github.com/openshift/machine-api-operator v0.2.1-0.20251128002018-85c00c0d525f
github.com/openshift/machine-api-operator v0.2.1-0.20251128002018-85c00c0d525f // indirect
github.com/openshift/machine-api-provider-gcp v0.0.1-0.20241021180644-0eca0846914a
github.com/openshift/machine-api-provider-ibmcloud v0.0.0-20231207164151-6b0b8ea7b16d
github.com/pkg/errors v0.9.1
Expand Down Expand Up @@ -425,15 +425,12 @@ require (
google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect
google.golang.org/grpc v1.79.3 // indirect
google.golang.org/protobuf v1.36.10 // indirect
gopkg.in/gcfg.v1 v1.2.3 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
honnef.co/go/tools v0.6.1 // indirect
k8s.io/apiserver v0.34.2 // indirect
k8s.io/cloud-provider-vsphere v1.33.3 // indirect
k8s.io/component-base v0.34.2 // indirect
k8s.io/component-helpers v0.34.1 // indirect
k8s.io/gengo/v2 v2.0.0-20250922181213-ec3ebc5fd46b // indirect
Expand Down
6 changes: 0 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -846,8 +846,6 @@ github.com/openshift/client-go v0.0.0-20251015124057-db0dee36e235 h1:9JBeIXmnHlp
github.com/openshift/client-go v0.0.0-20251015124057-db0dee36e235/go.mod h1:L49W6pfrZkfOE5iC1PqEkuLkXG4W0BX4w8b+L2Bv7fM=
github.com/openshift/cloud-credential-operator v0.0.0-20240404165937-5e8812d64187 h1:v2D/+SWsOPsl4Syz1SVjo7m3L0ethuRGR++ubsb89oA=
github.com/openshift/cloud-credential-operator v0.0.0-20240404165937-5e8812d64187/go.mod h1:eyA6FG71366St6Q1TW+jXdQbald0rUwtEPhAREMlyhA=
github.com/openshift/cloud-provider-vsphere v1.19.1-0.20240626105621-6464d0bb4928 h1:gX0HAKR0f40xmMWlUSn8DBMCjip8Iuzg5XToWAv6Uzw=
github.com/openshift/cloud-provider-vsphere v1.19.1-0.20240626105621-6464d0bb4928/go.mod h1:eVEtCena8tmeeYDKwZlA2w+xBKzBHbQZ4CNHV8KL4ho=
github.com/openshift/cluster-api-actuator-pkg/testutils v0.0.0-20250910145856-21d03d30056d h1:+sqUThLi/lmgT5/scmmjnS6+RZFtbdxRAscNfCPyLPI=
github.com/openshift/cluster-api-actuator-pkg/testutils v0.0.0-20250910145856-21d03d30056d/go.mod h1:9+FWWWLkVrnBo1eYhA/0Ehlq5JMgIAHtcB0IF+qV1AA=
github.com/openshift/cluster-autoscaler-operator v0.0.1-0.20250219201631-227f7537c3b4 h1:Xepsi7/s1kHkemmhyWDFV21dijgXZUcT0+8YWh6CbxU=
Expand Down Expand Up @@ -1371,8 +1369,6 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs=
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY=
gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
Expand All @@ -1383,8 +1379,6 @@ gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
Expand Down
2 changes: 1 addition & 1 deletion pkg/controller/machinepool/machinepool_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -1393,7 +1393,7 @@ func (r *ReconcileMachinePool) createActuator(
case cd.Spec.Platform.OpenStack != nil:
return NewOpenStackActuator(masterMachine, r.Client, logger)
case cd.Spec.Platform.VSphere != nil:
return NewVSphereActuator(masterMachine, r.scheme, logger)
return NewVSphereActuator(masterMachine, logger)
default:
return nil, errors.New("unsupported platform")
}
Expand Down
27 changes: 22 additions & 5 deletions pkg/controller/machinepool/vsphereactuator.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package machinepool

import (
"encoding/json"
"fmt"
"strings"

Expand All @@ -13,7 +14,6 @@ import (
installvsphere "github.com/openshift/installer/pkg/asset/machines/vsphere"
installertypes "github.com/openshift/installer/pkg/types"
installertypesvsphere "github.com/openshift/installer/pkg/types/vsphere"
vsphereutil "github.com/openshift/machine-api-operator/pkg/controller/vsphere"

hivev1 "github.com/openshift/hive/apis/hive/v1"
)
Expand All @@ -28,8 +28,8 @@ type VSphereActuator struct {
var _ Actuator = &VSphereActuator{}

// NewVSphereActuator is the constructor for building a VSphereActuator
func NewVSphereActuator(masterMachine *machineapi.Machine, scheme *runtime.Scheme, logger log.FieldLogger) (*VSphereActuator, error) {
osImage, err := getVSphereOSImage(masterMachine, scheme, logger)
func NewVSphereActuator(masterMachine *machineapi.Machine, logger log.FieldLogger) (*VSphereActuator, error) {
osImage, err := getVSphereOSImage(masterMachine, logger)
if err != nil {
logger.WithError(err).Error("error getting os image from master machine")
return nil, err
Expand Down Expand Up @@ -116,8 +116,9 @@ func (a *VSphereActuator) GenerateMachineSets(cd *hivev1.ClusterDeployment, pool
}

// Get the OS image from an existing master machine.
func getVSphereOSImage(masterMachine *machineapi.Machine, scheme *runtime.Scheme, logger log.FieldLogger) (string, error) {
providerSpec, err := vsphereutil.ProviderSpecFromRawExtension(masterMachine.Spec.ProviderSpec.Value)
func getVSphereOSImage(masterMachine *machineapi.Machine, logger log.FieldLogger) (string, error) {
providerSpec, err := providerSpecFromRawExtension(masterMachine.Spec.ProviderSpec.Value)
logger.Debugf("Got provider spec from raw extension: %+v", providerSpec)
if err != nil {
logger.WithError(err).Warn("cannot decode VSphereMachineProviderSpec from master machine")
return "", errors.Wrap(err, "cannot decode VSphereMachineProviderSpec from master machine")
Expand Down Expand Up @@ -152,3 +153,19 @@ func setFolderPath(folder, datacenter string, logger log.FieldLogger) string {
}
return folder
}

// ProviderSpecFromRawExtension unmarshals the JSON-encoded spec
// Inlined from https://github.com/openshift/machine-api-operator/blob/85c00c0d525fe75683afced6cfed878b3414bc7a/pkg/controller/vsphere/util.go#L202-L215
// (last changed: 5 years ago)
func providerSpecFromRawExtension(rawExtension *runtime.RawExtension) (*machineapi.VSphereMachineProviderSpec, error) {
if rawExtension == nil {
return &machineapi.VSphereMachineProviderSpec{}, nil
}

spec := new(machineapi.VSphereMachineProviderSpec)
if err := json.Unmarshal(rawExtension.Raw, &spec); err != nil {
return nil, fmt.Errorf("error unmarshalling providerSpec: %v", err)
}

return spec, nil
}
29 changes: 23 additions & 6 deletions pkg/controller/machinepool/vsphereactuator_test.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
package machinepool

import (
"encoding/json"
"fmt"
"testing"

log "github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"k8s.io/apimachinery/pkg/runtime"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

machineapi "github.com/openshift/api/machine/v1beta1"
vsphereutil "github.com/openshift/machine-api-operator/pkg/controller/vsphere"

hivev1 "github.com/openshift/hive/apis/hive/v1"
hivev1vsphere "github.com/openshift/hive/apis/hive/v1/vsphere"
"github.com/openshift/hive/pkg/util/scheme"
)

func TestVSphereActuator(t *testing.T) {
Expand All @@ -41,9 +41,7 @@ func TestVSphereActuator(t *testing.T) {

for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
scheme := scheme.GetScheme()

actuator, err := NewVSphereActuator(test.masterMachine, scheme, log.WithField("actuator", "vsphereactuator_test"))
actuator, err := NewVSphereActuator(test.masterMachine, log.WithField("actuator", "vsphereactuator_test"))
assert.NoError(t, err, "unexpected error creating VSphereActuator")

generatedMachineSets, _, err := actuator.GenerateMachineSets(test.clusterDeployment, test.pool, actuator.logger)
Expand Down Expand Up @@ -113,7 +111,7 @@ func testVSphereClusterDeployment() *hivev1.ClusterDeployment {
}

func testVSphereMachineSpec(machineType string) machineapi.MachineSpec {
rawVSphereProviderSpec, err := vsphereutil.RawExtensionFromProviderSpec(testVSphereProviderSpec())
rawVSphereProviderSpec, err := rawExtensionFromProviderSpec(testVSphereProviderSpec())
if err != nil {
log.WithError(err).Fatal("error encoding VSphere machine provider spec")
}
Expand Down Expand Up @@ -161,3 +159,22 @@ func testVSphereProviderSpec() *machineapi.VSphereMachineProviderSpec {
DiskGiB: 120,
}
}

// rawExtensionFromProviderSpec marshals the machine provider spec.
// Inlined https://github.com/openshift/machine-api-operator/blob/85c00c0d525fe75683afced6cfed878b3414bc7a/pkg/controller/vsphere/util.go#L168-L183
// (last changed: 5 years ago)
func rawExtensionFromProviderSpec(spec *machineapi.VSphereMachineProviderSpec) (*runtime.RawExtension, error) {
if spec == nil {
return &runtime.RawExtension{}, nil
}

var rawBytes []byte
var err error
if rawBytes, err = json.Marshal(spec); err != nil {
return nil, fmt.Errorf("error marshalling providerSpec: %v", err)
}

return &runtime.RawExtension{
Raw: rawBytes,
}, nil
}

This file was deleted.

Loading