示例#1
0
def sync_subnets():
    try:
        logger.info("Starting Subnet Synchronizing")
        neutron_creds = get_neutron_creds(
            cfg.get('openstack', 'admin_username'),
            cfg.get('openstack', 'admin_password'), "admin")
        neutron = neutronclient.Client(**neutron_creds)
        nc = NuageConnection(cfg.get('vsd', 'hostname'),
                             enterprise=cfg.get('vsd', 'enterprise'),
                             username=cfg.get('vsd', 'username'),
                             password=cfg.get('vsd', 'password'),
                             version=cfg.get('vsd', 'version'),
                             port=cfg.get('vsd', 'port'))
        try:
            subnet_mappings = get_current_subnet_mappings()
        except Exception, e:
            logger.error(
                "|- ERROR getting current subnet mappings from OpenStack MYSQL database"
            )
            logger.error(repr(e))
            return
        #First clean up existing Networks without attached subnets
        try:
            logger.info("Cleaning up Networks without subnets attached")
            cleanup_os_networks()
        except Exception, e:
            logger.error(
                "|- ERROR cleaning up Networks without subnets attached")
            logger.error(repr(e))
示例#2
0
def delete_vms_in_tenant(tenant_name):
    logger.info("Deleting all VMs for tenant: %s" % tenant_name)
    nova_creds = get_admin_nova_creds(tenant_name)
    nova = novaclient.Client(**nova_creds)
    try:
        for server in nova.servers.list():
            logger.info("Deleting Server: %s" % server['id'])
            server.delete()
    except Exception, e:
        logger.error("|- ERROR deleting VM: %s" % server['id'])
        logger.error(repr(e))
示例#3
0
def delete_vms_in_tenant(tenant_name):
    logger.info("Deleting all VMs for tenant: %s" % tenant_name)
    nova_creds = get_admin_nova_creds(tenant_name)
    nova = novaclient.Client(**nova_creds)
    try:
        for server in nova.servers.list():
            logger.info("Deleting Server: %s" % server['id'])
            server.delete()
    except Exception, e:
        logger.error("|- ERROR deleting VM: %s" % server['id'])
        logger.error(repr(e))
示例#4
0
def vsd_subnet_exists(os_nw,mapping):
   nc = NuageConnection(cfg.get('vsd','hostname'), enterprise=cfg.get('vsd','enterprise'), username=cfg.get('vsd','username'), password=cfg.get('vsd','password'), version=cfg.get('vsd','version'), port=cfg.get('vsd','port'))
   logger.debug("Checking if Openstack network(%s,%s) exists in the VSD" % (os_nw['id'],os_nw['name']))
   try:
      vsd_subnet = nc.get("subnets/%s" % mapping["nuage_subnet_id"]).obj()[0]
   except Exception, e:
      try:
         vsd_subnet = nc.get("l2domains/%s" % mapping["nuage_subnet_id"]).obj()[0]
      except Exception, e:
         logger.info("|- Subnet (%s - ID:%s) not found in VSD --> Removing" % (os_nw['name'], os_nw['id']) )
         vsd_subnet = []
示例#5
0
def delete_vsd_managed_tenant(tenant_name,force):
    logger.info("Deleting VSD Managed Tenant: %s" % tenant_name)
    creds = get_keystone_creds()
    keystone = ksclient.Client(**creds)
    if force:
        try:
            delete_vms_in_tenant(tenant_name)
        except Exception, e:
            logger.error("|- ERROR deleting VMs from tenant %s" % tenant_name)
            logger.error(repr(e))
        try:
            delete_vsdobjects_in_tenant(tenant_name)
        except Exception, e:
            logger.error("|- ERROR deleting VSD Objects from tenant %s" % tenant_name)
            logger.error(repr(e))
示例#6
0
def delete_vsd_managed_tenant(tenant_name, force):
    logger.info("Deleting VSD Managed Tenant: %s" % tenant_name)
    creds = get_keystone_creds()
    keystone = ksclient.Client(**creds)
    if force:
        try:
            delete_vms_in_tenant(tenant_name)
        except Exception, e:
            logger.error("|- ERROR deleting VMs from tenant %s" % tenant_name)
            logger.error(repr(e))
        try:
            delete_vsdobjects_in_tenant(tenant_name)
        except Exception, e:
            logger.error("|- ERROR deleting VSD Objects from tenant %s" %
                         tenant_name)
            logger.error(repr(e))
