provider/openstack: gophercloud migration: networking secgroup

This commit is contained in:
Joe Topjian 2016-09-04 02:54:53 +00:00
parent 2f957e24fe
commit f2ba380794
4 changed files with 64 additions and 14 deletions

View File

@ -9,8 +9,8 @@ import (
"github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
"github.com/rackspace/gophercloud" "github.com/gophercloud/gophercloud"
"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/security/rules" "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules"
) )
func resourceNetworkingSecGroupRuleV2() *schema.Resource { func resourceNetworkingSecGroupRuleV2() *schema.Resource {
@ -106,17 +106,29 @@ func resourceNetworkingSecGroupRuleV2Create(d *schema.ResourceData, meta interfa
} }
opts := rules.CreateOpts{ opts := rules.CreateOpts{
Direction: d.Get("direction").(string),
EtherType: d.Get("ethertype").(string),
SecGroupID: d.Get("security_group_id").(string), SecGroupID: d.Get("security_group_id").(string),
PortRangeMin: d.Get("port_range_min").(int), PortRangeMin: d.Get("port_range_min").(int),
PortRangeMax: d.Get("port_range_max").(int), PortRangeMax: d.Get("port_range_max").(int),
Protocol: d.Get("protocol").(string),
RemoteGroupID: d.Get("remote_group_id").(string), RemoteGroupID: d.Get("remote_group_id").(string),
RemoteIPPrefix: d.Get("remote_ip_prefix").(string), RemoteIPPrefix: d.Get("remote_ip_prefix").(string),
TenantID: d.Get("tenant_id").(string), TenantID: d.Get("tenant_id").(string),
} }
if v, ok := d.GetOk("direction"); ok {
direction := resourceNetworkingSecGroupRuleV2DetermineDirection(v.(string))
opts.Direction = direction
}
if v, ok := d.GetOk("ethertype"); ok {
ethertype := resourceNetworkingSecGroupRuleV2DetermineEtherType(v.(string))
opts.EtherType = ethertype
}
if v, ok := d.GetOk("protocol"); ok {
protocol := resourceNetworkingSecGroupRuleV2DetermineProtocol(v.(string))
opts.Protocol = protocol
}
log.Printf("[DEBUG] Create OpenStack Neutron security group: %#v", opts) log.Printf("[DEBUG] Create OpenStack Neutron security group: %#v", opts)
security_group_rule, err := rules.Create(networkingClient, opts).Extract() security_group_rule, err := rules.Create(networkingClient, opts).Extract()
@ -185,13 +197,51 @@ func resourceNetworkingSecGroupRuleV2Delete(d *schema.ResourceData, meta interfa
return err return err
} }
func resourceNetworkingSecGroupRuleV2DetermineDirection(v string) rules.RuleDirection {
var direction rules.RuleDirection
switch v {
case "ingress":
direction = rules.DirIngress
case "egress":
direction = rules.DirEgress
}
return direction
}
func resourceNetworkingSecGroupRuleV2DetermineEtherType(v string) rules.RuleEtherType {
var etherType rules.RuleEtherType
switch v {
case "IPv4":
etherType = rules.EtherType4
case "IPv6":
etherType = rules.EtherType6
}
return etherType
}
func resourceNetworkingSecGroupRuleV2DetermineProtocol(v string) rules.RuleProtocol {
var protocol rules.RuleProtocol
switch v {
case "tcp":
protocol = rules.ProtocolTCP
case "udp":
protocol = rules.ProtocolUDP
case "icmp":
protocol = rules.ProtocolICMP
}
return protocol
}
func waitForSecGroupRuleDelete(networkingClient *gophercloud.ServiceClient, secGroupRuleId string) resource.StateRefreshFunc { func waitForSecGroupRuleDelete(networkingClient *gophercloud.ServiceClient, secGroupRuleId string) resource.StateRefreshFunc {
return func() (interface{}, string, error) { return func() (interface{}, string, error) {
log.Printf("[DEBUG] Attempting to delete OpenStack Security Group Rule %s.\n", secGroupRuleId) log.Printf("[DEBUG] Attempting to delete OpenStack Security Group Rule %s.\n", secGroupRuleId)
r, err := rules.Get(networkingClient, secGroupRuleId).Extract() r, err := rules.Get(networkingClient, secGroupRuleId).Extract()
if err != nil { if err != nil {
errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode)
if !ok { if !ok {
return r, "ACTIVE", err return r, "ACTIVE", err
} }
@ -203,7 +253,7 @@ func waitForSecGroupRuleDelete(networkingClient *gophercloud.ServiceClient, secG
err = rules.Delete(networkingClient, secGroupRuleId).ExtractErr() err = rules.Delete(networkingClient, secGroupRuleId).ExtractErr()
if err != nil { if err != nil {
errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode)
if !ok { if !ok {
return r, "ACTIVE", err return r, "ACTIVE", err
} }

View File

@ -7,8 +7,8 @@ import (
"github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform" "github.com/hashicorp/terraform/terraform"
"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/security/groups" "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups"
"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/security/rules" "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules"
) )
func TestAccNetworkingV2SecGroupRule_basic(t *testing.T) { func TestAccNetworkingV2SecGroupRule_basic(t *testing.T) {

View File

@ -8,8 +8,8 @@ import (
"github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
"github.com/rackspace/gophercloud" "github.com/gophercloud/gophercloud"
"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/security/groups" "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups"
) )
func resourceNetworkingSecGroupV2() *schema.Resource { func resourceNetworkingSecGroupV2() *schema.Resource {
@ -131,7 +131,7 @@ func waitForSecGroupDelete(networkingClient *gophercloud.ServiceClient, secGroup
r, err := groups.Get(networkingClient, secGroupId).Extract() r, err := groups.Get(networkingClient, secGroupId).Extract()
if err != nil { if err != nil {
errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode)
if !ok { if !ok {
return r, "ACTIVE", err return r, "ACTIVE", err
} }
@ -143,7 +143,7 @@ func waitForSecGroupDelete(networkingClient *gophercloud.ServiceClient, secGroup
err = groups.Delete(networkingClient, secGroupId).ExtractErr() err = groups.Delete(networkingClient, secGroupId).ExtractErr()
if err != nil { if err != nil {
errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode)
if !ok { if !ok {
return r, "ACTIVE", err return r, "ACTIVE", err
} }

View File

@ -7,7 +7,7 @@ import (
"github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform" "github.com/hashicorp/terraform/terraform"
"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/security/groups" "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups"
) )
func TestAccNetworkingV2SecGroup_basic(t *testing.T) { func TestAccNetworkingV2SecGroup_basic(t *testing.T) {