Example #1
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"])
Example #2
0
def get_keystone_creds():
    d = {}
    d['username'] = cfg.get('openstack', 'admin_username')
    d['password'] = cfg.get('openstack', 'admin_password')
    d['auth_url'] = cfg.get('openstack', 'auth_url')
    d['tenant_name'] = "admin"
    return d
Example #3
0
def get_keystone_creds():
    return {
        'username': cfg.get('openstack', 'admin_username'),
        'password': cfg.get('openstack', 'admin_password'),
        'auth_url': cfg.get('openstack', 'auth_url'),
        'tenant_name': "admin"
    }
Example #4
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))
Example #5
0
def get_keystone_creds():
    d = {}
    d['username'] = cfg.get('openstack','admin_username')
    d['password'] = cfg.get('openstack','admin_password')
    d['auth_url'] = cfg.get('openstack','auth_url')
    d['tenant_name'] = "admin"
    return d
Example #6
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
Example #7
0
def get_admin_nova_creds(tenant_name):
    d = {}
    d['version'] = "2"
    d['username'] = cfg.get('openstack', 'admin_username')
    d['api_key'] = cfg.get('openstack', 'admin_password')
    d['auth_url'] = cfg.get('openstack', 'auth_url')
    d['project_id'] = tenant_name
    d['service_type'] = "compute"
    return d
Example #8
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
Example #9
0
def get_admin_nova_creds(tenant_name):
    return {
        'version': "2",
        'username': cfg.get('openstack', 'admin_username'),
        'api_key': cfg.get('openstack', 'admin_password'),
        'auth_url': cfg.get('openstack', 'auth_url'),
        'project_id': tenant_name,
        'service_type': "compute"
    }
Example #10
0
def get_admin_nova_creds(tenant_name):
    d = {}
    d['version'] = "2"
    d['username'] = cfg.get('openstack','admin_username')
    d['api_key'] = cfg.get('openstack','admin_password')
    d['auth_url'] = cfg.get('openstack','auth_url')
    d['project_id'] = tenant_name
    d['service_type'] = "compute"
    return d
Example #11
0
def netpartition_exists(tenant_name):
    neutron_creds = get_neutron_creds(cfg.get('openstack','admin_username'), cfg.get('openstack','admin_password'), "admin")
    neutron = neutronclient.Client(**neutron_creds)
    try:
        if neutron.list_net_partitions(name=tenant_name)['net_partitions'][0]:
            return True
        else:
            return False
    except:
        return False
Example #12
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 = []
Example #13
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
Example #14
0
def netpartition_exists(tenant_name):
    neutron_creds = get_neutron_creds(cfg.get('openstack', 'admin_username'),
                                      cfg.get('openstack', 'admin_password'),
                                      "admin")
    neutron = neutronclient.Client(**neutron_creds)
    try:
        if neutron.list_net_partitions(name=tenant_name)['net_partitions'][0]:
            return True
        else:
            return False
    except:
        return False
Example #15
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")
Example #16
0
def get_current_subnet_mappings():
    con = mdb.connect(cfg.get('neutron', 'db_hostname'), cfg.get('neutron', 'db_username'),
                      cfg.get('neutron', 'db_password'), cfg.get('neutron', 'db_name'))
    cur = con.cursor(mdb.cursors.DictCursor)
    if not cfg.has_option('openstack', 'version'):
        cur.execute("SELECT * FROM nuage_subnet_l2dom_mapping")
    else:
        if cfg.get('openstack', 'version').lower() == "icehouse":
            cur.execute("SELECT * FROM subnet_l2dom_mapping")
        else:
            # juno, kilo and liberty
            cur.execute("SELECT * FROM nuage_subnet_l2dom_mapping")
    rows = cur.fetchall()
    return rows
Example #17
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")
Example #18
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))
Example #19
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
Example #20
0
def is_excluded_tenant_name(tenant_name):
   try:
      if not cfg.has_option('sync','excluded_tenants'):
         return False
      excluded_tenants = cfg.get('sync','excluded_tenants').split(',')
      if tenant_name in excluded_tenants:
         return True
      elif cfg.has_option('openstack','default_net_partition'):
         if cfg.get('openstack','default_net_partition') == tenant_name:
            return True
      else:
         return False
   except Exception, e:
      logger.error("|- ERROR getting list of excluded tenants from config file")
      logger.error(repr(e))
