示例#1
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))
示例#2
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.")
示例#3
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"])
示例#4
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
示例#5
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))
示例#6
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))
示例#7
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")
示例#8
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
示例#9
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")
示例#10
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))
示例#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)
   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))
示例#12
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
示例#13
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
示例#14
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))
示例#15
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.")
示例#16
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))
示例#17
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))
示例#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))
示例#19
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
示例#20
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))
示例#21
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))
示例#22
0
        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))
    else:
        body_nw = {
            "network":
                {
                    "name": net_name,
                    "admin_state_up": True
                }
        }
        try:
            netw = neutron.create_network(body=body_nw)
        except Exception, e:
            logger.error("|- ERROR creating network: (ID:{0})".format(vsd_subnet['ID']))
            logger.error(repr(e))
            return None

    # Add subnet
    if vsd_subnet['parentType'] == "enterprise":
        # L2 subnet
        if vsd_subnet['DHCPManaged']:
            # private L2 with DHCP
            body_subnet = {
                "subnets": [
                    {
                        "name": calcL2SubnetName(nc, vsd_subnet),
                        "cidr": "{0}".format(net_nm_sanitizer(vsd_subnet['address'], vsd_subnet['netmask'])),
                        "ip_version": 4,
                        "network_id": netw['network']['id'],
示例#23
0
                     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"])
         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"]))
示例#24
0
                                          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"])
            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:
示例#25
0
        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))
    else:
        body_nw = {"network": {"name": net_name, "admin_state_up": True}}
        try:
            netw = neutron.create_network(body=body_nw)
        except Exception, e:
            logger.error("|- ERROR creating network: (ID:{0})".format(
                vsd_subnet['ID']))
            logger.error(repr(e))
            return None

    # Add subnet
    if vsd_subnet['parentType'] == "enterprise":
        # L2 subnet
        if vsd_subnet['DHCPManaged']:
            # private L2 with DHCP
            body_subnet = {
                "subnets": [{
                    "name":
                    calcL2SubnetName(nc, vsd_subnet),
                    "cidr":
                    "{0}".format(
                        net_nm_sanitizer(vsd_subnet['address'],
示例#26
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
示例#27
0
    logger.error("|- ERROR checking if openstack network %s exists" % net_name)
    logger.error(repr(e))
 if network:
    netw = network
 else:
    body_nw = {
        "network":
             {
               "name": net_name,
               "admin_state_up": True
             }
           }
    try:
       netw = neutron.create_network(body=body_nw)
    except Exception, e:
       logger.error("|- ERROR creating network: (ID:%s)" % vsd_subnet['ID'] )
       logger.error(repr(e))
       return None
 if vsd_subnet['parentType'] == "enterprise" and not vsd_subnet['DHCPManaged']:
    body_subnet = {
       "subnets": [
             {
               "name": calcL2SubnetName(nc,vsd_subnet),
               "cidr": "9.0.0.0/8",
               "ip_version": 4,
               "gateway_ip": "9.9.9.1",
               "network_id": netw['network']['id'],
               "nuagenet": vsd_subnet['ID'],
               "net_partition": tenant.name,
               "enable_dhcp": False
             }