From 5975fcec56f58afd471d67260dd8ad396c12fe40 Mon Sep 17 00:00:00 2001 From: Amit Mendelevitch Date: Thu, 1 Jan 2026 14:13:37 +0200 Subject: [PATCH] feat: added reservation affinity --- api/v1beta1/gcpmachine_types.go | 5 +++++ cloud/scope/machine.go | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/api/v1beta1/gcpmachine_types.go b/api/v1beta1/gcpmachine_types.go index b0659ab76..b4d05c22c 100644 --- a/api/v1beta1/gcpmachine_types.go +++ b/api/v1beta1/gcpmachine_types.go @@ -17,6 +17,7 @@ limitations under the License. package v1beta1 import ( + "cloud.google.com/go/compute/apiv1/computepb" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -386,6 +387,10 @@ type GCPMachineSpec struct { // attached to the instance. // +optional GuestAccelerators []Accelerator `json:"guestAccelerators,omitempty"` + + // ReservationAffinity indicates the reservation that this instance has affinity for. + // +optional + ReservationAffinity *computepb.ReservationAffinity `json:"reservationAffinity,omitempty"` } // Accelerator is a specification of the type and number of accelerator diff --git a/cloud/scope/machine.go b/cloud/scope/machine.go index 9c29d0ae1..761148d21 100644 --- a/cloud/scope/machine.go +++ b/cloud/scope/machine.go @@ -504,6 +504,18 @@ func (m *MachineScope) InstanceSpec(log logr.Logger) *compute.Instance { instance.Scheduling.OnHostMaintenance = "TERMINATE" } + if m.GCPMachine.Spec.ReservationAffinity != nil { + instance.ReservationAffinity = &compute.ReservationAffinity{ + ConsumeReservationType: string(m.GCPMachine.Spec.ReservationAffinity.GetConsumeReservationType()), + } + if m.GCPMachine.Spec.ReservationAffinity.Key != nil { + instance.ReservationAffinity.Key = m.GCPMachine.Spec.ReservationAffinity.GetKey() + } + if len(m.GCPMachine.Spec.ReservationAffinity.Values) > 0 { + instance.ReservationAffinity.Values = m.GCPMachine.Spec.ReservationAffinity.GetValues() + } + } + return instance }