Example #21
0
def get_neutron_creds(user, pw, tenant):
    d = {}
    d['username'] = user
    d['password'] = pw
    d['auth_url'] = cfg.get('openstack', 'auth_url')
    d['tenant_name'] = tenant
    return d
Example #22
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)
   if not vsd_subnet['parentType'] == "enterprise" and vsd_subnet['address'] == None and vsd_subnet['associatedSharedNetworkResourceID'] == None:
      logger.debug("|- Ignoring subnet: (ID:%s). This is a public subnet without a pool assignment yet." % vsd_subnet['ID'] )
      return None
   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 %s already exists" % net_name)
      network = neutron.list_networks(name=net_name)['networks']
   except Exception, e:
      logger.error("|- ERROR checking if openstack network %s exists" % net_name)
      logger.error(repr(e))
Example #23
0
def get_current_subnet_mappings():
    con = mdb.connect(cfg.get('neutron', 'db_hostname'),
                      cfg.get('neutron', 'db_username'),
                      cfg.get('neutron', 'db_password'),
                      cfg.get('neutron', 'db_name'))
    cur = con.cursor(mdb.cursors.DictCursor)
    if not cfg.has_option('openstack', 'version'):
        cur.execute("SELECT * FROM nuage_subnet_l2dom_mapping")
    else:
        if cfg.get('openstack', 'version').lower() == "icehouse":
            cur.execute("SELECT * FROM subnet_l2dom_mapping")
        else:
            # juno, kilo and liberty
            cur.execute("SELECT * FROM nuage_subnet_l2dom_mapping")
    rows = cur.fetchall()
    return rows
Example #24
0
def is_excluded_tenant_name(tenant_name):
    try:
        if not cfg.has_option('sync', 'excluded_tenants'):
            return False
        excluded_tenants = cfg.get('sync', 'excluded_tenants').split(',')
        if tenant_name in excluded_tenants:
            return True
        elif cfg.has_option('openstack', 'default_net_partition'):
            if cfg.get('openstack', 'default_net_partition') == tenant_name:
                return True
        else:
            return False
    except Exception, e:
        logger.error(
            "|- ERROR getting list of excluded tenants from config file")
        logger.error(repr(e))
Example #25
0
def get_neutron_creds(user,pw, tenant):
    d = {}
    d['username'] = user
    d['password'] = pw
    d['auth_url'] = cfg.get('openstack','auth_url')
    d['tenant_name'] = tenant
    return d
Example #26
0
def get_neutron_creds(user, pw, tenant):
    return {
        'username': user,
        'password': pw,
        'auth_url': cfg.get('openstack', 'auth_url'),
        'tenant_name': tenant
    }
Example #27
0
def is_excluded_keystone_tenant_id(tenant_id):
   try:
      if not cfg.has_option('sync','excluded_tenants'):
         return False
      excluded_tenants = cfg.get('sync','excluded_tenants').split(',')
      try:
         tenant = get_tenant_with_id(tenant_id)
      except Exception, e:
         logger.error("|- ERROR getting keystone tenant with id: %s" % tenant_id)
         logger.error(repr(e))
      if tenant.name in excluded_tenants:
         return True
      elif cfg.has_option('openstack','default_net_partition'):
         if cfg.get('openstack','default_net_partition') == tenant.name:
            return True
      else:
         return False
Example #28
0
def calcL2SubnetName(nc,l2domain):
    if not cfg.has_option('sync','l2_name_format'):
        L2NameFormat = "$d"
    else:
        L2NameFormat = cfg.get('sync','l2_name_format')

    name = l2domain['name']
    return name
Example #29
0
def calcL2SubnetName(nc, l2domain):
    if not cfg.has_option('sync', 'l2_name_format'):
        L2NameFormat = "$d"
    else:
        L2NameFormat = cfg.get('sync', 'l2_name_format')

    name = l2domain['name']
    return name
