3 from planetstack.config import Config
4 from observer.openstacksyncstep import OpenStackSyncStep
5 from core.models.network import *
7 class SyncNetworks(OpenStackSyncStep):
11 def save_network(self, network):
12 if not network.network_id:
13 if network.template.sharedNetworkName:
14 network.network_id = network.template.sharedNetworkId
15 (network.subnet_id, network.subnet) = self.driver.get_network_subnet(network.network_id)
17 network_name = network.name
20 os_network = self.driver.create_network(network_name, shared=True)
21 network.network_id = os_network['id']
24 router = self.driver.create_router(network_name)
25 network.router_id = router['id']
28 next_subnet = self.get_next_subnet()
29 cidr = str(next_subnet.cidr)
30 ip_version = next_subnet.version
31 start = str(next_subnet[2])
32 end = str(next_subnet[-2])
33 subnet = self.driver.create_subnet(name=network_name,
34 network_id = network.network_id,
36 ip_version = ip_version,
40 network.subnet_id = subnet['id']
41 # add subnet as interface to slice's router
42 self.driver.add_router_interface(router['id'], subnet['id'])
44 self.driver.add_external_route(subnet)
46 def sync_record(self, site):
47 if network.owner and network.owner.creator:
49 # update manager context
50 real_driver = self.driver
51 self.driver = self.driver.client_driver(network.owner.creator, network.owner.name)
52 self.save_network(network)
53 self.driver = real_driver
54 logger.info("saved network: %s" % (network))
56 logger.log_exc("save network failed: %s" % network)