示例#7
0
def create_vsd_managed_tenant(tenant_name):
    logger.info("Creating VSD Managed Tenant: %s" % tenant_name)
    creds = get_keystone_creds()
    keystone = ksclient.Client(**creds)
    logger.info("Creating Keystone Tenant: %s" % tenant_name)
    try:
        if keystone_tenant_exists(tenant_name):
            logger.error("|- ERROR tenant %s already exists in keystone" % tenant_name)
            os_tenant = keystone.tenants.find(name="%s" % tenant_name)
        else:
            os_tenant = keystone.tenants.create(tenant_name="%s" % tenant_name,
                        description="VSD Managed Openstack Tenant",
                        enabled=True)
    except Exception, e:
        logger.error("|- ERROR creating tenant %s in keystone" % tenant_name)
        logger.error(repr(e))
示例#8
0
def create_vsd_managed_tenant(tenant_name):
    logger.info("Creating VSD Managed Tenant: %s" % tenant_name)
    creds = get_keystone_creds()
    keystone = ksclient.Client(**creds)
    logger.info("Creating Keystone Tenant: %s" % tenant_name)
    try:
        if keystone_tenant_exists(tenant_name):
            logger.error("|- ERROR tenant %s already exists in keystone" %
                         tenant_name)
            os_tenant = keystone.tenants.find(name="%s" % tenant_name)
        else:
            os_tenant = keystone.tenants.create(
                tenant_name="%s" % tenant_name,
                description="VSD Managed Openstack Tenant",
                enabled=True)
    except Exception, e:
        logger.error("|- ERROR creating tenant %s in keystone" % tenant_name)
        logger.error(repr(e))
示例#9
0
def sync_subnets():
   try:
      logger.info("Starting Subnet Synchronizing")
      neutron_creds = get_neutron_creds(cfg.get('openstack','admin_username'), cfg.get('openstack','admin_password'), "admin")
      neutron = neutronclient.Client(**neutron_creds)
      nc = NuageConnection(cfg.get('vsd','hostname'), enterprise=cfg.get('vsd','enterprise'), username=cfg.get('vsd','username'), password=cfg.get('vsd','password'), version=cfg.get('vsd','version'), port=cfg.get('vsd','port'))
      try:
         subnet_mappings = get_current_subnet_mappings()
      except Exception, e:
         logger.error("|- ERROR getting current subnet mappings from OpenStack MYSQL database")
         logger.error(repr(e))
         return
      #First clean up existing Networks without attached subnets
      try:
         logger.info("Cleaning up Networks without subnets attached")
         cleanup_os_networks()
      except Exception, e:
         logger.error("|- ERROR cleaning up Networks without subnets attached")
         logger.error(repr(e))
示例#10
0
def vsd_subnet_exists(os_nw, mapping):
    nc = NuageConnection(cfg.get('vsd', 'hostname'),
                         enterprise=cfg.get('vsd', 'enterprise'),
                         username=cfg.get('vsd', 'username'),
                         password=cfg.get('vsd', 'password'),
                         version=cfg.get('vsd', 'version'),
                         port=cfg.get('vsd', 'port'))
    logger.debug("Checking if Openstack network(%s,%s) exists in the VSD" %
                 (os_nw['id'], os_nw['name']))
    try:
        vsd_subnet = nc.get("subnets/%s" % mapping["nuage_subnet_id"]).obj()[0]
    except Exception, e:
        try:
            vsd_subnet = nc.get("l2domains/%s" %
                                mapping["nuage_subnet_id"]).obj()[0]
        except Exception, e:
            logger.info(
                "|- Subnet (%s - ID:%s) not found in VSD --> Removing" %
                (os_nw['name'], os_nw['id']))
            vsd_subnet = []
示例#11
0
def neutron_add_subnet(nc, vsd_subnet, tenant):
    neutron_creds = get_neutron_creds(cfg.get('openstack', 'admin_username'), cfg.get('openstack', 'admin_password'),
                                      tenant.name)
    neutron = neutronclient.Client(**neutron_creds)
    # Ignore Shared L3 if not linked to shared subnet
    if not vsd_subnet['parentType'] == "enterprise" and vsd_subnet['address'] is None and vsd_subnet[
            'associatedSharedNetworkResourceID'] is None:
        if cfg.getboolean('sync', 'sync_shared_subnets'):
            logger.info(
                "|- Ignoring subnet: (ID:{0}). This is a public subnet without a pool assignment yet.".format(
                    vsd_subnet['ID']))
        else:
            logger.info(
                "|- Ignoring subnet: (ID:{0}). Sync of shared subnets is disabled in configuration.".format(
                    vsd_subnet['ID']))
        return None

    # Ignore if Shared L2/L3 subnet and syncing of shared subnets is disabled in the configuration
    if vsd_subnet['associatedSharedNetworkResourceID'] is not None and not cfg.getboolean('sync', 'sync_shared_subnets'):
        logger.info(
            "|- Ignoring subnet: (ID:{0}). Sync of shared subnets is disabled in configuration.".format(
                vsd_subnet['ID']))
        return None

    # Check if network exists
    if vsd_subnet['parentType'] == "enterprise":
        net_name = calcL2SubnetName(nc, vsd_subnet)
    else:
        net_name = calcL3SubnetName(nc, vsd_subnet)
    try:
        logger.debug("Checking if openstack network {0} already exists".format(net_name))
        netw = neutron.list_networks(name=net_name)['networks']
    except Exception, e:
        logger.error("|- ERROR checking if openstack network {0} exists".format(net_name))
        logger.error(repr(e))
