0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-05 05:24:01 +00:00
terraform-provider-proxmox/proxmoxtf/resource/vm/agent.go
Pavel Boldyrev 5bf5754cb3
messing with disks
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2024-02-01 23:43:43 -05:00

117 lines
3.0 KiB
Go

package vm
import (
"github.com/bpg/terraform-provider-proxmox/proxmox/nodes/vms"
"github.com/bpg/terraform-provider-proxmox/proxmox/types"
"github.com/bpg/terraform-provider-proxmox/proxmoxtf/structure"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func createAgent(d *schema.ResourceData, updateBody *vms.UpdateRequestBody) {
agent := d.Get(mkAgent).([]interface{})
if len(agent) > 0 {
agentBlock := agent[0].(map[string]interface{})
agentEnabled := types.CustomBool(
agentBlock[mkAgentEnabled].(bool),
)
agentTrim := types.CustomBool(agentBlock[mkAgentTrim].(bool))
agentType := agentBlock[mkAgentType].(string)
updateBody.Agent = &vms.CustomAgent{
Enabled: &agentEnabled,
TrimClonedDisks: &agentTrim,
Type: &agentType,
}
}
}
func customAgent(d *schema.ResourceData, resource *schema.Resource) (*vms.CustomAgent, error) {
agentBlock, err := structure.GetSchemaBlock(
resource,
d,
[]string{mkAgent},
0,
true,
)
if err != nil {
return nil, err
}
agentEnabled := types.CustomBool(
agentBlock[mkAgentEnabled].(bool),
)
agentTrim := types.CustomBool(agentBlock[mkAgentTrim].(bool))
agentType := agentBlock[mkAgentType].(string)
return &vms.CustomAgent{
Enabled: &agentEnabled,
TrimClonedDisks: &agentTrim,
Type: &agentType,
}, nil
}
func setAgent(d *schema.ResourceData, clone bool, vmConfig *vms.GetResponseData) error {
// Compare the agent configuration to the one stored in the state.
currentAgent := d.Get(mkAgent).([]interface{})
if !clone || len(currentAgent) > 0 {
if vmConfig.Agent != nil {
agent := map[string]interface{}{}
if vmConfig.Agent.Enabled != nil {
agent[mkAgentEnabled] = bool(*vmConfig.Agent.Enabled)
} else {
agent[mkAgentEnabled] = false
}
if vmConfig.Agent.TrimClonedDisks != nil {
agent[mkAgentTrim] = bool(
*vmConfig.Agent.TrimClonedDisks,
)
} else {
agent[mkAgentTrim] = false
}
if len(currentAgent) > 0 {
currentAgentBlock := currentAgent[0].(map[string]interface{})
currentAgentTimeout := currentAgentBlock[mkAgentTimeout].(string)
if currentAgentTimeout != "" {
agent[mkAgentTimeout] = currentAgentTimeout
} else {
agent[mkAgentTimeout] = dvAgentTimeout
}
} else {
agent[mkAgentTimeout] = dvAgentTimeout
}
if vmConfig.Agent.Type != nil {
agent[mkAgentType] = *vmConfig.Agent.Type
} else {
agent[mkAgentType] = ""
}
if clone {
if len(currentAgent) > 0 {
return d.Set(mkAgent, []interface{}{agent})
}
} else if len(currentAgent) > 0 ||
agent[mkAgentEnabled] != dvAgentEnabled ||
agent[mkAgentTimeout] != dvAgentTimeout ||
agent[mkAgentTrim] != dvAgentTrim ||
agent[mkAgentType] != dvAgentType {
return d.Set(mkAgent, []interface{}{agent})
}
} else if clone {
if len(currentAgent) > 0 {
return d.Set(mkAgent, []interface{}{})
}
} else {
return d.Set(mkAgent, []interface{}{})
}
}
return nil
}