Skip to content

Commit 939aa77

Browse files
committed
Add affinity_strategy to VM data source
Signed-off-by: Justin Cinkelj <justin.cinkelj@xlab.si>
1 parent 137fa94 commit 939aa77

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

internal/provider/hypercore_vm_data_source.go

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"fmt"
1212
"strings"
1313

14+
"github.com/hashicorp/terraform-plugin-framework/attr"
1415
"github.com/hashicorp/terraform-plugin-framework/datasource"
1516
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
1617
"github.com/hashicorp/terraform-plugin-framework/types"
@@ -51,6 +52,7 @@ type hypercoreVMModel struct {
5152
Tags []types.String `tfsdk:"tags"`
5253
Disks []HypercoreDiskModel `tfsdk:"disks"`
5354
// TODO nics
55+
AffinityStrategy AffinityStrategyModel `tfsdk:"affinity_strategy"`
5456
}
5557

5658
type HypercoreDiskModel struct {
@@ -100,6 +102,15 @@ func (d *hypercoreVMDataSource) Schema(_ context.Context, _ datasource.SchemaReq
100102
ElementType: types.StringType,
101103
Optional: true,
102104
},
105+
"affinity_strategy": schema.ObjectAttribute{
106+
MarkdownDescription: "VM node affinity.",
107+
Computed: true,
108+
AttributeTypes: map[string]attr.Type{
109+
"strict_affinity": types.BoolType,
110+
"preferred_node_uuid": types.StringType,
111+
"backup_node_uuid": types.StringType,
112+
},
113+
},
103114

104115
"disks": schema.ListNestedAttribute{
105116
MarkdownDescription: "List of disks",
@@ -204,18 +215,26 @@ func (d *hypercoreVMDataSource) Read(ctx context.Context, req datasource.ReadReq
204215
}
205216
disks = append(disks, disk)
206217
}
218+
219+
hc3affinityStrategy := utils.AnyToMap(vm["affinityStrategy"])
220+
var affinityStrategy AffinityStrategyModel
221+
affinityStrategy.StrictAffinity = types.BoolValue(utils.AnyToBool(hc3affinityStrategy["strictAffinity"]))
222+
affinityStrategy.PreferredNodeUUID = types.StringValue(utils.AnyToString(hc3affinityStrategy["preferredNodeUUID"]))
223+
affinityStrategy.BackupNodeUUID = types.StringValue(utils.AnyToString(hc3affinityStrategy["backupNodeUUID"]))
224+
207225
// VM
208226
memory_B := utils.AnyToInteger64(vm["mem"])
209227
memory_MiB := memory_B / 1024 / 1024
210228
hypercoreVMState := hypercoreVMModel{
211-
UUID: types.StringValue(utils.AnyToString(vm["uuid"])),
212-
Name: types.StringValue(utils.AnyToString(vm["name"])),
213-
VCPU: types.Int32Value(int32(utils.AnyToInteger64(vm["numVCPU"]))),
214-
Memory: types.Int64Value(memory_MiB),
215-
Description: types.StringValue(utils.AnyToString(vm["description"])),
216-
PowerState: types.StringValue(utils.AnyToString(vm["state"])), // TODO convert (stopped vs SHUTOFF)
217-
Tags: tags_String,
218-
Disks: disks,
229+
UUID: types.StringValue(utils.AnyToString(vm["uuid"])),
230+
Name: types.StringValue(utils.AnyToString(vm["name"])),
231+
VCPU: types.Int32Value(int32(utils.AnyToInteger64(vm["numVCPU"]))),
232+
Memory: types.Int64Value(memory_MiB),
233+
Description: types.StringValue(utils.AnyToString(vm["description"])),
234+
PowerState: types.StringValue(utils.AnyToString(vm["state"])), // TODO convert (stopped vs SHUTOFF)
235+
Tags: tags_String,
236+
AffinityStrategy: affinityStrategy,
237+
Disks: disks,
219238
}
220239
state.Vms = append(state.Vms, hypercoreVMState)
221240
}

local/main.tf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,10 @@ output "myvm" {
4848
output "cluster_0_peer_1_uuid" {
4949
value = data.hypercore_node.cluster0_peer1.nodes.0.uuid
5050
}
51+
52+
data "hypercore_vm" "demo" {
53+
name = "demo-vm"
54+
}
55+
output "vm_demo" {
56+
value = data.hypercore_vm.demo
57+
}

0 commit comments

Comments
 (0)