示例#12
0
def delete(url,enterprise_name):
    logger.info("Deleting Network Macro with url: %s" % url)
    nc = NuageConnection(cfg.get('vsd','hostname'), enterprise=cfg.get('vsd','enterprise'), username=cfg.get('vsd','username'), password=cfg.get('vsd','password'), version="v3_0", port=cfg.get('vsd','port'))
    try:
        enterprise = nc.get("enterprises",filtertext="name == \"%s\"" % enterprise_name).obj()[0]
    except:
        logger.error("Error getting enterprise %s" % enterprise_name)
        return 1
    if not enterprise:
        logger.error("No enterprise found with name %s" % enterprise_name)
        return 1
    try:
        macro = nc.get("enterprises/%s/enterprisenetworks" % enterprise['ID'],filtertext="name == \"%s\"" % url.replace(".", "-")).obj()
    except:
        logger.error("Error getting existing macros %s" % enterprise_name)
        return 1
    if not macro:
        logger.info("Network Macro for %s does not exist" % url)
        return 0
    else:    
        try:
            nc.delete("enterprisenetworks/%s" % macro[0]['ID'])
            logger.info("Deleted Network Macro for %s." % url)
            return 0
        except:
            logger.error("Error deleting Network Macro for %s" % url)
            return 1
示例#13
0
def create_uplink_subnet():
    logger.info("Adding Uplink Subnet")
    nc = NuageConnection(cfg.get('vsd','hostname'), enterprise=cfg.get('vsd','enterprise'), username=cfg.get('vsd','username'), password=cfg.get('vsd','password'), version=cfg.get('vsd','version'), port=cfg.get('vsd','port'))
    try:
        dead_vms = nc.get("vms",filtertext="hypervisorIP == \"FFFFFF\"").obj()
    except:
        logger.error("Error getting orphaned VMs")
    for vm in dead_vms:
        logger.info("Deleting orphaned VM with ID: %s" % vm['ID'])
        try:
            nc.delete("vms/%s" % vm['ID'])
        except:
            logger.error("Error deleting orhpaned VM with ID: %s" % vm['ID'])
    logger.info("Finished Auditing vPorts")
示例#14
0
def audit_vports():
    logger.info("Auditing vPorts")
    nc = NuageConnection(cfg.get('vsd','hostname'), enterprise=cfg.get('vsd','enterprise'), username=cfg.get('vsd','username'), password=cfg.get('vsd','password'), version=cfg.get('vsd','version'), port=cfg.get('vsd','port'))
    try:
        dead_vms = nc.get("vms",filtertext="hypervisorIP == \"FFFFFF\"").obj()
    except:
        logger.error("Error getting orphaned VMs")
    for vm in dead_vms:
        logger.info("Deleting orphaned VM with ID: %s" % vm['ID'])
        try:
            nc.delete("vms/%s" % vm['ID'])
        except:
            logger.error("Error deleting orhpaned VM with ID: %s" % vm['ID'])
    logger.info("Finished Auditing vPorts")
示例#15
0
def neutron_add_subnet(nc, vsd_subnet, tenant):
    neutron_creds = get_neutron_creds(cfg.get('openstack', 'admin_username'),
                                      cfg.get('openstack', 'admin_password'),
                                      tenant.name)
    neutron = neutronclient.Client(**neutron_creds)
    # Ignore Shared L3 if not linked to shared subnet
    if not vsd_subnet['parentType'] == "enterprise" and vsd_subnet[
            'address'] is None and vsd_subnet[
                'associatedSharedNetworkResourceID'] is None:
        if cfg.getboolean('sync', 'sync_shared_subnets'):
            logger.info(
                "|- Ignoring subnet: (ID:{0}). This is a public subnet without a pool assignment yet."
                .format(vsd_subnet['ID']))
        else:
            logger.info(
                "|- Ignoring subnet: (ID:{0}). Sync of shared subnets is disabled in configuration."
                .format(vsd_subnet['ID']))
        return None

    # Ignore if Shared L2/L3 subnet and syncing of shared subnets is disabled in the configuration
    if vsd_subnet[
            'associatedSharedNetworkResourceID'] is not None and not cfg.getboolean(
                'sync', 'sync_shared_subnets'):
        logger.info(
            "|- Ignoring subnet: (ID:{0}). Sync of shared subnets is disabled in configuration."
            .format(vsd_subnet['ID']))
        return None

    # Check if network exists
    if vsd_subnet['parentType'] == "enterprise":
        net_name = calcL2SubnetName(nc, vsd_subnet)
    else:
        net_name = calcL3SubnetName(nc, vsd_subnet)
    try:
        logger.debug("Checking if openstack network {0} already exists".format(
            net_name))
        netw = neutron.list_networks(name=net_name)['networks']
    except Exception, e:
        logger.error(
            "|- ERROR checking if openstack network {0} exists".format(
                net_name))
        logger.error(repr(e))
