@ -7,6 +7,7 @@ import (
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups"
"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
"github.com/gophercloud/gophercloud/openstack/networking/v2/ports"
"github.com/gophercloud/gophercloud/openstack/networking/v2/subnets"
@ -168,6 +169,54 @@ func TestAccNetworkingV2Port_fixedIPs(t *testing.T) {
} )
}
func TestAccNetworkingV2Port_updateSecurityGroups ( t * testing . T ) {
var network networks . Network
var port ports . Port
var security_group groups . SecGroup
var subnet subnets . Subnet
resource . Test ( t , resource . TestCase {
PreCheck : func ( ) { testAccPreCheck ( t ) } ,
Providers : testAccProviders ,
CheckDestroy : testAccCheckNetworkingV2PortDestroy ,
Steps : [ ] resource . TestStep {
resource . TestStep {
Config : testAccNetworkingV2Port_updateSecurityGroups_1 ,
Check : resource . ComposeTestCheckFunc (
testAccCheckNetworkingV2SubnetExists ( "openstack_networking_subnet_v2.subnet_1" , & subnet ) ,
testAccCheckNetworkingV2NetworkExists ( "openstack_networking_network_v2.network_1" , & network ) ,
testAccCheckNetworkingV2PortExists ( "openstack_networking_port_v2.port_1" , & port ) ,
testAccCheckNetworkingV2SecGroupExists (
"openstack_networking_secgroup_v2.secgroup_1" , & security_group ) ,
testAccCheckNetworkingV2PortCountSecurityGroups ( & port , 1 ) ,
) ,
} ,
resource . TestStep {
Config : testAccNetworkingV2Port_updateSecurityGroups_2 ,
Check : resource . ComposeTestCheckFunc (
testAccCheckNetworkingV2SubnetExists ( "openstack_networking_subnet_v2.subnet_1" , & subnet ) ,
testAccCheckNetworkingV2NetworkExists ( "openstack_networking_network_v2.network_1" , & network ) ,
testAccCheckNetworkingV2PortExists ( "openstack_networking_port_v2.port_1" , & port ) ,
testAccCheckNetworkingV2SecGroupExists (
"openstack_networking_secgroup_v2.secgroup_1" , & security_group ) ,
testAccCheckNetworkingV2PortCountSecurityGroups ( & port , 1 ) ,
) ,
} ,
resource . TestStep {
Config : testAccNetworkingV2Port_updateSecurityGroups_3 ,
Check : resource . ComposeTestCheckFunc (
testAccCheckNetworkingV2SubnetExists ( "openstack_networking_subnet_v2.subnet_1" , & subnet ) ,
testAccCheckNetworkingV2NetworkExists ( "openstack_networking_network_v2.network_1" , & network ) ,
testAccCheckNetworkingV2PortExists ( "openstack_networking_port_v2.port_1" , & port ) ,
testAccCheckNetworkingV2SecGroupExists (
"openstack_networking_secgroup_v2.secgroup_1" , & security_group ) ,
testAccCheckNetworkingV2PortCountSecurityGroups ( & port , 0 ) ,
) ,
} ,
} ,
} )
}
func testAccCheckNetworkingV2PortDestroy ( s * terraform . State ) error {
config := testAccProvider . Meta ( ) . ( * Config )
networkingClient , err := config . networkingV2Client ( OS_REGION_NAME )
@ -231,6 +280,16 @@ func testAccCheckNetworkingV2PortCountFixedIPs(port *ports.Port, expected int) r
}
}
func testAccCheckNetworkingV2PortCountSecurityGroups ( port * ports . Port , expected int ) resource . TestCheckFunc {
return func ( s * terraform . State ) error {
if len ( port . SecurityGroups ) != expected {
return fmt . Errorf ( "Expected %d Security Groups, got %d" , expected , len ( port . SecurityGroups ) )
}
return nil
}
}
const testAccNetworkingV2Port_basic = `
resource "openstack_networking_network_v2" "network_1" {
name = "network_1"
@ -472,3 +531,95 @@ resource "openstack_networking_port_v2" "port_1" {
}
}
`
const testAccNetworkingV2Port_updateSecurityGroups_1 = `
resource "openstack_networking_network_v2" "network_1" {
name = "network_1"
admin_state_up = "true"
}
resource "openstack_networking_subnet_v2" "subnet_1" {
name = "subnet_1"
cidr = "192.168.199.0/24"
ip_version = 4
network_id = "${openstack_networking_network_v2.network_1.id}"
}
resource "openstack_networking_secgroup_v2" "secgroup_1" {
name = "security_group"
description = "terraform security group acceptance test"
}
resource "openstack_networking_port_v2" "port_1" {
name = "port_1"
admin_state_up = "true"
network_id = "${openstack_networking_network_v2.network_1.id}"
fixed_ip {
subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
ip_address = "192.168.199.23"
}
}
`
const testAccNetworkingV2Port_updateSecurityGroups_2 = `
resource "openstack_networking_network_v2" "network_1" {
name = "network_1"
admin_state_up = "true"
}
resource "openstack_networking_subnet_v2" "subnet_1" {
name = "subnet_1"
cidr = "192.168.199.0/24"
ip_version = 4
network_id = "${openstack_networking_network_v2.network_1.id}"
}
resource "openstack_networking_secgroup_v2" "secgroup_1" {
name = "security_group"
description = "terraform security group acceptance test"
}
resource "openstack_networking_port_v2" "port_1" {
name = "port_1"
admin_state_up = "true"
network_id = "${openstack_networking_network_v2.network_1.id}"
security_group_ids = [ "${openstack_networking_secgroup_v2.secgroup_1.id}" ]
fixed_ip {
subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
ip_address = "192.168.199.23"
}
}
`
const testAccNetworkingV2Port_updateSecurityGroups_3 = `
resource "openstack_networking_network_v2" "network_1" {
name = "network_1"
admin_state_up = "true"
}
resource "openstack_networking_subnet_v2" "subnet_1" {
name = "subnet_1"
cidr = "192.168.199.0/24"
ip_version = 4
network_id = "${openstack_networking_network_v2.network_1.id}"
}
resource "openstack_networking_secgroup_v2" "secgroup_1" {
name = "security_group"
description = "terraform security group acceptance test"
}
resource "openstack_networking_port_v2" "port_1" {
name = "port_1"
admin_state_up = "true"
network_id = "${openstack_networking_network_v2.network_1.id}"
security_group_ids = [ ]
fixed_ip {
subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
ip_address = "192.168.199.23"
}
}
`