From 0a71fe6b1f3bdca2245b271e127ffb8771590486 Mon Sep 17 00:00:00 2001 From: Alex Kulikovskikh Date: Thu, 10 Dec 2020 09:45:27 -0500 Subject: [PATCH] add `alias` cluster resource --- .../data_source_virtual_environment_alias.md | 28 +++ ...data_source_virtual_environment_aliases.md | 26 +++ .../proxmox_virtual_environment_alias.md | 39 ++++ ...ource_virtual_environment_cluster_alias.tf | 7 + ...rce_virtual_environment_cluster_aliases.tf | 9 + ...ource_virtual_environemnt_cluster_alias.tf | 13 ++ proxmox/virtual_environment_cluster_alias.go | 63 ++++++ ...virtual_environment_cluster_alias_types.go | 39 ++++ .../data_source_virtual_environment_alias.go | 70 +++++++ ...a_source_virtual_environment_alias_test.go | 40 ++++ ...data_source_virtual_environment_aliases.go | 54 +++++ ...source_virtual_environment_aliases_test.go | 33 ++++ proxmoxtf/provider.go | 3 + ...ource_virtual_environment_cluster_alias.go | 184 ++++++++++++++++++ ..._virtual_environment_cluster_alias_test.go | 40 ++++ 15 files changed, 648 insertions(+) create mode 100644 docs/data_sources/virtual_environment/data_source_virtual_environment_alias.md create mode 100644 docs/data_sources/virtual_environment/data_source_virtual_environment_aliases.md create mode 100644 docs/resources/virtual_environment/proxmox_virtual_environment_alias.md create mode 100644 example/data_source_virtual_environment_cluster_alias.tf create mode 100644 example/data_source_virtual_environment_cluster_aliases.tf create mode 100644 example/resource_virtual_environemnt_cluster_alias.tf create mode 100644 proxmox/virtual_environment_cluster_alias.go create mode 100644 proxmox/virtual_environment_cluster_alias_types.go create mode 100644 proxmoxtf/data_source_virtual_environment_alias.go create mode 100644 proxmoxtf/data_source_virtual_environment_alias_test.go create mode 100644 proxmoxtf/data_source_virtual_environment_aliases.go create mode 100644 proxmoxtf/data_source_virtual_environment_aliases_test.go create mode 100644 proxmoxtf/resource_virtual_environment_cluster_alias.go create mode 100644 proxmoxtf/resource_virtual_environment_cluster_alias_test.go diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_alias.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_alias.md new file mode 100644 index 00000000..17df5433 --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_alias.md @@ -0,0 +1,28 @@ +--- +layout: page +title: Alias +permalink: /data-sources/virtual-environment/alias +nav_order: 1 +parent: Virtual Environment Data Sources +--- + +# Data Source: Alias + +Retrieves information about a specific alias. + +## Example Usage + +``` +data "proxmox_virtual_environment_cluster_alias" "local_network" { + name = "local_network" +} +``` + +## Arguments Reference + +* `name` - (Required) Alias name. + +## Attributes Reference + +* `cidr` - (Required) Network/IP specification in CIDR format. +* `comment` - (Optional) Alias comment. diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_aliases.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_aliases.md new file mode 100644 index 00000000..106e5a24 --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_aliases.md @@ -0,0 +1,26 @@ +--- +layout: page +title: Aliases +permalink: /data-sources/virtual-environment/aliases +nav_order: 1 +parent: Virtual Environment Data Sources +parent: Data Sources +--- + +# Data Source: Aliases + +Retrieves the identifiers for all the available aliases. + +## Example Usage + +``` +data "proxmox_virtual_environment_cluster_aliases" "available_aliases" {} +``` + +## Arguments Reference + +There are no arguments available for this data source. + +## Attributes Reference + +* `alias_ids` - The pool identifiers. diff --git a/docs/resources/virtual_environment/proxmox_virtual_environment_alias.md b/docs/resources/virtual_environment/proxmox_virtual_environment_alias.md new file mode 100644 index 00000000..584f4770 --- /dev/null +++ b/docs/resources/virtual_environment/proxmox_virtual_environment_alias.md @@ -0,0 +1,39 @@ +--- +layout: page +title: Alias +permalink: /ressources/virtual-environment/alias +nav_order: 1 +parent: Virtual Environment Resources +grand_parent: Resources +--- + +# Resource: Alias + +Aliases are used to see what devices or group of devices are affected by a rule. +We can create aliases to identify an IP address or a network. + +## Example Usage + +``` +resource "proxmox_virtual_environment_cluster_alias" "local_network" { + name = "local_network" + cidr = "192.168.0.0/23" + comment = "Managed by Terraform" +} + +resource "proxmox_virtual_environment_cluster_alias" "ubuntu_vm" { + name = "ubuntu" + cidr = "192.168.0.1" + comment = "Managed by Terraform" +} +``` + +## Arguments Reference + +* `name` - (Required) Alias name. +* `cidr` - (Required) Network/IP specification in CIDR format. +* `comment` - (Optional) Alias comment. + +## Attributes Reference + +There are no attribute references available for this resource. diff --git a/example/data_source_virtual_environment_cluster_alias.tf b/example/data_source_virtual_environment_cluster_alias.tf new file mode 100644 index 00000000..01b17e8f --- /dev/null +++ b/example/data_source_virtual_environment_cluster_alias.tf @@ -0,0 +1,7 @@ +data "proxmox_virtual_environment_cluster_alias" "example" { + name = "example" +} + +output "proxmox_virtual_environment_cluster_alias_example_cidr" { + value = proxmox_virtual_environment_cluster_alias.example.cidr +} diff --git a/example/data_source_virtual_environment_cluster_aliases.tf b/example/data_source_virtual_environment_cluster_aliases.tf new file mode 100644 index 00000000..c59250dc --- /dev/null +++ b/example/data_source_virtual_environment_cluster_aliases.tf @@ -0,0 +1,9 @@ +data "proxmox_virtual_environment_cluster_aliases" "example" { + depends_on = ["proxmox_virtual_environment_cluster_alias.example"] +} + +output "proxmox_virtual_environment_cluster_aliases" { + value = "${map( + "alias_ids", data.proxmox_virtual_environment_cluster_aliases.example.alias_ids, + )}" +} diff --git a/example/resource_virtual_environemnt_cluster_alias.tf b/example/resource_virtual_environemnt_cluster_alias.tf new file mode 100644 index 00000000..34170be4 --- /dev/null +++ b/example/resource_virtual_environemnt_cluster_alias.tf @@ -0,0 +1,13 @@ +resource "proxmox_virtual_environment_cluster_alias" "example" { + name = "local_network" + cidr = "192.168.0.0/23" + comment = "Managed by Terraform" +} + +output "proxmox_virtual_environment_cluster_alias_example_name" { + value = "${proxmox_virtual_environment_cluster_alias.example.name}" +} + +output "proxmox_virtual_environment_cluster_alias_example_cidr" { + value = "${proxmox_virtual_environment_cluster_alias.example.cidr}" +} diff --git a/proxmox/virtual_environment_cluster_alias.go b/proxmox/virtual_environment_cluster_alias.go new file mode 100644 index 00000000..6fc57aac --- /dev/null +++ b/proxmox/virtual_environment_cluster_alias.go @@ -0,0 +1,63 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +package proxmox + +import ( + "errors" + "fmt" + "net/url" + "sort" +) + +// CreateAlias create an alias +func (c *VirtualEnvironmentClient) CreateAlias(d *VirtualEnvironmentClusterAliasCreateRequestBody) error { + return c.DoRequest(hmPOST, "cluster/firewall/aliases", d, nil) +} + +// DeleteAlias delete an alias +func (c *VirtualEnvironmentClient) DeleteAlias(id string) error { + return c.DoRequest(hmDELETE, fmt.Sprintf("cluster/firewall/aliases/%s", url.PathEscape(id)), nil, nil) +} + +// GetAlias retrieves an alias +func (c *VirtualEnvironmentClient) GetAlias(id string) (*VirtualEnvironmentClusterAliasGetResponseData, error) { + resBody := &VirtualEnvironmentClusterAliasGetResponseBody{} + err := c.DoRequest(hmGET, fmt.Sprintf("cluster/firewall/aliases/%s", url.PathEscape(id)), nil, resBody) + + if err != nil { + return nil, err + } + + if resBody.Data == nil { + return nil, errors.New("The server did not include a data object in the response") + } + + return resBody.Data, nil +} + +// ListAlias retrieves a list of aliases. +func (c *VirtualEnvironmentClient) ListAliases() ([]*VirtualEnvironmentClusterAliasGetResponseData, error) { + resBody := &VirtualEnvironmentClusterAliasListResponseBody{} + err := c.DoRequest(hmGET, "cluster/firewall/aliases", nil, resBody) + + if err != nil { + return nil, err + } + + if resBody.Data == nil { + return nil, errors.New("The server did not include a data object in the response") + } + + sort.Slice(resBody.Data, func(i, j int) bool { + return resBody.Data[i].Name < resBody.Data[j].Name + }) + + return resBody.Data, nil +} + +// UpdateAlias updates an alias. +func (c *VirtualEnvironmentClient) UpdateAlias(id string, d *VirtualEnvironmentClusterAliasUpdateRequestBody) error { + return c.DoRequest(hmPUT, fmt.Sprintf("cluster/firewall/aliases/%s", url.PathEscape(id)), d, nil) +} \ No newline at end of file diff --git a/proxmox/virtual_environment_cluster_alias_types.go b/proxmox/virtual_environment_cluster_alias_types.go new file mode 100644 index 00000000..d6813206 --- /dev/null +++ b/proxmox/virtual_environment_cluster_alias_types.go @@ -0,0 +1,39 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +package proxmox + +// VirtualEnvironmentClusterAliasCreateRequestBody contains the data for an alias create request. +type VirtualEnvironmentClusterAliasCreateRequestBody struct { + Comment *string `json:"comment,omitempty" url:"comment,omitempty"` + Name string `json:"name" url:"name"` + CIDR string `json:"cidr" url:"cidr"` +} + +// VirtualEnvironmentClusterAliasGetResponseBody contains the body from an alias get response. +type VirtualEnvironmentClusterAliasGetResponseBody struct { + Data *VirtualEnvironmentClusterAliasGetResponseData `json:"data,omitempty"` +} + +// VirtualEnvironmentClusterAliasGetResponseData contains the data from an alias get response. +type VirtualEnvironmentClusterAliasGetResponseData struct { + Comment *string `json:"comment,omitempty" url:"comment,omitempty"` + Name string `json:"name" url:"name"` + CIDR string `json:"cidr" url:"cidr"` + Digest *string `json:"digest" url:"digest"` + IPVersion int `json:"ipversion" url:"ipversion"` +} + +// VirtualEnvironmentClusterAliasListResponseBody contains the data from an alias get response. +type VirtualEnvironmentClusterAliasListResponseBody struct { + Data []*VirtualEnvironmentClusterAliasGetResponseData `json:"data,omitempty"` +} + +// VirtualEnvironmentClusterAliasUpdateRequestBody contains the data for an alias update request. +type VirtualEnvironmentClusterAliasUpdateRequestBody struct { + Comment *string `json:"comment,omitempty" url:"comment,omitempty"` + ReName string `json:"rename" url:"rename"` + CIDR string `json:"cidr" url:"cidr"` +} + diff --git a/proxmoxtf/data_source_virtual_environment_alias.go b/proxmoxtf/data_source_virtual_environment_alias.go new file mode 100644 index 00000000..f04bfed5 --- /dev/null +++ b/proxmoxtf/data_source_virtual_environment_alias.go @@ -0,0 +1,70 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +package proxmoxtf + +import ( + "github.com/hashicorp/terraform/helper/schema" +) + +const ( + dvDataVirtualEnvironmentClusterAliasComment = "" + + mkDataSourceVirtualEnvironmentClusterAliasName = "name" + mkDataSourceVirtualEnvironmentClusterAliasCIDR = "cidr" + mkDataSourceVirtualEnvironmentClusterAliasComment = "comment" + +) + +func dataSourceVirtualEnvironmentClusterAlias() *schema.Resource { + return &schema.Resource{ + Schema: map[string]*schema.Schema{ + mkDataSourceVirtualEnvironmentClusterAliasName: { + Type: schema.TypeString, + Description: "Alias name", + Required: true, + }, + mkDataSourceVirtualEnvironmentClusterAliasCIDR: { + Type: schema.TypeString, + Description: "IP/CIDR block", + Computed: true, + }, + mkDataSourceVirtualEnvironmentClusterAliasComment: { + Type: schema.TypeString, + Description: "Alias comment", + Computed: true, + }, + + }, + Read: dataSourceVirtualEnvironmentAliasRead, + } +} + +func dataSourceVirtualEnvironmentAliasRead(d *schema.ResourceData, m interface{}) error { + config := m.(providerConfiguration) + veClient, err := config.GetVEClient() + + if err != nil { + return err + } + + AliasID := d.Get(mkDataSourceVirtualEnvironmentClusterAliasName).(string) + Alias, err := veClient.GetAlias(AliasID) + + if err != nil { + return err + } + + d.SetId(AliasID) + + d.Set(mkDataSourceVirtualEnvironmentClusterAliasCIDR, Alias.CIDR) + + if Alias.Comment != nil { + d.Set(mkDataSourceVirtualEnvironmentClusterAliasComment, Alias.Comment) + } else { + d.Set(mkDataSourceVirtualEnvironmentClusterAliasComment, dvDataVirtualEnvironmentClusterAliasComment) + } + + return nil +} diff --git a/proxmoxtf/data_source_virtual_environment_alias_test.go b/proxmoxtf/data_source_virtual_environment_alias_test.go new file mode 100644 index 00000000..56526388 --- /dev/null +++ b/proxmoxtf/data_source_virtual_environment_alias_test.go @@ -0,0 +1,40 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +package proxmoxtf + +import ( + "testing" + + "github.com/hashicorp/terraform/helper/schema" +) + +// TestDataSourceVirtualEnvironmentAliasInstantiation tests whether the DataSourceVirtualEnvironmentAlias instance can be instantiated. +func TestDataSourceVirtualEnvironmentAliasInstantiation(t *testing.T) { + s := dataSourceVirtualEnvironmentClusterAlias() + + if s == nil { + t.Fatalf("Cannot instantiate dataSourceVirtualEnvironmentAlias") + } +} + +// TestDataSourceVirtualEnvironmentAliasSchema tests the dataSourceVirtualEnvironmentAlias schema. +func TestDataSourceVirtualEnvironmentAliasSchema(t *testing.T) { + s := dataSourceVirtualEnvironmentClusterAlias() + + testRequiredArguments(t, s, []string{ + mkDataSourceVirtualEnvironmentClusterAliasName, + }) + + testComputedAttributes(t, s, []string{ + mkDataSourceVirtualEnvironmentClusterAliasCIDR, + mkDataSourceVirtualEnvironmentClusterAliasComment, + }) + + testValueTypes(t, s, map[string]schema.ValueType{ + mkDataSourceVirtualEnvironmentClusterAliasName: schema.TypeString, + mkDataSourceVirtualEnvironmentClusterAliasCIDR: schema.TypeString, + mkDataSourceVirtualEnvironmentClusterAliasComment: schema.TypeString, + }) +} diff --git a/proxmoxtf/data_source_virtual_environment_aliases.go b/proxmoxtf/data_source_virtual_environment_aliases.go new file mode 100644 index 00000000..34b37320 --- /dev/null +++ b/proxmoxtf/data_source_virtual_environment_aliases.go @@ -0,0 +1,54 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +package proxmoxtf + +import ( + "github.com/hashicorp/terraform/helper/schema" +) + +const ( + mkDataSourceVirtualEnvironmentClusterAliasesAliasIDs = "alias_ids" +) + +func dataSourceVirtualEnvironmentClusterAliases() *schema.Resource { + return &schema.Resource{ + Schema: map[string]*schema.Schema{ + mkDataSourceVirtualEnvironmentClusterAliasesAliasIDs: { + Type: schema.TypeList, + Description: "Alias IDs", + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, + }, + }, + Read: dataSourceVirtualEnvironmentClusterAliasesRead, + } +} + +func dataSourceVirtualEnvironmentClusterAliasesRead(d *schema.ResourceData, m interface{}) error { + config := m.(providerConfiguration) + veClient, err := config.GetVEClient() + + if err != nil { + return err + } + + list, err := veClient.ListPools() + + if err != nil { + return err + } + + aliasIDs := make([]interface{}, len(list)) + + for i, v := range list { + aliasIDs[i] = v.ID + } + + d.SetId("aliases") + + d.Set(mkDataSourceVirtualEnvironmentClusterAliasesAliasIDs, aliasIDs) + + return nil +} diff --git a/proxmoxtf/data_source_virtual_environment_aliases_test.go b/proxmoxtf/data_source_virtual_environment_aliases_test.go new file mode 100644 index 00000000..da5a640a --- /dev/null +++ b/proxmoxtf/data_source_virtual_environment_aliases_test.go @@ -0,0 +1,33 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +package proxmoxtf + +import ( + "testing" + + "github.com/hashicorp/terraform/helper/schema" +) + +// TestDataSourceVirtualEnvironmentAliasesInstantiation tests whether the DataSourceVirtualEnvironmentAliases instance can be instantiated. +func TestDataSourceVirtualEnvironmentAliasesInstantiation(t *testing.T) { + s := dataSourceVirtualEnvironmentClusterAliases() + + if s == nil { + t.Fatalf("Cannot instantiate dataSourceVirtualEnvironmentAliases") + } +} + +// TestDataSourceVirtualEnvironmentAliasesSchema tests the dataSourceVirtualEnvironmentAliases schema. +func TestDataSourceVirtualEnvironmentAliasesSchema(t *testing.T) { + s := dataSourceVirtualEnvironmentClusterAliases() + + testComputedAttributes(t, s, []string{ + mkDataSourceVirtualEnvironmentClusterAliasesAliasIDs, + }) + + testValueTypes(t, s, map[string]schema.ValueType{ + mkDataSourceVirtualEnvironmentClusterAliasesAliasIDs: schema.TypeList, + }) +} diff --git a/proxmoxtf/provider.go b/proxmoxtf/provider.go index 7d2b514f..51702aad 100644 --- a/proxmoxtf/provider.go +++ b/proxmoxtf/provider.go @@ -50,6 +50,8 @@ func Provider() *schema.Provider { "proxmox_virtual_environment_user": dataSourceVirtualEnvironmentUser(), "proxmox_virtual_environment_users": dataSourceVirtualEnvironmentUsers(), "proxmox_virtual_environment_version": dataSourceVirtualEnvironmentVersion(), + "proxmox_virtual_environment_cluster_alias": dataSourceVirtualEnvironmentClusterAlias(), + "proxmox_virtual_environment_cluster_aliases": dataSourceVirtualEnvironmentClusterAliases(), }, ResourcesMap: map[string]*schema.Resource{ "proxmox_virtual_environment_certificate": resourceVirtualEnvironmentCertificate(), @@ -63,6 +65,7 @@ func Provider() *schema.Provider { "proxmox_virtual_environment_time": resourceVirtualEnvironmentTime(), "proxmox_virtual_environment_user": resourceVirtualEnvironmentUser(), "proxmox_virtual_environment_vm": resourceVirtualEnvironmentVM(), + "proxmox_virtual_environment_cluster_alias": resourceVirtualEnvironmentClusterAlias(), }, Schema: map[string]*schema.Schema{ mkProviderVirtualEnvironment: { diff --git a/proxmoxtf/resource_virtual_environment_cluster_alias.go b/proxmoxtf/resource_virtual_environment_cluster_alias.go new file mode 100644 index 00000000..0e7a305f --- /dev/null +++ b/proxmoxtf/resource_virtual_environment_cluster_alias.go @@ -0,0 +1,184 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +package proxmoxtf + +import ( + "github.com/danitso/terraform-provider-proxmox/proxmox" + "github.com/hashicorp/terraform/helper/schema" + "strings" +) + +const ( + dvResourceVirtualEnvironmentClusterAliasComment = "" + + mkResourceVirtualEnvironmentClusterAliasName = "name" + mkResourceVirtualEnvironmentClusterAliasCIDR = "cidr" + mkResourceVirtualEnvironmentClusterAliasComment = "comment" +) + +func resourceVirtualEnvironmentClusterAlias() *schema.Resource { + return &schema.Resource{ + Schema: map[string]*schema.Schema{ + mkResourceVirtualEnvironmentClusterAliasName: { + Type: schema.TypeString, + Description: "Alias name", + Required: true, + ForceNew: false, + }, + mkResourceVirtualEnvironmentClusterAliasCIDR: { + Type: schema.TypeString, + Description: "IP/CIDR block", + Required: true, + ForceNew: false, + }, + mkResourceVirtualEnvironmentClusterAliasComment: { + Type: schema.TypeString, + Description: "Alias comment", + Optional: true, + Default: dvResourceVirtualEnvironmentClusterAliasComment, + }, + }, + Create: resourceVirtualEnvironmentClusterAliasCreate, + Read: resourceVirtualEnvironmentClusterAliasRead, + Update: resourceVirtualEnvironmentClusterAliasUpdate, + Delete: resourceVirtualEnvironmentClusterAliasDelete, + } +} + +func resourceVirtualEnvironmentClusterAliasCreate(d *schema.ResourceData, m interface{}) error { + config := m.(providerConfiguration) + veClient, err := config.GetVEClient() + + if err != nil { + return err + } + + comment := d.Get(mkResourceVirtualEnvironmentClusterAliasComment).(string) + name := d.Get(mkResourceVirtualEnvironmentClusterAliasName).(string) + cidr := d.Get(mkResourceVirtualEnvironmentClusterAliasCIDR).(string) + + body := &proxmox.VirtualEnvironmentClusterAliasCreateRequestBody{ + Comment: &comment, + Name: name, + CIDR: cidr, + } + + err = veClient.CreateAlias(body) + + if err != nil { + return err + } + + d.SetId(name) + + return resourceVirtualEnvironmentClusterAliasRead(d, m) +} + +func resourceVirtualEnvironmentClusterAliasRead(d *schema.ResourceData, m interface{}) error { + config := m.(providerConfiguration) + veClient, err := config.GetVEClient() + + if err != nil { + return err + } + + name := d.Id() + alias, err := veClient.GetAlias(name) + + if err != nil { + if strings.Contains(err.Error(), "HTTP 404") { + d.SetId("") + return nil + } + + return err + } + + aliasMap := map[string]interface{}{ + mkResourceVirtualEnvironmentClusterAliasComment: alias.Comment, + mkResourceVirtualEnvironmentClusterAliasName: alias.Name, + mkResourceVirtualEnvironmentClusterAliasCIDR: alias.CIDR, + } + + for key, val := range aliasMap { + err = d.Set(key, val) + + if err != nil { + return err + } + } + + return nil +} + +func resourceVirtualEnvironmentClusterAliasUpdate(d *schema.ResourceData, m interface{}) error { + config := m.(providerConfiguration) + veClient, err := config.GetVEClient() + + if err != nil { + return err + } + + comment := d.Get(mkResourceVirtualEnvironmentClusterAliasComment).(string) + cidr := d.Get(mkResourceVirtualEnvironmentClusterAliasCIDR).(string) + newName := d.Get(mkResourceVirtualEnvironmentClusterAliasName).(string) + previousName := d.Id() + + body := &proxmox.VirtualEnvironmentClusterAliasUpdateRequestBody{ + ReName: newName, + CIDR: cidr, + Comment: &comment, + } + + err = veClient.UpdateAlias(previousName, body) + + if err != nil { + return err + } + + d.SetId(newName) + + return resourceVirtualEnvironmentClusterAliasRead(d, m) +} + + +func resourceVirtualEnvironmentClusterAliasDelete(d *schema.ResourceData, m interface{}) error { + config := m.(providerConfiguration) + veClient, err := config.GetVEClient() + + if err != nil { + return nil + } + + name := d.Id() + err = veClient.DeleteAlias(name) + + if err != nil { + if strings.Contains(err.Error(), "HTTP 404") { + d.SetId("") + return nil + } + + return err + } + + d.SetId("") + + return nil +} + + + + + + + + + + + + + + diff --git a/proxmoxtf/resource_virtual_environment_cluster_alias_test.go b/proxmoxtf/resource_virtual_environment_cluster_alias_test.go new file mode 100644 index 00000000..c5739675 --- /dev/null +++ b/proxmoxtf/resource_virtual_environment_cluster_alias_test.go @@ -0,0 +1,40 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +package proxmoxtf + +import ( + "testing" + + "github.com/hashicorp/terraform/helper/schema" +) + +// TestResourceVirtualEnvironmentAliasInstantiation tests whether the ResourceVirtualEnvironmentAlias instance can be instantiated. +func TestResourceVirtualEnvironmentAliasInstantiation(t *testing.T) { + s := resourceVirtualEnvironmentClusterAlias() + + if s == nil { + t.Fatalf("Cannot instantiate resourceVirtualEnvironmentAlias") + } +} + +// TestResourceVirtualEnvironmentAliasSchema tests the resourceVirtualEnvironmentAlias schema. +func TestResourceVirtualEnvironmentAliasSchema(t *testing.T) { + s := resourceVirtualEnvironmentClusterAlias() + + testRequiredArguments(t, s, []string{ + mkResourceVirtualEnvironmentClusterAliasName, + mkResourceVirtualEnvironmentClusterAliasCIDR, + }) + + testOptionalArguments(t, s, []string{ + mkResourceVirtualEnvironmentClusterAliasComment, + }) + + testValueTypes(t, s, map[string]schema.ValueType{ + mkResourceVirtualEnvironmentClusterAliasName: schema.TypeString, + mkResourceVirtualEnvironmentClusterAliasCIDR: schema.TypeString, + mkResourceVirtualEnvironmentClusterAliasComment: schema.TypeString, + }) +}