示例#16
0
def delete(url, enterprise_name):
    logger.info("Deleting Network Macro with url: {0}".format(url))
    nc = NuageConnection(cfg.get('vsd', 'hostname'),
                         enterprise=cfg.get('vsd', 'enterprise'),
                         username=cfg.get('vsd', 'username'),
                         password=cfg.get('vsd', 'password'),
                         version="v3_0",
                         port=cfg.get('vsd', 'port'))
    try:
        enterprise = nc.get(
            "enterprises",
            filtertext="name == \"{0}\"".format(enterprise_name)).obj()[0]
    except:
        logger.error("Error getting enterprise {0}".format(enterprise_name))
        return 1
    if not enterprise:
        logger.error(
            "No enterprise found with name {0}".format(enterprise_name))
        return 1
    try:
        macro = nc.get(
            "enterprises/{0}/enterprisenetworks".format(enterprise['ID']),
            filtertext="name == \"{0}\"".format(url.replace(".", "-"))).obj()
    except:
        logger.error(
            "Error getting existing macros {0}".format(enterprise_name))
        return 1
    if not macro:
        logger.info("Network Macro for {0} does not exist".format(url))
        return 0
    else:
        try:
            nc.delete("enterprisenetworks/{0}".format(macro[0]['ID']))
            logger.info("Deleted Network Macro for {0}.".format(url))
            return 0
        except:
            logger.error("Error deleting Network Macro for {0}".format(url))
            return 1
示例#17
0
def delete(url, enterprise_name):
    logger.info("Deleting Network Macro with url: %s" % url)
    nc = NuageConnection(cfg.get('vsd', 'hostname'),
                         enterprise=cfg.get('vsd', 'enterprise'),
                         username=cfg.get('vsd', 'username'),
                         password=cfg.get('vsd', 'password'),
                         version="v3_0",
                         port=cfg.get('vsd', 'port'))
    try:
        enterprise = nc.get("enterprises",
                            filtertext="name == \"%s\"" %
                            enterprise_name).obj()[0]
    except:
        logger.error("Error getting enterprise %s" % enterprise_name)
        return 1
    if not enterprise:
        logger.error("No enterprise found with name %s" % enterprise_name)
        return 1
    try:
        macro = nc.get("enterprises/%s/enterprisenetworks" % enterprise['ID'],
                       filtertext="name == \"%s\"" %
                       url.replace(".", "-")).obj()
    except:
        logger.error("Error getting existing macros %s" % enterprise_name)
        return 1
    if not macro:
        logger.info("Network Macro for %s does not exist" % url)
        return 0
    else:
        try:
            nc.delete("enterprisenetworks/%s" % macro[0]['ID'])
            logger.info("Deleted Network Macro for %s." % url)
            return 0
        except:
            logger.error("Error deleting Network Macro for %s" % url)
            return 1
示例#18
0
def delete_vsdobjects_in_tenant(tenant_name):
    logger.info("Deleting all VSD objects for tenant: %s" % tenant_name)
    nc = NuageConnection(cfg.get('vsd', 'hostname'),
                         enterprise=cfg.get('vsd', 'enterprise'),
                         username=cfg.get('vsd', 'username'),
                         password=cfg.get('vsd', 'password'),
                         version=cfg.get('vsd', 'version'),
                         port=cfg.get('vsd', 'port'))
    enterprise = nc.get("enterprises",
                        filtertext="name == \"%s\"" % tenant_name).obj()[0]
    ### Get and delete all the active domains in the enterprise
    try:
        domains = nc.get("enterprises/%s/domains" % enterprise['ID']).obj()
        #Delete each L3 domain
        for domain in domains:
            nc.put("domains/%s" % domain["ID"], {"maintenanceMode": "ENABLED"})
            vports = nc.get("domains/%s/vports" % domain["ID"]).obj()
            for vport in vports:
                logger.info("VSD - Deleting vport: %s" % vport["ID"])
                if vport["type"] == "BRIDGE":
                    logger.info("VSD - Deleting bridgeport")
                    try:
                        nc.delete("bridgeinterfaces/%s" %
                                  (nc.get("vports/%s/bridgeinterfaces" %
                                          vport["ID"]).obj()[0]["ID"]))
                    except Exception, e:
                        logger.info("VSD - no Bridgeinterface found")
                        logger.error(repr(e))
                if vport["type"] == "HOST":
                    logger.info("VSD - Deleting hostport interface")
                    try:
                        hostport = nc.get("vports/%s/hostinterfaces" %
                                          vport["ID"]).obj()
                        nc.delete("hostinterfaces/%s" % hostport[0]["ID"])
                    except Exception, e:
                        logger.info("VSD - no host interface found")
                time.sleep(2)
                alarms = nc.get("vports/%s/alarms" % vport["ID"]).obj()
                for alarm in alarms:
                    try:
                        nc.delete("alarms/%s" % alarm["ID"])
                    except Exception, e:
                        logger.info("VSD - while deleting alarm")
                nc.delete("vports/%s" % vport["ID"])
