mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-16 02:23:39 -06:00
Of course not all resources are covered by this first release, but there should be enough resources available to handle most common operations. Tests and docs are included.
124 lines
2.8 KiB
Go
124 lines
2.8 KiB
Go
package cloudstack
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"strings"
|
|
|
|
"github.com/hashicorp/terraform/helper/schema"
|
|
"github.com/xanzy/go-cloudstack/cloudstack"
|
|
)
|
|
|
|
func resourceCloudStackNetworkACL() *schema.Resource {
|
|
return &schema.Resource{
|
|
Create: resourceCloudStackNetworkACLCreate,
|
|
Read: resourceCloudStackNetworkACLRead,
|
|
Delete: resourceCloudStackNetworkACLDelete,
|
|
|
|
Schema: map[string]*schema.Schema{
|
|
"name": &schema.Schema{
|
|
Type: schema.TypeString,
|
|
Required: true,
|
|
ForceNew: true,
|
|
},
|
|
|
|
"description": &schema.Schema{
|
|
Type: schema.TypeString,
|
|
Optional: true,
|
|
Computed: true,
|
|
ForceNew: true,
|
|
},
|
|
|
|
"vpc": &schema.Schema{
|
|
Type: schema.TypeString,
|
|
Required: true,
|
|
ForceNew: true,
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func resourceCloudStackNetworkACLCreate(d *schema.ResourceData, meta interface{}) error {
|
|
cs := meta.(*cloudstack.CloudStackClient)
|
|
|
|
name := d.Get("name").(string)
|
|
|
|
// Retrieve the vpc UUID
|
|
vpcid, e := retrieveUUID(cs, "vpc", d.Get("vpc").(string))
|
|
if e != nil {
|
|
return e.Error()
|
|
}
|
|
|
|
// Create a new parameter struct
|
|
p := cs.NetworkACL.NewCreateNetworkACLListParams(name, vpcid)
|
|
|
|
// Set the description
|
|
if description, ok := d.GetOk("description"); ok {
|
|
p.SetDescription(description.(string))
|
|
} else {
|
|
p.SetDescription(name)
|
|
}
|
|
|
|
// Create the new network ACL list
|
|
r, err := cs.NetworkACL.CreateNetworkACLList(p)
|
|
if err != nil {
|
|
return fmt.Errorf("Error creating network ACL list %s: %s", name, err)
|
|
}
|
|
|
|
d.SetId(r.Id)
|
|
|
|
return resourceCloudStackNetworkACLRead(d, meta)
|
|
}
|
|
|
|
func resourceCloudStackNetworkACLRead(d *schema.ResourceData, meta interface{}) error {
|
|
cs := meta.(*cloudstack.CloudStackClient)
|
|
|
|
// Get the network ACL list details
|
|
f, count, err := cs.NetworkACL.GetNetworkACLListByID(d.Id())
|
|
if err != nil {
|
|
if count == 0 {
|
|
log.Printf(
|
|
"[DEBUG] Network ACL list %s does no longer exist", d.Get("name").(string))
|
|
d.SetId("")
|
|
return nil
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
d.Set("name", f.Name)
|
|
d.Set("description", f.Description)
|
|
|
|
// Get the VPC details
|
|
v, _, err := cs.VPC.GetVPCByID(f.Vpcid)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
d.Set("vpc", v.Name)
|
|
|
|
return nil
|
|
}
|
|
|
|
func resourceCloudStackNetworkACLDelete(d *schema.ResourceData, meta interface{}) error {
|
|
cs := meta.(*cloudstack.CloudStackClient)
|
|
|
|
// Create a new parameter struct
|
|
p := cs.NetworkACL.NewDeleteNetworkACLListParams(d.Id())
|
|
|
|
// Delete the network ACL list
|
|
_, err := cs.NetworkACL.DeleteNetworkACLList(p)
|
|
if err != nil {
|
|
// This is a very poor way to be told the UUID does no longer exist :(
|
|
if strings.Contains(err.Error(), fmt.Sprintf(
|
|
"Invalid parameter id value=%s due to incorrect long value format, "+
|
|
"or entity does not exist", d.Id())) {
|
|
return nil
|
|
}
|
|
|
|
return fmt.Errorf("Error deleting network ACL list %s: %s", d.Get("name").(string), err)
|
|
}
|
|
|
|
return nil
|
|
}
|