Skip to content
Merged
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
38 changes: 30 additions & 8 deletions pkg/asset/machines/vsphere/capimachines.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"github.com/openshift/installer/pkg/asset/installconfig/vsphere"
"github.com/openshift/installer/pkg/asset/manifests/capiutils"
"github.com/openshift/installer/pkg/types"
"github.com/openshift/installer/pkg/utils"
)

const (
Expand Down Expand Up @@ -69,8 +70,9 @@ func GenerateMachines(ctx context.Context, clusterID string, config *types.Insta

capvMachines := make([]*capv.VSphereMachine, 0, len(machines))
result := make([]*asset.RuntimeFile, 0, len(machines))
staticIP := false

for _, machine := range machines {
for mIndex, machine := range machines {
providerSpec, ok := machine.Spec.ProviderSpec.Value.Object.(*machinev1.VSphereMachineProviderSpec)
if !ok {
return nil, errors.New("unable to convert ProviderSpec to VSphereMachineProviderSpec")
Expand All @@ -79,22 +81,33 @@ func GenerateMachines(ctx context.Context, clusterID string, config *types.Insta
vcenterContext := metadata.VCenterContexts[providerSpec.Workspace.Server]
resourcePool := providerSpec.Workspace.ResourcePool

customVMXKeys := map[string]string{
"guestinfo.hostname": machine.Name,
"guestinfo.domain": strings.TrimSuffix(config.ClusterDomain(), "."),
"stealclock.enable": "TRUE",
}

capvNetworkDevices := []capv.NetworkDeviceSpec{}
for _, networkDevice := range providerSpec.Network.Devices {
networkName, err := getNetworkInventoryPath(vcenterContext, networkDevice.NetworkName, providerSpec)
if err != nil {
return nil, fmt.Errorf("unable to get network inventory path: %w", err)
}
capvNetworkDevices = append(capvNetworkDevices, capv.NetworkDeviceSpec{
deviceSpec := capv.NetworkDeviceSpec{
NetworkName: networkName,
DHCP4: true,
})
}
}

customVMXKeys := map[string]string{
"guestinfo.hostname": machine.Name,
"guestinfo.domain": strings.TrimSuffix(config.ClusterDomain(), "."),
"stealclock.enable": "TRUE",
// Static IP configured. Add kargs.
if len(networkDevice.AddressesFromPools) > 0 {
staticIP = true
kargs, err := utils.ConstructNetworkKargsFromMachine(data.IPClaims, data.IPAddresses, &machines[mIndex], networkDevice)
if err != nil {
return nil, fmt.Errorf("unable to get static ip config for machine %v: %w", machine.Name, err)
}
customVMXKeys["guestinfo.afterburn.initrd.network-kargs"] = kargs
}
capvNetworkDevices = append(capvNetworkDevices, deviceSpec)
}

vsphereMachine := &capv.VSphereMachine{
Expand Down Expand Up @@ -166,6 +179,15 @@ func GenerateMachines(ctx context.Context, clusterID string, config *types.Insta
if role == masterRole {
customVMXKeys := map[string]string{}

// If we detected static IP for masters, lets apply to bootstrap as well.
if staticIP {
kargs, err := utils.ConstructKargsForBootstrap(config)
if err != nil {
return nil, fmt.Errorf("unable to get static ip config for bootstrap: %w", err)
}
customVMXKeys["guestinfo.afterburn.initrd.network-kargs"] = kargs
}

bootstrapSpec := capvMachines[0].Spec
bootstrapSpec.CustomVMXKeys = customVMXKeys
bootstrapVSphereMachine := &capv.VSphereMachine{
Expand Down
45 changes: 12 additions & 33 deletions pkg/utils/vmware.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,48 +9,27 @@ import (
"strings"

"github.com/sirupsen/logrus"
"sigs.k8s.io/cluster-api/exp/ipam/api/v1alpha1"
ipamv1 "sigs.k8s.io/cluster-api/exp/ipam/api/v1beta1"

machinev1beta1 "github.com/openshift/api/machine/v1beta1"
"github.com/openshift/installer/pkg/types"
)

func getIPAddressForClaim(claim v1alpha1.IPAddressClaim, addresses []v1alpha1.IPAddress) (*v1alpha1.IPAddress, error) {
for _, address := range addresses {
if address.Name == claim.Status.AddressRef.Name {
return &address, nil
}
}
return nil, fmt.Errorf("unable to find address for claim %s", claim.Name)
}

// ConstructNetworkKargsFromMachine does something.
func ConstructNetworkKargsFromMachine(claims []v1alpha1.IPAddressClaim, addresses []v1alpha1.IPAddress, machine *machinev1beta1.Machine) (string, error) {
var addressList []string
var gatewayList []string
var nameserverList []string

for _, claim := range claims {
for _, ownerReference := range claim.OwnerReferences {
if ownerReference.Name != machine.Name {
continue
}
address, err := getIPAddressForClaim(claim, addresses)
if err != nil {
return "", fmt.Errorf("unable to get address for claim %s: %w", claim.Name, err)
}

addressList = append(addressList, fmt.Sprintf("%s/%d", address.Spec.Address, address.Spec.Prefix))
gatewayList = append(gatewayList, address.Spec.Gateway)
for _, networkDevices := range machine.Spec.ProviderSpec.Value.Object.(*machinev1beta1.VSphereMachineProviderSpec).Network.Devices {
if networkDevices.Nameservers == nil {
continue
}
nameserverList = append(nameserverList, networkDevices.Nameservers...)
func ConstructNetworkKargsFromMachine(claims []ipamv1.IPAddressClaim, addresses []ipamv1.IPAddress, machine *machinev1beta1.Machine, network machinev1beta1.NetworkDeviceSpec) (string, error) {
var ipAddresses []string
var gateways []string
for idx := range network.AddressesFromPools {
for _, address := range addresses {
logrus.Debugf("Checking IPAdress %v. Does it match? %v", address.Name, fmt.Sprintf("%s-claim-%d-%d", machine.Name, 0, idx))
if address.Name == fmt.Sprintf("%s-claim-%d-%d", machine.Name, 0, idx) {
ipAddresses = append(ipAddresses, fmt.Sprintf("%v/%v", address.Spec.Address, address.Spec.Prefix))
gateways = append(gateways, address.Spec.Gateway)
break
}
}
}
return ConstructKargsFromNetworkConfig(addressList, nameserverList, gatewayList)
return ConstructKargsFromNetworkConfig(ipAddresses, network.Nameservers, gateways)
}

func getSubnetMask(prefix netip.Prefix) (string, error) {
Expand Down
1 change: 0 additions & 1 deletion vendor/modules.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9849,7 +9849,6 @@ sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1
sigs.k8s.io/cluster-api/cmd/clusterctl/api/v1alpha3
sigs.k8s.io/cluster-api/errors
sigs.k8s.io/cluster-api/exp/api/v1beta1
sigs.k8s.io/cluster-api/exp/ipam/api/v1alpha1
sigs.k8s.io/cluster-api/exp/ipam/api/v1beta1
sigs.k8s.io/cluster-api/feature
sigs.k8s.io/cluster-api/util
Expand Down
71 changes: 0 additions & 71 deletions vendor/sigs.k8s.io/cluster-api/exp/ipam/api/v1alpha1/conversion.go

This file was deleted.

19 changes: 0 additions & 19 deletions vendor/sigs.k8s.io/cluster-api/exp/ipam/api/v1alpha1/doc.go

This file was deleted.

This file was deleted.

This file was deleted.

Loading