mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-05 05:24:01 +00:00
117 lines
3.0 KiB
Go
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
|
|
}
|