Skip to content

Commit 36836aa

Browse files
committed
Add support for InstanceTerminationAction.
1 parent 67ff6d8 commit 36836aa

File tree

4 files changed

+39
-0
lines changed

4 files changed

+39
-0
lines changed

api/v1beta1/gcpmachine_types.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,8 +329,21 @@ type GCPMachineSpec struct {
329329
// RootDiskEncryptionKey defines the KMS key to be used to encrypt the root disk.
330330
// +optional
331331
RootDiskEncryptionKey *CustomerEncryptionKey `json:"rootDiskEncryptionKey,omitempty"`
332+
333+
// InstanceTerminationAction specifies the termination action for the instance upon preemption.
334+
// GCP API defaults to "Unspecified", which defaults the action to "Stop".
335+
// +kubebuilder:validation:Enum=Delete;Stop
336+
// +optional
337+
InstanceTerminationAction *InstanceTerminationAction `json:"instanceTerminationAction,omitempty"`
332338
}
333339

340+
type InstanceTerminationAction string
341+
342+
const (
343+
InstanceTerminationActionDelete InstanceTerminationAction = "Delete"
344+
InstanceTerminationActionStop InstanceTerminationAction = "Stop"
345+
)
346+
334347
// MetadataItem defines a single piece of metadata associated with an instance.
335348
type MetadataItem struct {
336349
// Key is the identifier for the metadata entry.

cloud/scope/machine.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,16 @@ func (m *MachineScope) InstanceSpec(log logr.Logger) *compute.Instance {
435435

436436
instance.Scheduling.OnHostMaintenance = strings.ToUpper(string(*m.GCPMachine.Spec.OnHostMaintenance))
437437
}
438+
if m.GCPMachine.Spec.InstanceTerminationAction != nil {
439+
switch *m.GCPMachine.Spec.InstanceTerminationAction {
440+
case infrav1.InstanceTerminationActionDelete:
441+
instance.Scheduling.InstanceTerminationAction = "DELETE"
442+
case infrav1.InstanceTerminationActionStop:
443+
instance.Scheduling.InstanceTerminationAction = "STOP"
444+
default:
445+
log.Error(errors.New("Invalid value"), "Unknown InstanceTerminationAction value", "Spec.InstanceTerminationAction", *m.GCPMachine.Spec.InstanceTerminationAction)
446+
}
447+
}
438448
if m.GCPMachine.Spec.ConfidentialCompute != nil {
439449
enabled := *m.GCPMachine.Spec.ConfidentialCompute == infrav1.ConfidentialComputePolicyEnabled
440450
instance.ConfidentialInstanceConfig = &compute.ConfidentialInstanceConfig{

config/crd/bases/infrastructure.cluster.x-k8s.io_gcpmachines.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,14 @@ spec:
422422
Subnet is a reference to the subnetwork to use for this instance. If not specified,
423423
the first subnetwork retrieved from the Cluster Region and Network is picked.
424424
type: string
425+
instanceTerminationAction:
426+
description: |-
427+
InstanceTerminationAction specifies the termination action for the instance upon preemption.
428+
The default action is "Stop".
429+
enum:
430+
- Delete
431+
- Stop
432+
type: string
425433
required:
426434
- instanceType
427435
type: object

config/crd/bases/infrastructure.cluster.x-k8s.io_gcpmachinetemplates.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,14 @@ spec:
439439
Subnet is a reference to the subnetwork to use for this instance. If not specified,
440440
the first subnetwork retrieved from the Cluster Region and Network is picked.
441441
type: string
442+
instanceTerminationAction:
443+
description: |-
444+
InstanceTerminationAction specifies the termination action for the instance upon preemption.
445+
The default action is "Stop".
446+
enum:
447+
- Delete
448+
- Stop
449+
type: string
442450
required:
443451
- instanceType
444452
type: object

0 commit comments

Comments
 (0)