X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fobserver%2Fsteps%2Fsync_networks.py;fp=planetstack%2Fobserver%2Fsteps%2Fsync_networks.py;h=7ae7dc2593aae603001c13e565c1ddbd8988885a;hb=24836f18c96de50f93cacb2be40f311f66e4876a;hp=0000000000000000000000000000000000000000;hpb=f61e17af98a435ab1eac843ee865abff81f5fa4c;p=plstackapi.git diff --git a/planetstack/observer/steps/sync_networks.py b/planetstack/observer/steps/sync_networks.py new file mode 100644 index 0000000..7ae7dc2 --- /dev/null +++ b/planetstack/observer/steps/sync_networks.py @@ -0,0 +1,50 @@ +import os +import base64 +from planetstack.config import Config + +class SyncNetworks(OpenStackSyncStep): + provides=[Network] + + def save_network(self, network): + if not network.network_id: + if network.template.sharedNetworkName: + network.network_id = network.template.sharedNetworkId + (network.subnet_id, network.subnet) = self.driver.get_network_subnet(network.network_id) + else: + network_name = network.name + + # create network + os_network = self.driver.create_network(network_name, shared=True) + network.network_id = os_network['id'] + + # create router + router = self.driver.create_router(network_name) + network.router_id = router['id'] + + # create subnet + next_subnet = self.get_next_subnet() + cidr = str(next_subnet.cidr) + ip_version = next_subnet.version + start = str(next_subnet[2]) + end = str(next_subnet[-2]) + subnet = self.driver.create_subnet(name=network_name, + network_id = network.network_id, + cidr_ip = cidr, + ip_version = ip_version, + start = start, + end = end) + network.subnet = cidr + network.subnet_id = subnet['id'] + + @require_enabled + def sync_record(self, site): + if network.owner and network.owner.creator: + try: + # update manager context + self.driver.init_caller(network.owner.creator, network.owner.name) + self.save_network(network) + logger.info("saved network: %s" % (network)) + except Exception,e: + logger.log_exc("save network failed: %s" % network) + raise e +