40
42
'Schema': tags_schema}}
43
def __init__(self, name, json_snippet, stack):
44
super(VPC, self).__init__(name, json_snippet, stack)
46
45
def handle_create(self):
47
46
client = self.quantum()
48
props = {'name': self.physical_resource_name()}
49
# Creates a network with an implicit router
50
net = client.create_network({'network': props})['network']
51
router = client.create_router({'router': props})['router']
53
'router_id': router['id'],
54
'all_router_ids': [router['id']]
47
# The VPC's net and router are associated by having identical names.
48
net_props = {'name': self.physical_resource_name()}
49
router_props = {'name': self.physical_resource_name()}
51
net = client.create_network({'network': net_props})['network']
52
client.create_router({'router': router_props})['router']
57
54
self.resource_id_set(net['id'])
57
def network_for_vpc(client, network_id):
58
return client.show_network(network_id)['network']
61
def router_for_vpc(client, network_id):
62
# first get the quantum net
63
net = VPC.network_for_vpc(client, network_id)
64
# then find a router with the same name
65
routers = client.list_routers(name=net['name'])['routers']
67
# There may be no router if the net was created manually
68
# instead of in another stack.
71
raise exception.Error(
72
_('Multiple routers found with name %s') % net['name'])
75
def check_create_complete(self, *args):
76
net = self.network_for_vpc(self.quantum(), self.resource_id)
77
if not quantum.QuantumResource.is_built(net):
79
router = self.router_for_vpc(self.quantum(), self.resource_id)
80
return quantum.QuantumResource.is_built(router)
59
82
def handle_delete(self):
60
83
from quantumclient.common.exceptions import QuantumClientException
62
84
client = self.quantum()
63
network_id = self.resource_id
64
router_id = self.metadata['router_id']
66
client.delete_router(router_id)
67
except QuantumClientException as ex:
68
if ex.status_code != 404:
72
client.delete_network(network_id)
73
except QuantumClientException as ex:
74
if ex.status_code != 404:
77
def handle_update(self, json_snippet):
78
return self.UPDATE_REPLACE
85
router = self.router_for_vpc(client, self.resource_id)
87
client.delete_router(router['id'])
88
except QuantumClientException as ex:
89
if ex.status_code != 404:
93
client.delete_network(self.resource_id)
94
except QuantumClientException as ex:
95
if ex.status_code != 404:
81
99
def resource_mapping():