@@ -29,26 +29,26 @@ type virtualMachineResource struct {
2929 timeouts * VirtualMachineTimeouts
3030}
3131
32+ type ConfigureMode string
33+
34+ const (
35+ ConfigureModeCreate ConfigureMode = "create"
36+ ConfigureModeUpdate ConfigureMode = "update"
37+ ConfigureModeDelete ConfigureMode = "delete"
38+ )
39+
3240func (r * virtualMachineResource ) Metadata (_ context.Context , req resource.MetadataRequest , resp * resource.MetadataResponse ) {
3341 resp .TypeName = req .ProviderTypeName + "_virtual_machine"
3442}
3543
36- func (r * virtualMachineResource ) ModifyPlan (ctx context.Context , req resource.ModifyPlanRequest , resp * resource.ModifyPlanResponse ) {
37- tflog .Debug (ctx , "ModifyPlan virtual machine method" )
38- var plan vt.VirtualMachineResourceModel
39- diags := req .Plan .Get (ctx , & plan )
40- if diags .HasError () {
41- tflog .Debug (ctx , "Plan is delete, skipping" )
42- return
43- }
44-
45- var state vt.VirtualMachineResourceModel
46- diags = req .State .Get (ctx , & state )
47- if diags .HasError () {
48- tflog .Debug (ctx , "Plan is create, skipping" )
44+ func (r * virtualMachineResource ) createPlanModifiers (ctx context.Context , req resource.ModifyPlanRequest , resp * resource.ModifyPlanResponse , plan * vt.VirtualMachineResourceModel ) {
45+ authCreateValidator (ctx , r .client .IsRoot , plan , resp )
46+ if resp .Diagnostics .HasError () {
4947 return
5048 }
49+ }
5150
51+ func (r * virtualMachineResource ) updatePlanModifiers (ctx context.Context , req resource.ModifyPlanRequest , resp * resource.ModifyPlanResponse , state * vt.VirtualMachineResourceModel , plan * vt.VirtualMachineResourceModel ) {
5252 node := plan .Node .ValueString ()
5353 vmId := int (state .ID .ValueInt64 ())
5454
@@ -61,25 +61,56 @@ func (r *virtualMachineResource) ModifyPlan(ctx context.Context, req resource.Mo
6161 return
6262 }
6363 if status .Status != proxmox .VIRTUALMACHINESTATUS_RUNNING {
64- powerOffValidator (ctx , r .client , & state , & plan , resp )
64+ powerOffValidator (ctx , r .client , state , plan , resp )
6565 }
6666
67- changeValidatorDiskSize (ctx , & state , & plan , resp )
68- changeValidatorDiskStorage (ctx , & state , & plan , resp )
69- changeValidatorDiskRemoved (ctx , & state , & plan , resp )
67+ authUpdateValidator (ctx , r .client .IsRoot , plan , resp )
68+
69+ changeValidatorDiskSize (ctx , state , plan , resp )
70+ changeValidatorDiskStorage (ctx , state , plan , resp )
71+ changeValidatorDiskRemoved (ctx , state , plan , resp )
7072 // carry over computed values sets to prevent unnecessary diffs
7173 amended := plan
7274 amended .ComputedDisks = state .ComputedDisks
7375 amended .ComputedNetworkInterfaces = state .ComputedNetworkInterfaces
7476 amended .ComputedPCIDevices = state .ComputedPCIDevices
7577
76- diags = resp .Plan .Set (ctx , & amended )
78+ diags : = resp .Plan .Set (ctx , & amended )
7779 resp .Diagnostics .Append (diags ... )
7880 if resp .Diagnostics .HasError () {
7981 return
8082 }
8183}
8284
85+ func (r * virtualMachineResource ) ModifyPlan (ctx context.Context , req resource.ModifyPlanRequest , resp * resource.ModifyPlanResponse ) {
86+ tflog .Debug (ctx , "ModifyPlan virtual machine method" )
87+ configureMode := ConfigureModeUpdate
88+
89+ var plan vt.VirtualMachineResourceModel
90+ diags := req .Plan .Get (ctx , & plan )
91+ if diags .HasError () {
92+ configureMode = ConfigureModeDelete
93+ }
94+
95+ var state vt.VirtualMachineResourceModel
96+ diags = req .State .Get (ctx , & state )
97+ if diags .HasError () {
98+ configureMode = ConfigureModeCreate
99+ }
100+
101+ tflog .Info (ctx , fmt .Sprintf ("configureMode '%v'" , configureMode ))
102+
103+ switch configureMode {
104+ case ConfigureModeCreate :
105+ r .createPlanModifiers (ctx , req , resp , & plan )
106+ return
107+ case ConfigureModeDelete :
108+ return
109+ default :
110+ r .updatePlanModifiers (ctx , req , resp , & state , & plan )
111+ }
112+ }
113+
83114func (r * virtualMachineResource ) Schema (_ context.Context , _ resource.SchemaRequest , resp * resource.SchemaResponse ) {
84115 resp .Schema = schemas .ResourceSchema
85116}
0 commit comments