Example #30
0
def is_excluded_keystone_tenant_id(tenant_id):
    try:
        if not cfg.has_option('sync', 'excluded_tenants'):
            return False
        excluded_tenants = cfg.get('sync', 'excluded_tenants').split(',')
        try:
            tenant = get_tenant_with_id(tenant_id)
        except Exception, e:
            logger.error("|- ERROR getting keystone tenant with id: %s" %
                         tenant_id)
            logger.error(repr(e))
        if tenant.name in excluded_tenants:
            return True
        elif cfg.has_option('openstack', 'default_net_partition'):
            if cfg.get('openstack', 'default_net_partition') == tenant.name:
                return True
        else:
            return False
Example #31
0
def is_excluded_netpartition_id(netpartition_id):
   neutron_creds = get_neutron_creds(cfg.get('openstack','admin_username'), cfg.get('openstack','admin_password'), "admin")
   neutron = neutronclient.Client(**neutron_creds)
   try:
      if not cfg.has_option('sync','excluded_tenants'):
         return False
      excluded_tenants = cfg.get('sync','excluded_tenants').split(',')
      try:
         tenant = neutron.list_net_partitions(id=netpartition_id)['net_partitions'][0]
      except Exception, e:
         logger.error("|- ERROR getting netpartition with id: %s" % netpartition_id)
         logger.error(repr(e))
      if tenant['name'] in excluded_tenants:
         return True
      elif cfg.has_option('openstack','default_net_partition'):
         if cfg.get('openstack','default_net_partition') == tenant['name']:
            return True
      else:
         return False
Example #32
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))
Example #33
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))
Example #34
0
def list_vsd_managed_tenants():
    """Retrieves a list of the managed tenants in VSD"""
    # TODO: Improve list speed, nc.get("enterprises") is quite slow.
    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'))
    cr = get_keystone_creds()
    ks = ksclient.Client(**cr)
    try:
        tenants = ks.tenants.list()
    except:
        return "Could not connect to keystone."
    try:
        template = "{ID:40} | {name:20} | {description:30}"
        print template.format(ID="TENANT ID", name="TENANT NAME", description="TENANT DESCRIPTION")
        for ksi in tenants:
            for ent in nc.get("enterprises").obj():
                if ksi.name == ent["name"]:
                    print template.format(**ent)
    except:
        logger.error("Unable to get list of enterprises.")
Example #35
0
def list_vsd_managed_tenants():
    """Retrieves a list of the managed tenants in VSD"""
    # TODO: Improve list speed, nc.get("enterprises") is quite slow.
    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'))
    cr = get_keystone_creds()
    ks = ksclient.Client(**cr)
    try:
        tenants = ks.tenants.list()
    except:
        return "Could not connect to keystone."
    try:
        template = "{ID:40} | {name:20} | {description:30}"
        print template.format(ID="TENANT ID",
                              name="TENANT NAME",
                              description="TENANT DESCRIPTION")
        for ksi in tenants:
            for ent in nc.get("enterprises").obj():
                if ksi.name == ent["name"]:
                    print template.format(**ent)
    except:
        logger.error("Unable to get list of enterprises.")
Example #36
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
Example #37
0
def is_excluded_netpartition_id(netpartition_id):
    neutron_creds = get_neutron_creds(cfg.get('openstack', 'admin_username'),
                                      cfg.get('openstack', 'admin_password'),
                                      "admin")
    neutron = neutronclient.Client(**neutron_creds)
    try:
        if not cfg.has_option('sync', 'excluded_tenants'):
            return False
        excluded_tenants = cfg.get('sync', 'excluded_tenants').split(',')
        try:
            tenant = neutron.list_net_partitions(
                id=netpartition_id)['net_partitions'][0]
        except Exception, e:
            logger.error("|- ERROR getting netpartition with id: %s" %
                         netpartition_id)
            logger.error(repr(e))
        if tenant['name'] in excluded_tenants:
            return True
        elif cfg.has_option('openstack', 'default_net_partition'):
            if cfg.get('openstack', 'default_net_partition') == tenant['name']:
                return True
        else:
            return False