示例#19
0
                nc.delete("vports/{0}".format(vport["ID"]))
            nc.delete("domains/{0}".format(domain["ID"]))
    except Exception, e:
        logger.error("VSD - while deleting domains")
        logger.error(repr(e))
        return 1

    # Get and delete all the active l2domains in the enterprise
    try:
        domains = nc.get("enterprises/{0}/l2domains".format(enterprise['ID'])).obj()
        # Delete each L2 domain
        for domain in domains:
            nc.put("l2domains/{0}".format(domain["ID"]), {"maintenanceMode": "ENABLED"})
            vports = nc.get("l2domains/{0}/vports".format(domain["ID"])).obj()
            for vport in vports:
                logger.info("VSD - Deleting l2vport: {0}".format(vport["ID"]))
                if vport["type"] == "BRIDGE":
                    logger.info("VSD - Deleting bridgeport")
                    try:
                        nc.delete(
                            "bridgeinterfaces/{0}".format(
                                nc.get("vports/{0}/bridgeinterfaces".format(vport["ID"])).obj()[0]["ID"]))
                    except Exception, e:
                        logger.info("VSD - no Bridgeinterface found")
                        logger.error(repr(e))
                if vport["type"] == "HOST":
                    logger.info("VSD - Deleting hostport interface")
                    try:
                        hostport = nc.get("vports/{0}/hostinterfaces".format(vport["ID"])).obj()
                        logger.info("VSD - Deleting Host interface: {0}".format(hostport[0]["ID"]))
                        nc.delete("hostinterfaces/{0}".format(hostport[0]["ID"]))
示例#20
0
                                      cfg.get('openstack', 'admin_password'),
                                      "admin")
    neutron = neutronclient.Client(**neutron_creds)
    try:
        networks = neutron.list_networks()['networks']
    except Exception, e:
        logger.error("|- ERROR getting current networks from Openstack")
        logger.error(repr(e))
        return 1
    for nw in networks:
        if not is_excluded_keystone_tenant_id(
                nw['tenant_id']
        ) and not nw['subnets'] and not vsd_subnet_exists(nw):
            try:
                logger.info(
                    "Found Network(ID: %s) without attached subnet, deleting" %
                    nw['id'])
                neutron.delete_network(nw['id'])
            except Exception, e:
                logger.error(
                    "|- ERROR deleting empty network with ID:%s from Openstack"
                    % nw['id'])
                logger.error(repr(e))
                return 1


