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))
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))
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))
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 = []
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))
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))
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))
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))
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))
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 = []
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))
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
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")
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")
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))
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
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
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"])
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"]))
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'),
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:
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
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(
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"])
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'),
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" %
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")
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
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']) )