def allocate_floating_task(floating=None): rc = create_rc_by_floating(floating) LOG.info("Begin to allocate floating, [%s]" % floating.id); pools = network.floating_ip_pools_list(rc) ext_net = filter(lambda n: n.name.lower() == \ floating.user_data_center.data_center.ext_net, pools) ext_net_id = None if ext_net and len(ext_net) > 0: ext_net_id = ext_net[0].id if ext_net_id: try: fip = network.tenant_floating_ip_allocate(rc, pool=ext_net_id) floating.ip = fip.ip floating.status = FLOATING_AVAILABLE floating.uuid = fip.id floating.save() billing_task.charge_resource(floating.id, Floating) LOG.info("End to allocate floating, [%s][%s]" % (floating.id, fip.ip)); except Exception as e: floating.status = FLOATING_ERROR floating.save() LOG.exception(e) LOG.info("End to allocate floating, [%s][exception]" % floating.id); else: floating.status = FLOATING_ERROR floating.save() LOG.info("End to allocate floating, [%s][---]" % floating.id);
def floating_disassociate(floating, **kwargs): rc = create_rc_by_floating(floating) LOG.info("floating action, [%s][disassociate][port:%s]" % (floating.id, floating.port_id)) try: if floating.uuid and floating.port_id: network.floating_ip_disassociate(rc, floating.uuid, floating.port_id) if floating.resource_type == 'INSTANCE': ins = Instance.objects.get(pk=floating.resource) ins.public_ip = None ins.save() elif floating.resource_type == 'LOADBALANCER': pool = BalancerPool.objects.get(pk=floating.resource) vip = BalancerVIP.objects.get(pk=pool.vip.id) vip.public_address = None vip.save() #floating.instance = None floating.resource = None floating.resource_type = None floating.status = FLOATING_AVAILABLE floating.fixed_ip = None floating.port_id = None floating.save() except Exception as e: return False
def floating_disassociate(floating, **kwargs): rc = create_rc_by_floating(floating) LOG.info("floating action, [%s][disassociate][port:%s]" % (floating.id, floating.port_id)); try: if floating.uuid and floating.port_id: network.floating_ip_disassociate(rc, floating.uuid, floating.port_id) if floating.resource_type == 'INSTANCE': ins = Instance.objects.get(pk=floating.resource) ins.public_ip = None ins.save() elif floating.resource_type == 'LOADBALANCER': pool = BalancerPool.objects.get(pk=floating.resource) vip = BalancerVIP.objects.get(pk=pool.vip.id) vip.public_address = None vip.save() #floating.instance = None floating.resource = None floating.resource_type = None floating.status = FLOATING_AVAILABLE floating.fixed_ip = None floating.port_id = None floating.save() except Exception as e: return False
def floating_associate(floating, **kwargs): resource_type_dict = dict(RESOURCE_TYPE) resource_type = kwargs.get('resource_type')[0] resource = kwargs.get('resource')[0] if resource: rc = create_rc_by_floating(floating) ports = None resource_obj = None if resource_type_dict[str(resource_type)] == 'INSTANCE': ins = Instance.objects.get(pk=resource) resource_obj = ins if neutron.is_neutron_enabled(rc): ports = network.floating_ip_target_get_by_instance(rc, ins.uuid) else: ports = ins.uuid elif resource_type_dict[resource_type] == 'LOADBALANCER': pool = BalancerPool.objects.get(pk=resource) if not pool or not pool.vip: floating.status = FLOATING_AVAILABLE floating.save() return None resource_obj = pool ports = pool.vip.port_id+"_"+pool.vip.address if not ports: LOG.info("floating action, resourceType[%s],[%s][associate][ins:%s] ports is None" % (resource_type_dict[resource_type], floating.id, resource)); floating.status = FLOATING_AVAILABLE floating.save() return LOG.info("floating action, [%s][associate][ins:%s][ports:%s]" % ( floating.id, resource, ports)) try: network.floating_ip_associate(rc, floating.uuid, ports) if len(ports.split('_')) > 1: port, fixed_ip = ports.split('_') else: port, fixed_ip = ports, ports floating.resource = resource floating.resource_type = resource_type floating.status = FLOATING_BINDED floating.fixed_ip = fixed_ip floating.port_id = port floating.save() if resource_type_dict[str(resource_type)] == 'INSTANCE': resource_obj.public_ip = floating.ip resource_obj.save() elif resource_type_dict[resource_type] == 'LOADBALANCER': vip = BalancerVIP.objects.get(pk=resource_obj.vip.id) vip.public_address = floating.ip vip.save() except Exception as e: LOG.exception(e) floating.status = FLOATING_AVAILABLE floating.save() else: LOG.info("floating action, [%s][associate] no ins_id" % floating.id);
def floating_release(floating, **kwargs): rc = create_rc_by_floating(floating) result = True if floating.uuid: result = network.tenant_floating_ip_release(rc, floating.uuid) floating.status = FLOATING_RELEASED floating.deleted = 1 floating.delete_date = datetime.datetime.now() floating.save() LOG.info("floating action, [%s][relese][%s]" % (floating.id, result));
def floating_disassociate(floating, **kwargs): rc = create_rc_by_floating(floating) LOG.info("floating action, [%s][disassociate][port:%s]" % (floating.id, floating.port_id)) if floating.uuid and floating.port_id: network.floating_ip_disassociate(rc, floating.uuid, floating.port_id) floating.instance = None floating.status = FLOATING_AVAILABLE floating.fixed_ip = None floating.port_id = None floating.save()
def floating_disassociate(floating, **kwargs): LOG.info("Begin to disassociate floating [%s]", floating) try: if floating.uuid and floating.port_id: rc = create_rc_by_floating(floating) network.floating_ip_disassociate(rc, floating.uuid, floating.port_id) except Exception: LOG.exception("Failed to disassociate floating[%s]", floating) floating.status = FLOATING_BINDED floating.save() return False else: floating.unbind_resource() LOG.info("Floating IP[%s] is disassociated.", floating) return True
def floating_release(floating, **kwargs): rc = create_rc_by_floating(floating) result = True if floating.uuid: result = network.tenant_floating_ip_release(rc, floating.uuid) LOG.info("release floating associate instance, [%s]" % result) floating.status = FLOATING_RELEASED floating.deleted = 1 floating.delete_date = datetime.datetime.now() floating.save() if floating.ip: ins = Instance.objects.filter(public_ip=floating.ip) ins.update(public_ip=None) LOG.info("floating action, [%s][relese][%s]" % (floating.id, result))
def floating_release(floating, **kwargs): rc = create_rc_by_floating(floating) result = True if floating.uuid: result = network.tenant_floating_ip_release(rc, floating.uuid) LOG.info("release floating associate instance, [%s]" % result) floating.status = FLOATING_RELEASED floating.deleted = 1 floating.delete_date = datetime.datetime.now() floating.save() if floating.ip: ins = Instance.objects.filter(public_ip=floating.ip) ins.update(public_ip=None) LOG.info("floating action, [%s][relese][%s]" % (floating.id, result));
def floating_associate(floating, **kwargs): ins_id = kwargs.get("instance_id")[0] if ins_id: rc = create_rc_by_floating(floating) ins = Instance.objects.get(pk=ins_id) ports = network.floating_ip_target_get_by_instance(rc, ins.uuid) if not ports: LOG.info("floating action, [%s][associate][ins:%s] ports is None" % (floating.id, ins_id)) floating.status = FLOATING_AVAILABLE floating.save() return LOG.info("floating action, [%s][associate][ins:%s][ports:%s]" % (floating.id, ins.id, ports)) network.floating_ip_associate(rc, floating.uuid, ports) port, fixed_ip = ports.split("_") floating.instance = ins floating.status = FLOATING_BINDED floating.fixed_ip = fixed_ip floating.port_id = port floating.save() else: LOG.info("floating action, [%s][associate] no ins_id" % floating.id)
def allocate_floating_task(floating=None): rc = create_rc_by_floating(floating) LOG.info("Begin to allocate floating, [%s]" % floating.id); search_opts = {'router:external': True} networks = neutron.network_list(rc, **search_opts) ext_net = filter(lambda n: n.name.lower() == floating.user_data_center.data_center.ext_net, networks) ext_net_id = None if ext_net and len(ext_net) > 0: ext_net_id = ext_net[0].id if ext_net_id: try: fip = network.tenant_floating_ip_allocate(rc, pool=ext_net_id) floating.ip = fip.ip floating.status = FLOATING_AVAILABLE floating.uuid = fip.id floating.save(); LOG.info("End to allocate floating, [%s][%s]" % (floating.id, fip.ip)); except Exception as e: floating.status = FLOATING_ERROR floating.save(); LOG.exception(e); LOG.info("End to allocate floating, [%s][exception]" % floating.id); else: LOG.info("End to allocate floating, [%s][---]" % floating.id);
def floating_associate(floating, **kwargs): resource_type_dict = dict(RESOURCE_TYPE) resource_type = kwargs.get('resource_type')[0] resource = kwargs.get('resource')[0] if resource: rc = create_rc_by_floating(floating) ports = None resource_obj = None if resource_type_dict[str(resource_type)] == 'INSTANCE': ins = Instance.objects.get(pk=resource) resource_obj = ins if neutron.is_neutron_enabled(rc): ports = network.floating_ip_target_get_by_instance(rc, ins.uuid) else: ports = ins.uuid elif resource_type_dict[resource_type] == 'LOADBALANCER': pool = BalancerPool.objects.get(pk=resource) if not pool or not pool.vip: floating.status = FLOATING_AVAILABLE floating.save() return None resource_obj = pool ports = pool.vip.port_id+"_"+pool.vip.address if not ports: LOG.info("floating action, resourceType[%s],[%s][associate][ins:%s] ports is None" % (resource_type_dict[resource_type], floating.id, resource)); floating.status = FLOATING_AVAILABLE floating.resource = None floating.resource_type = None floating.save() return LOG.info("floating action, [%s][associate][ins:%s][ports:%s]" % ( floating.id, resource, ports)) try: network.floating_ip_associate(rc, floating.uuid, ports) if len(ports.split('_')) > 1: port, fixed_ip = ports.split('_') else: port, fixed_ip = ports, ports floating.resource = resource floating.resource_type = resource_type floating.status = FLOATING_BINDED floating.fixed_ip = fixed_ip floating.port_id = port floating.save() if resource_type_dict[str(resource_type)] == 'INSTANCE': resource_obj.public_ip = floating.ip resource_obj.save() elif resource_type_dict[resource_type] == 'LOADBALANCER': vip = BalancerVIP.objects.get(pk=resource_obj.vip.id) vip.public_address = floating.ip vip.save() except Exception as e: LOG.exception(e) floating.status = FLOATING_AVAILABLE floating.resource = None floating.resource_type = None floating.save() else: LOG.info("floating action, [%s][associate] no ins_id" % floating.id);