Example #38
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
Example #39
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)
    if not vsd_subnet['parentType'] == "enterprise" and vsd_subnet[
            'address'] == None and vsd_subnet[
                'associatedSharedNetworkResourceID'] == None:
        logger.debug(
            "|- Ignoring subnet: (ID:%s). This is a public subnet without a pool assignment yet."
            % vsd_subnet['ID'])
        return None
    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 %s already exists" %
                     net_name)
        network = neutron.list_networks(name=net_name)['networks']
    except Exception, e:
        logger.error("|- ERROR checking if openstack network %s exists" %
                     net_name)
        logger.error(repr(e))
Example #40
0
def calcL3SubnetName(nc, vsd_subnet):
    if not cfg.has_option('sync', 'l3_name_format'):
        L3NameFormat = "$d ($z) \ $s"
    else:
        L3NameFormat = cfg.get('sync', 'l3_name_format')
    name = L3NameFormat
    name = name.replace('$s', vsd_subnet['name'])
    if '$d' in L3NameFormat:
        zone = nc.get("zones/%s" % vsd_subnet['parentID']).obj()[0]
        domain = nc.get("domains/%s" % zone['parentID']).obj()[0]
        name = name.replace('$d', domain['name'])
        if '$z' in L3NameFormat:
            name = name.replace('$z', zone['name'])
    elif '$z' in L3NameFormat:
        zone = nc.get("zones/%s" % vsd_subnet['parentID']).obj()[0]
        name = name.replace('$z', zone['name'])
    return name
Example #41
0
def calcL3SubnetName(nc,vsd_subnet):
    if not cfg.has_option('sync','l3_name_format'):
        L3NameFormat = "$d ($z) \ $s"
    else:
        L3NameFormat = cfg.get('sync','l3_name_format')
    name = L3NameFormat
    name = name.replace('$s',vsd_subnet['name'])
    if '$d' in L3NameFormat:
        zone = nc.get("zones/%s" % vsd_subnet['parentID']).obj()[0]
        domain = nc.get("domains/%s" % zone['parentID']).obj()[0]
        name = name.replace('$d',domain['name'])
        if '$z' in L3NameFormat:
            name = name.replace('$z',zone['name'])
    elif '$z' in L3NameFormat:
        zone = nc.get("zones/%s" % vsd_subnet['parentID']).obj()[0]
        name = name.replace('$z',zone['name'])
    return name
