1414
1515from openstack import exceptions as sdk_exceptions
1616from openstack import resource
17- from otcextensions .tests .functional import base
1817
1918
2019class PrivateNatEnvironmentMixin (object ):
21- def _private_transit_ip_id (self ):
22- transit_ip_id = base ._get_resource_value ("private_transit_ip_id" , None )
23- if not transit_ip_id :
24- self .skipTest ("functional.private_transit_ip_id is required" )
25- return transit_ip_id
20+ def _delete_private_transit_ip (self , transit_ip_id ):
21+ self .conn .natv3 .delete_private_transit_ip (transit_ip_id , ignore_missing = True )
2622
27- def _create_private_nat_network_stack (self , prefix ):
28- cidr = "192.168.0.0/16"
29- suffix = uuid .uuid4 ().hex [:8 ]
23+ def _create_private_nat_vpc (self , prefix , suffix ):
3024 vpc_name = "{prefix}-vpc-{suffix}" .format (prefix = prefix , suffix = suffix )
31- subnet_name = "{prefix}-subnet-{suffix}" .format (prefix = prefix , suffix = suffix )
25+ return self .conn .vpc .create_vpc (name = vpc_name , cidr = "192.168.0.0/16" )
26+
27+ def _delete_private_nat_vpc (self , vpc ):
28+ try :
29+ vpc = self .conn .vpc .get_vpc (vpc .id )
30+ except sdk_exceptions .ResourceNotFound :
31+ return
32+
33+ self .conn .vpc .delete_vpc (vpc , ignore_missing = True )
34+ resource .wait_for_delete (self .conn .vpc , vpc , 2 , 120 )
3235
33- vpc = self .conn .vpc .create_vpc (name = vpc_name , cidr = cidr )
34- gw , _ = cidr .split ("/" )
36+ def _create_private_nat_subnet (self , vpc , prefix , suffix ):
37+ subnet_name = "{prefix}-subnet-{suffix}" .format (prefix = prefix , suffix = suffix )
38+ gw , _ = vpc .cidr .split ("/" )
3539 subnet = self .conn .vpc .create_subnet (
3640 name = subnet_name ,
3741 vpc_id = vpc .id ,
@@ -40,6 +44,22 @@ def _create_private_nat_network_stack(self, prefix):
4044 dns_list = ["100.125.4.25" , "100.125.129.199" ],
4145 )
4246 resource .wait_for_status (self .conn .vpc , subnet , "ACTIVE" , None , 2 , 60 )
47+ return subnet
48+
49+ def _delete_private_nat_subnet (self , subnet ):
50+ try :
51+ subnet = self .conn .vpc .get_subnet (subnet .id )
52+ except sdk_exceptions .ResourceNotFound :
53+ return
54+
55+ resource .wait_for_status (self .conn .vpc , subnet , "ACTIVE" , None , 2 , 60 )
56+ self .conn .vpc .delete_subnet (subnet , ignore_missing = True )
57+ resource .wait_for_delete (self .conn .vpc , subnet , 2 , 120 )
58+
59+ def _create_private_nat_network_stack (self , prefix ):
60+ suffix = uuid .uuid4 ().hex [:8 ]
61+ vpc = self ._create_private_nat_vpc (prefix , suffix )
62+ subnet = self ._create_private_nat_subnet (vpc , prefix , suffix )
4363
4464 return {
4565 "vpc" : vpc ,
@@ -52,23 +72,19 @@ def _cleanup_private_nat_network_stack(self, stack):
5272 vpc = stack .get ("vpc" )
5373
5474 if subnet :
55- try :
56- subnet = self .conn .vpc .get_subnet (subnet .id )
57- except sdk_exceptions .ResourceNotFound :
58- subnet = None
59- if subnet :
60- resource .wait_for_status (self .conn .vpc , subnet , "ACTIVE" , None , 2 , 60 )
61- self .conn .vpc .delete_subnet (subnet , ignore_missing = True )
62- resource .wait_for_delete (self .conn .vpc , subnet , 2 , 120 )
75+ self ._delete_private_nat_subnet (subnet )
6376
6477 if vpc :
65- try :
66- vpc = self .conn .vpc .get_vpc (vpc .id )
67- except sdk_exceptions .ResourceNotFound :
68- vpc = None
69- if vpc :
70- self .conn .vpc .delete_vpc (vpc , ignore_missing = True )
71- resource .wait_for_delete (self .conn .vpc , vpc , 2 , 120 )
78+ self ._delete_private_nat_vpc (vpc )
79+
80+ def _prepare_private_nat_subnet_environment (self , prefix ):
81+ suffix = uuid .uuid4 ().hex [:8 ]
82+ vpc = self ._create_private_nat_vpc (prefix , suffix )
83+ self .addCleanup (self ._delete_private_nat_vpc , vpc )
84+
85+ subnet = self ._create_private_nat_subnet (vpc , prefix , suffix )
86+ self .addCleanup (self ._delete_private_nat_subnet , subnet )
87+ return {"vpc" : vpc , "subnet" : subnet }
7288
7389 def _create_private_nat_gateway (self , subnet_id , prefix ):
7490 gateway = self .conn .natv3 .create_private_nat_gateway (
@@ -90,39 +106,6 @@ def _delete_private_nat_gateway(self, gateway):
90106 self .conn .natv3 .delete_private_nat_gateway (gateway , ignore_missing = True )
91107 resource .wait_for_delete (self .conn .natv3 , gateway , 2 , 120 )
92108
93- def _create_private_nat_port (self , network_id , prefix ):
94- if hasattr (self , "create_port" ):
95- return self .create_port (network_id , prefix = prefix )
96- return self .conn .network .create_port (
97- name = "{prefix}-port-{suffix}" .format (
98- prefix = prefix , suffix = uuid .uuid4 ().hex [:8 ]
99- ),
100- network_id = network_id ,
101- )
102-
103- def _delete_private_nat_port (self , port ):
104- if hasattr (self , "destroy_port" ):
105- try :
106- self .destroy_port (port )
107- except sdk_exceptions .ResourceNotFound :
108- return
109- return
110- self .conn .network .delete_port (port , ignore_missing = True )
111-
112- def _prepare_private_nat_environment (self , prefix ):
113- env = {
114- "transit_ip_id" : self ._private_transit_ip_id (),
115- }
116-
117- stack = self ._prepare_private_nat_gateway_environment (prefix )
118- env ["stack" ] = stack ["stack" ]
119- env ["gateway" ] = stack ["gateway" ]
120-
121- port = self ._create_private_nat_port (stack ["stack" ]["network_id" ], prefix )
122- self .addCleanup (self ._delete_private_nat_port , port )
123- env ["port" ] = port
124- return env
125-
126109 def _prepare_private_nat_gateway_environment (self , prefix ):
127110 stack = self ._create_private_nat_network_stack (prefix )
128111 self .addCleanup (self ._cleanup_private_nat_network_stack , stack )
0 commit comments