NSX|V adminUtils: List & clean NSX portgroups
2 new admin utilities added to helo manage the NSX leftover
portgroups at cleanup
- List all NSX portgroups on the configured dvs
nsxadmin -r nsx-portgroups -o list
- Delete all NSX portgroups on the configured dvs
nsxadmin -r nsx-portgroups -o nsx-cleanup <--force>
Change-Id: I04359b984474dc5215658783bdab7039149a855d
This commit is contained in:
@@ -212,6 +212,16 @@ Orphaned Networks
|
|||||||
|
|
||||||
nsxadmin -r orphaned-networks -o nsx-clean --property moref=<moref>
|
nsxadmin -r orphaned-networks -o nsx-clean --property moref=<moref>
|
||||||
|
|
||||||
|
Portgroups
|
||||||
|
~~~~~~~~~~
|
||||||
|
- List all NSX portgroups on the configured dvs
|
||||||
|
|
||||||
|
nsxadmin -r nsx-portgroups -o list
|
||||||
|
|
||||||
|
- Delete all NSX portgroups on the configured dvs
|
||||||
|
|
||||||
|
nsxadmin -r nsx-portgroups -o nsx-cleanup <--force>
|
||||||
|
|
||||||
Security Groups, Firewall and Spoofguard
|
Security Groups, Firewall and Spoofguard
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ LBAAS = 'lbaas'
|
|||||||
BGP_GW_EDGE = 'bgp-gw-edge'
|
BGP_GW_EDGE = 'bgp-gw-edge'
|
||||||
ROUTING_REDIS_RULE = 'routing-redistribution-rule'
|
ROUTING_REDIS_RULE = 'routing-redistribution-rule'
|
||||||
BGP_NEIGHBOUR = 'bgp-neighbour'
|
BGP_NEIGHBOUR = 'bgp-neighbour'
|
||||||
|
NSX_PORTGROUPS = 'nsx-portgroups'
|
||||||
|
|
||||||
# NSXTV only Resource Constants
|
# NSXTV only Resource Constants
|
||||||
PROJECTS = 'projects'
|
PROJECTS = 'projects'
|
||||||
|
|||||||
@@ -13,14 +13,18 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
import xml.etree.ElementTree as et
|
import xml.etree.ElementTree as et
|
||||||
|
|
||||||
from neutron_lib.callbacks import registry
|
from neutron_lib.callbacks import registry
|
||||||
from neutron_lib import context
|
from neutron_lib import context
|
||||||
|
from oslo_config import cfg
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
from oslo_serialization import jsonutils
|
from oslo_serialization import jsonutils
|
||||||
|
from oslo_vmware import vim_util
|
||||||
|
|
||||||
from vmware_nsx.db import db as nsx_db
|
from vmware_nsx.db import db as nsx_db
|
||||||
|
from vmware_nsx.dvs import dvs
|
||||||
from vmware_nsx.plugins.nsx_v.vshield.common import exceptions
|
from vmware_nsx.plugins.nsx_v.vshield.common import exceptions
|
||||||
from vmware_nsx.shell.admin.plugins.common import constants
|
from vmware_nsx.shell.admin.plugins.common import constants
|
||||||
from vmware_nsx.shell.admin.plugins.common import formatters
|
from vmware_nsx.shell.admin.plugins.common import formatters
|
||||||
@@ -192,6 +196,73 @@ def list_orphaned_networks(resource, event, trigger, **kwargs):
|
|||||||
['type', 'moref', 'name']))
|
['type', 'moref', 'name']))
|
||||||
|
|
||||||
|
|
||||||
|
def _get_nsx_portgroups(dvs_id):
|
||||||
|
dvsManager = dvs.VCManager()
|
||||||
|
dvs_moref = dvsManager._get_dvs_moref_by_id(dvs_id)
|
||||||
|
port_groups = dvsManager._session.invoke_api(vim_util,
|
||||||
|
'get_object_properties',
|
||||||
|
dvsManager._session.vim,
|
||||||
|
dvs_moref,
|
||||||
|
['portgroup'])
|
||||||
|
nsx_portgroups = []
|
||||||
|
if len(port_groups) and hasattr(port_groups[0], 'propSet'):
|
||||||
|
for prop in port_groups[0].propSet:
|
||||||
|
for val in prop.val[0]:
|
||||||
|
nsx_portgroups.append({'moref': val.value, 'type': val._type})
|
||||||
|
|
||||||
|
return nsx_portgroups
|
||||||
|
|
||||||
|
|
||||||
|
@admin_utils.output_header
|
||||||
|
def list_nsx_portgroups(resource, event, trigger, **kwargs):
|
||||||
|
if not cfg.CONF.dvs.host_ip:
|
||||||
|
LOG.info("Please configure the dvs section in the nsx configuration "
|
||||||
|
"file")
|
||||||
|
return
|
||||||
|
|
||||||
|
dvs_id = cfg.CONF.nsxv.dvs_id
|
||||||
|
port_groups = _get_nsx_portgroups(dvs_id)
|
||||||
|
LOG.info(formatters.output_formatter(
|
||||||
|
constants.NSX_PORTGROUPS + " for %s" % dvs_id,
|
||||||
|
port_groups, ['moref', 'type']))
|
||||||
|
|
||||||
|
|
||||||
|
@admin_utils.output_header
|
||||||
|
def delete_nsx_portgroups(resource, event, trigger, **kwargs):
|
||||||
|
if not cfg.CONF.dvs.host_ip:
|
||||||
|
LOG.info("Please configure the dvs section in the nsx configuration "
|
||||||
|
"file")
|
||||||
|
return
|
||||||
|
|
||||||
|
dvs_id = cfg.CONF.nsxv.dvs_id
|
||||||
|
portgroups = _get_nsx_portgroups(dvs_id)
|
||||||
|
if not portgroups:
|
||||||
|
LOG.info("No NSX portgroups found for %s", dvs_id)
|
||||||
|
return
|
||||||
|
|
||||||
|
if not kwargs.get('force'):
|
||||||
|
#ask for the user confirmation
|
||||||
|
confirm = admin_utils.query_yes_no(
|
||||||
|
"Do you want to delete all NSX portgroups for %s" % dvs_id,
|
||||||
|
default="no")
|
||||||
|
if not confirm:
|
||||||
|
LOG.info("NSX portgroups deletion aborted by user")
|
||||||
|
return
|
||||||
|
|
||||||
|
vcns = utils.get_nsxv_client()
|
||||||
|
for portgroup in portgroups:
|
||||||
|
try:
|
||||||
|
vcns.delete_port_group(dvs_id, portgroup['moref'])
|
||||||
|
except Exception as e:
|
||||||
|
LOG.error("Failed to delete portgroup %(pg)s: %(e)s",
|
||||||
|
{'pg': portgroup['moref'], 'e': e})
|
||||||
|
sys.exc_clear()
|
||||||
|
else:
|
||||||
|
LOG.info("Successfully deleted portgroup %(pg)s",
|
||||||
|
{'pg': portgroup['moref']})
|
||||||
|
LOG.info("Done.")
|
||||||
|
|
||||||
|
|
||||||
def get_dvs_id_from_backend_name(backend_name):
|
def get_dvs_id_from_backend_name(backend_name):
|
||||||
reg = re.search(r"^dvs-\d*", backend_name)
|
reg = re.search(r"^dvs-\d*", backend_name)
|
||||||
if reg:
|
if reg:
|
||||||
@@ -264,3 +335,9 @@ registry.subscribe(list_orphaned_networks,
|
|||||||
registry.subscribe(delete_backend_network,
|
registry.subscribe(delete_backend_network,
|
||||||
constants.ORPHANED_NETWORKS,
|
constants.ORPHANED_NETWORKS,
|
||||||
shell.Operations.NSX_CLEAN.value)
|
shell.Operations.NSX_CLEAN.value)
|
||||||
|
registry.subscribe(list_nsx_portgroups,
|
||||||
|
constants.NSX_PORTGROUPS,
|
||||||
|
shell.Operations.LIST.value)
|
||||||
|
registry.subscribe(delete_nsx_portgroups,
|
||||||
|
constants.NSX_PORTGROUPS,
|
||||||
|
shell.Operations.NSX_CLEAN.value)
|
||||||
|
|||||||
@@ -176,6 +176,9 @@ nsxv_resources = {
|
|||||||
constants.ORPHANED_NETWORKS: Resource(constants.ORPHANED_NETWORKS,
|
constants.ORPHANED_NETWORKS: Resource(constants.ORPHANED_NETWORKS,
|
||||||
[Operations.LIST.value,
|
[Operations.LIST.value,
|
||||||
Operations.NSX_CLEAN.value]),
|
Operations.NSX_CLEAN.value]),
|
||||||
|
constants.NSX_PORTGROUPS: Resource(constants.NSX_PORTGROUPS,
|
||||||
|
[Operations.LIST.value,
|
||||||
|
Operations.NSX_CLEAN.value]),
|
||||||
constants.SECURITY_GROUPS: Resource(constants.SECURITY_GROUPS,
|
constants.SECURITY_GROUPS: Resource(constants.SECURITY_GROUPS,
|
||||||
[Operations.LIST.value,
|
[Operations.LIST.value,
|
||||||
Operations.FIX_MISMATCH.value,
|
Operations.FIX_MISMATCH.value,
|
||||||
|
|||||||
Reference in New Issue
Block a user