Example #42
0
def delete_vsdobjects_in_tenant(tenant_name):
    logger.info("Deleting all VSD objects for tenant: {0}".format(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 == \"{0}\"".format(tenant_name)).obj()[0]
    # Get and delete all the active domains in the enterprise
    try:
        domains = nc.get("enterprises/{0}/domains".format(
            enterprise['ID'])).obj()
        # Delete each L3 domain
        for domain in domains:
            nc.put("domains/{0}".format(domain["ID"]),
                   {"maintenanceMode": "ENABLED"})
            vports = nc.get("domains/{0}/vports".format(domain["ID"])).obj()
            for vport in vports:
                logger.info("VSD - Deleting vport: {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()
                        nc.delete("hostinterfaces/{0}".format(
                            hostport[0]["ID"]))
                    except Exception, e:
                        logger.info("VSD - no host interface found")
                        logger.error(repr(e))
                sleep(2)
                alarms = nc.get("vports/{0}/alarms".format(vport["ID"])).obj()
                for alarm in alarms:
                    try:
                        nc.delete("alarms/{0}".format(alarm["ID"]))
                    except Exception, e:
                        logger.info("VSD - while deleting alarm")
                        logger.error(repr(e))
                nc.delete("vports/{0}".format(vport["ID"]))
Example #43
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 = []
Example #44
0
         logger.error("|- ERROR tenant {0} already exists in keystone".format(tenant_name))
         os_tenant = keystone.tenants.find(name="{0}".format(tenant_name))
     else:
         os_tenant = keystone.tenants.create(tenant_name="{0}".format(tenant_name),
                                             description="VSD Managed Openstack Tenant",
                                             enabled=True)
 except Exception, e:
     logger.error("|- ERROR creating tenant {0} in keystone".format(tenant_name))
     logger.error(repr(e))
 try:
     admin_role = keystone.roles.find(name='admin')
 except Exception, e:
     logger.error("|- ERROR finding admin role in keystone")
     logger.error(repr(e))
 try:
     os_admin = keystone.users.find(name=cfg.get('openstack', 'admin_username'))
 except Exception, e:
     logger.error("|- ERROR finding user {0} in keystone".format(cfg.get('openstack', 'admin_username')))
     logger.error(repr(e))
 try:
     logger.info("Adding admin role for user {0} in tenant {1} in keystone".format(
         cfg.get('openstack', 'admin_username'), tenant_name))
     keystone.roles.add_user_role(os_admin, admin_role, os_tenant)
 except Exception, e:
     logger.error("|- ERROR adding admin role for user {0} in tenant {1} in keystone".format(
         cfg.get('openstack', 'admin_username'), tenant_name))
     logger.error(repr(e))
 neutron_creds = get_neutron_creds(cfg.get('openstack', 'admin_username'), cfg.get('openstack', 'admin_password'),
                                   "admin")
 neutron = neutronclient.Client(**neutron_creds)
 try:
Example #45
0
def get_admin_nova_creds(tenant_name):
    return {'version': "2", 'username': cfg.get('openstack', 'admin_username'),
            'api_key': cfg.get('openstack', 'admin_password'), 'auth_url': cfg.get('openstack', 'auth_url'),
            'project_id': tenant_name, 'service_type': "compute"}
Example #46
0
     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))
 try:
     admin_role = keystone.roles.find(name='admin')
 except Exception, e:
     logger.error("|- ERROR finding admin role in keystone")
     logger.error(repr(e))
 try:
     os_admin = keystone.users.find(
         name=cfg.get('openstack', 'admin_username'))
 except Exception, e:
     logger.error("|- ERROR finding user %s in keystone" %
                  cfg.get('openstack', 'admin_username'))
     logger.error(repr(e))
 try:
     logger.info("Adding admin role for user %s in tenant %s in keystone" %
                 (cfg.get('openstack', 'admin_username'), tenant_name))
     keystone.roles.add_user_role(os_admin, admin_role, os_tenant)
 except Exception, e:
     logger.error(
         "|- ERROR adding admin role for user %s in tenant %s in keystone" %
         (cfg.get('openstack', 'admin_username'), tenant_name))
     logger.error(repr(e))
 neutron_creds = get_neutron_creds(cfg.get('openstack', 'admin_username'),
                                   cfg.get('openstack', 'admin_password'),
Example #47
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
Example #48
0
def get_keystone_creds():
    return {'username': cfg.get('openstack', 'admin_username'), 'password': cfg.get('openstack', 'admin_password'),
            'auth_url': cfg.get('openstack', 'auth_url'), 'tenant_name': "admin"}
Example #49
0
def get_neutron_creds(user, pw, tenant):
    return {'username': user, 'password': pw, 'auth_url': cfg.get('openstack', 'auth_url'), 'tenant_name': tenant}
Example #50
0
         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))
 try:    
     admin_role = keystone.roles.find(name='admin')
 except Exception, e:
     logger.error("|- ERROR finding admin role in keystone")
     logger.error(repr(e))
 try:
     os_admin = keystone.users.find(name=cfg.get('openstack','admin_username'))
 except Exception, e:
     logger.error("|- ERROR finding user %s in keystone" % cfg.get('openstack','admin_username'))
     logger.error(repr(e))
 try:
     logger.info("Adding admin role for user %s in tenant %s in keystone" % (cfg.get('openstack','admin_username'),tenant_name))
     keystone.roles.add_user_role(os_admin, admin_role, os_tenant)
 except Exception, e:
     logger.error("|- ERROR adding admin role for user %s in tenant %s in keystone" % (cfg.get('openstack','admin_username'),tenant_name))
     logger.error(repr(e))
 neutron_creds = get_neutron_creds(cfg.get('openstack','admin_username'), cfg.get('openstack','admin_password'), "admin")
 neutron = neutronclient.Client(**neutron_creds)
 try:
     logger.info("Creating Net-Partition: %s" % tenant_name)
     body_netpart = {"net_partition":
                     {