def vsd_subnet_exists(os_nw, mapping):
    nc = NuageConnection(cfg.get('vsd', 'hostname'),
                         enterprise=cfg.get('vsd', 'enterprise'),
                         username=cfg.get('vsd', 'username'),
                         password=cfg.get('vsd', 'password'),
示例#21
0

def cleanup_os_networks():
    neutron_creds = get_neutron_creds(cfg.get('openstack', 'admin_username'), cfg.get('openstack', 'admin_password'),
                                      "admin")
    neutron = neutronclient.Client(**neutron_creds)
    try:
        networks = neutron.list_networks()['networks']
    except Exception, e:
        logger.error("|- ERROR getting current networks from Openstack")
        logger.error(repr(e))
        return 1
    for nw in networks:
        if not is_excluded_keystone_tenant_id(nw['tenant_id']) and not nw['subnets']:
            try:
                logger.info("Found Network(ID: {0}) without attached subnet, deleting".format(nw['id']))
                neutron.delete_network(nw['id'])
            except Exception, e:
                logger.error("|- ERROR deleting empty network with ID:{0} from Openstack".format(nw['id']))
                logger.error(repr(e))
                return 1


def vsd_subnet_exists(os_subnet, mapping):
    nc = NuageConnection(cfg.get('vsd', 'hostname'), enterprise=cfg.get('vsd', 'enterprise'),
                         username=cfg.get('vsd', 'username'), password=cfg.get('vsd', 'password'),
                         version=cfg.get('vsd', 'version'), port=cfg.get('vsd', 'port'))
    logger.debug("Checking if Openstack network({0},{1}) exists in the VSD".format(os_subnet['id'], os_subnet['name']))
    try:
        vsd_subnet = nc.get("subnets/{0}".format(mapping["nuage_subnet_id"])).obj()[0]
    except Exception, e:
示例#22
0
def create(url, enterprise_name):
    logger.info("Creating/updating Network Macro from url: %s" % url)
    nc = NuageConnection(cfg.get('vsd', 'hostname'),
                         enterprise=cfg.get('vsd', 'enterprise'),
                         username=cfg.get('vsd', 'username'),
                         password=cfg.get('vsd', 'password'),
                         version=cfg.get('vsd', 'version'),
                         port=cfg.get('vsd', 'port'))
    try:
        ip = socket.gethostbyname(url)
    except:
        logger.error("Error looking up hostname or hostname cannot be found")
        return 1
    try:
        enterprise = nc.get("enterprises",
                            filtertext="name == \"%s\"" %
                            enterprise_name).obj()[0]
    except:
        logger.error("Error getting enterprise %s" % enterprise_name)
        return 1
    if not enterprise:
        logger.error("No enterprise found with name %s" % enterprise_name)
        return 1
    try:
        macro = nc.get("enterprises/%s/enterprisenetworks" % enterprise['ID'],
                       filtertext="name == \"%s\"" %
                       url.replace(".", "-")).obj()
    except:
        logger.error("Error getting existing macros from enterprise %s" %
                     enterprise_name)
        return 1
    if not macro:
        logger.info(
            "Network Macro for %s does not exist, creating a new one." % url)
        try:
            nc.post(
                "enterprises/%s/enterprisenetworks" % enterprise['ID'], {
                    "IPType": "IPV4",
                    "address": ip,
                    "name": url.replace(".", "-"),
                    "netmask": "255.255.255.255"
                })
            logger.info("Network Macro created for %s with ip:%s." % (url, ip))
            return 0
        except:
            logger.error("Error creating new Network Macro for %s" % url)
            return 1
    else:
        if not macro[0]['address'] == ip:
            logger.info(
                "Network Macro for %s does exists, but address is not correct.(current:%s | new:%s)"
                % (url, macro[0]['address'], ip))
            try:
                nc.put("enterprisenetworks/%s" % macro[0]['ID'], {
                    "address": ip,
                    "netmask": "255.255.255.255"
                })
                logger.info("Network Macro for %s updated with ip:%s." %
                            (url, ip))
                return 0
            except:
                logger.error("Error updating Network Macro for %s" % url)
                return 1
        else:
            logger.info(
                "Network Macro for %s does exists and address is correct." %
                url)
            return 0
示例#23
0
    except Exception, e:
        logger.error("VSD - while deleting domains")
        logger.error(repr(e))
        return 1

    # Get and delete all the active l2domains in the enterprise
    try:
        domains = nc.get("enterprises/{0}/l2domains".format(
            enterprise['ID'])).obj()
        # Delete each L2 domain
        for domain in domains:
            nc.put("l2domains/{0}".format(domain["ID"]),
                   {"maintenanceMode": "ENABLED"})
            vports = nc.get("l2domains/{0}/vports".format(domain["ID"])).obj()
            for vport in vports:
                logger.info("VSD - Deleting l2vport: {0}".format(vport["ID"]))
                if vport["type"] == "BRIDGE":
                    logger.info("VSD - Deleting bridgeport")
                    try:
                        nc.delete("bridgeinterfaces/{0}".format(
                            nc.get("vports/{0}/bridgeinterfaces".format(
                                vport["ID"])).obj()[0]["ID"]))
                    except Exception, e:
                        logger.info("VSD - no Bridgeinterface found")
                        logger.error(repr(e))
                if vport["type"] == "HOST":
                    logger.info("VSD - Deleting hostport interface")
                    try:
                        hostport = nc.get("vports/{0}/hostinterfaces".format(
                            vport["ID"])).obj()
                        logger.info(
示例#24
0
def delete_vsdobjects_in_tenant(tenant_name):
    logger.info("Deleting all VSD objects for tenant: %s" % tenant_name)
    nc = NuageConnection(cfg.get('vsd','hostname'), enterprise=cfg.get('vsd','enterprise'), username=cfg.get('vsd','username'), password=cfg.get('vsd','password'), version=cfg.get('vsd','version'), port=cfg.get('vsd','port'))
    enterprise = nc.get("enterprises",filtertext="name == \"%s\"" % tenant_name).obj()[0]
    ### Get and delete all the active domains in the enterprise
    try:
        domains = nc.get("enterprises/%s/domains" % enterprise['ID']).obj()
        #Delete each L3 domain
        for domain in domains:
            nc.put("domains/%s" % domain["ID"],{"maintenanceMode": "ENABLED"})
            vports = nc.get("domains/%s/vports" % domain["ID"]).obj()
            for vport in vports:
                logger.info("VSD - Deleting vport: %s" % vport["ID"])
                if vport["type"] == "BRIDGE":
                    logger.info("VSD - Deleting bridgeport")
                    try:
                        nc.delete("bridgeinterfaces/%s" %(nc.get("vports/%s/bridgeinterfaces" % vport["ID"]).obj()[0]["ID"]))
                    except Exception, e:
                        logger.info("VSD - no Bridgeinterface found")
                        logger.error(repr(e))
                if vport["type"] == "HOST":
                    logger.info("VSD - Deleting hostport interface")
                    try:
                        hostport = nc.get("vports/%s/hostinterfaces" % vport["ID"]).obj()
                        nc.delete("hostinterfaces/%s" % hostport[0]["ID"])
                    except Exception, e:
                        logger.info("VSD - no host interface found")
                time.sleep(2)
                alarms = nc.get("vports/%s/alarms" % vport["ID"]).obj()
                for alarm in alarms:
                   try:
                      nc.delete("alarms/%s" % alarm["ID"])
                   except Exception, e:
                      logger.info("VSD - while deleting alarm")
                nc.delete("vports/%s" % vport["ID"])
示例#25
0
    neutron_creds = get_neutron_creds(cfg.get('openstack', 'admin_username'),
                                      cfg.get('openstack', 'admin_password'),
                                      "admin")
    neutron = neutronclient.Client(**neutron_creds)
    try:
        networks = neutron.list_networks()['networks']
    except Exception, e:
        logger.error("|- ERROR getting current networks from Openstack")
        logger.error(repr(e))
        return 1
    for nw in networks:
        if not is_excluded_keystone_tenant_id(
                nw['tenant_id']) and not nw['subnets']:
            try:
                logger.info(
                    "Found Network(ID: {0}) without attached subnet, deleting".
                    format(nw['id']))
                neutron.delete_network(nw['id'])
            except Exception, e:
                logger.error(
                    "|- ERROR deleting empty network with ID:{0} from Openstack"
                    .format(nw['id']))
                logger.error(repr(e))
                return 1


def vsd_subnet_exists(os_subnet, mapping):
    nc = NuageConnection(cfg.get('vsd', 'hostname'),
                         enterprise=cfg.get('vsd', 'enterprise'),
                         username=cfg.get('vsd', 'username'),
                         password=cfg.get('vsd', 'password'),
示例#26
0
            nc.delete("domains/%s" % domain["ID"])
    except Exception, e:
        result = 1
        logger.error("VSD - while deleting domains")
        logger.error(repr(e))

    ### Get and delete all the active l2domains in the enterprise
    try:
        domains = nc.get("enterprises/%s/l2domains" % enterprise['ID']).obj()
        #Delete each L2 domain
        for domain in domains:
            nc.put("l2domains/%s" % domain["ID"],
                   {"maintenanceMode": "ENABLED"})
            vports = nc.get("l2domains/%s/vports" % domain["ID"]).obj()
            for vport in vports:
                logger.info("VSD - Deleting l2vport: %s" % vport["ID"])
                if vport["type"] == "BRIDGE":
                    logger.info("VSD - Deleting bridgeport")
                    try:
                        nc.delete("bridgeinterfaces/%s" %
                                  (nc.get("vports/%s/bridgeinterfaces" %
                                          vport["ID"]).obj()[0]["ID"]))
                    except Exception, e:
                        logger.info("VSD - no Bridgeinterface found")
                        logger.error(repr(e))
                if vport["type"] == "HOST":
                    logger.info("VSD - Deleting hostport interface")
                    try:
                        hostport = nc.get("vports/%s/hostinterfaces" %
                                          vport["ID"]).obj()
                        logger.info("VSD - Deleting Host interface: %s" %
示例#27
0
             nc.delete("vports/%s" % vport["ID"])
         nc.delete("domains/%s" % domain["ID"])
 except Exception, e:
     result = 1
     logger.error("VSD - while deleting domains")
     logger.error(repr(e))
     
 ### Get and delete all the active l2domains in the enterprise
 try:
     domains = nc.get("enterprises/%s/l2domains" % enterprise['ID']).obj()
     #Delete each L2 domain
     for domain in domains:
         nc.put("l2domains/%s" % domain["ID"],{"maintenanceMode": "ENABLED"})
         vports = nc.get("l2domains/%s/vports" % domain["ID"]).obj()
         for vport in vports:
             logger.info("VSD - Deleting l2vport: %s" % vport["ID"])
             if vport["type"] == "BRIDGE":
                 logger.info("VSD - Deleting bridgeport")
                 try:
                     nc.delete("bridgeinterfaces/%s" %(nc.get("vports/%s/bridgeinterfaces" % vport["ID"]).obj()[0]["ID"]))
                 except Exception, e:
                     logger.info("VSD - no Bridgeinterface found")
                     logger.error(repr(e))
             if vport["type"] == "HOST":
                 logger.info("VSD - Deleting hostport interface")
                 try:
                     hostport = nc.get("vports/%s/hostinterfaces" % vport["ID"]).obj()
                     logger.info("VSD - Deleting Host interface: %s" % hostport[0]["ID"])
                     nc.delete("hostinterfaces/%s" % hostport[0]["ID"])
                 except Exception, e:
                     logger.info("VSD - no host interface found")
示例#28
0
def create(url,enterprise_name):
    logger.info("Creating/updating Network Macro from url: %s" % url)
    nc = NuageConnection(cfg.get('vsd','hostname'), enterprise=cfg.get('vsd','enterprise'), username=cfg.get('vsd','username'), password=cfg.get('vsd','password'), version=cfg.get('vsd','version'), port=cfg.get('vsd','port'))
    try:
        ip = socket.gethostbyname(url)
    except:
        logger.error("Error looking up hostname or hostname cannot be found")
        return 1 
    try:
        enterprise = nc.get("enterprises",filtertext="name == \"%s\"" % enterprise_name).obj()[0]
    except:
        logger.error("Error getting enterprise %s" % enterprise_name)
        return 1
    if not enterprise:
        logger.error("No enterprise found with name %s" % enterprise_name)
        return 1
    try:
        macro = nc.get("enterprises/%s/enterprisenetworks" % enterprise['ID'],filtertext="name == \"%s\"" % url.replace(".", "-")).obj()
    except:
        logger.error("Error getting existing macros from enterprise %s" % enterprise_name)
        return 1
    if not macro:
        logger.info("Network Macro for %s does not exist, creating a new one." % url)
        try:
            nc.post("enterprises/%s/enterprisenetworks" % enterprise['ID'],
                    {"IPType": "IPV4",
                     "address": ip,
                     "name": url.replace(".", "-"),
                     "netmask": "255.255.255.255"})
            logger.info("Network Macro created for %s with ip:%s." % (url,ip))
            return 0
        except:
            logger.error("Error creating new Network Macro for %s" % url)
            return 1
    else:
        if not macro[0]['address'] == ip:
            logger.info("Network Macro for %s does exists, but address is not correct.(current:%s | new:%s)" % (url,macro[0]['address'],ip))
            try:
                nc.put("enterprisenetworks/%s" % macro[0]['ID'],
                    {"address": ip,
                     "netmask": "255.255.255.255"})
                logger.info("Network Macro for %s updated with ip:%s." % (url,ip))
                return 0
            except:
                logger.error("Error updating Network Macro for %s" % url)
                return 1
        else:
            logger.info("Network Macro for %s does exists and address is correct." % url)
            return 0
示例#29
0
      return True
   return False

def cleanup_os_networks():
   neutron_creds = get_neutron_creds(cfg.get('openstack','admin_username'), cfg.get('openstack','admin_password'), "admin")
   neutron = neutronclient.Client(**neutron_creds)
   try:
      networks = neutron.list_networks()['networks']
   except Exception, e:
      logger.error("|- ERROR getting current networks from Openstack")
      logger.error(repr(e))
      return 1
   for nw in networks:
      if not is_excluded_keystone_tenant_id(nw['tenant_id']) and not nw['subnets'] and not vsd_subnet_exists(nw):
         try:
            logger.info("Found Network(ID: %s) without attached subnet, deleting" % nw['id'])
            neutron.delete_network(nw['id'])
         except Exception, e:
            logger.error("|- ERROR deleting empty network with ID:%s from Openstack" % nw['id'])
            logger.error(repr(e))
            return 1
def vsd_subnet_exists(os_nw,mapping):
   nc = NuageConnection(cfg.get('vsd','hostname'), enterprise=cfg.get('vsd','enterprise'), username=cfg.get('vsd','username'), password=cfg.get('vsd','password'), version=cfg.get('vsd','version'), port=cfg.get('vsd','port'))
   logger.debug("Checking if Openstack network(%s,%s) exists in the VSD" % (os_nw['id'],os_nw['name']))
   try:
      vsd_subnet = nc.get("subnets/%s" % mapping["nuage_subnet_id"]).obj()[0]
   except Exception, e:
      try:
         vsd_subnet = nc.get("l2domains/%s" % mapping["nuage_subnet_id"]).obj()[0]
      except Exception, e:
         logger.info("|- Subnet (%s - ID:%s) not found in VSD --> Removing" % (os_nw['name'], os_nw['id']) )