AdminUtils NSX|v: recreate router by Id
New option to recreate a single router by it's id This can be useful if for some reason the current router was not attached to an edge because of an error, so recreate by edge id is useless. Change-Id: I1d6bf6ef96c19b80f32e9ac5227b52aa099afe01
This commit is contained in:
parent
706154c181
commit
b178cda402
@ -145,6 +145,10 @@ Routers
|
|||||||
|
|
||||||
nsxadmin -r routers -o nsx-recreate --property edge-id=edge-308
|
nsxadmin -r routers -o nsx-recreate --property edge-id=edge-308
|
||||||
|
|
||||||
|
- Recreate a router on the nsx backend by removing it from the current edge (if any), and attaching to a new one::
|
||||||
|
|
||||||
|
nsxadmin -r routers -o nsx-recreate --property router-id=8cdd6d06-b457-4cbb-a0b1-41e08ccce287
|
||||||
|
|
||||||
- Migrate NSXv metadata infrastructure for VDRs - use regular DHCP edges for VDR::
|
- Migrate NSXv metadata infrastructure for VDRs - use regular DHCP edges for VDR::
|
||||||
|
|
||||||
nsxadmin -r routers -o migrate-vdr-dhcp
|
nsxadmin -r routers -o migrate-vdr-dhcp
|
||||||
|
@ -69,21 +69,7 @@ def _get_router_az_from_plugin_router(router):
|
|||||||
return az_name
|
return az_name
|
||||||
|
|
||||||
|
|
||||||
@admin_utils.output_header
|
def nsx_recreate_router_edge(old_edge_id):
|
||||||
def nsx_recreate_router_edge(resource, event, trigger, **kwargs):
|
|
||||||
"""Recreate a router edge with all the data on a new NSXv edge"""
|
|
||||||
if not kwargs.get('property'):
|
|
||||||
LOG.error("Need to specify edge-id parameter")
|
|
||||||
return
|
|
||||||
|
|
||||||
# input validation
|
|
||||||
properties = admin_utils.parse_multi_keyval_opt(kwargs['property'])
|
|
||||||
old_edge_id = properties.get('edge-id')
|
|
||||||
if not old_edge_id:
|
|
||||||
LOG.error("Need to specify edge-id parameter")
|
|
||||||
return
|
|
||||||
LOG.info("ReCreating NSXv Router Edge: %s", old_edge_id)
|
|
||||||
|
|
||||||
# init the plugin and edge manager
|
# init the plugin and edge manager
|
||||||
cfg.CONF.set_override('core_plugin',
|
cfg.CONF.set_override('core_plugin',
|
||||||
'vmware_nsx.shell.admin.plugins.nsxv.resources'
|
'vmware_nsx.shell.admin.plugins.nsxv.resources'
|
||||||
@ -105,7 +91,7 @@ def nsx_recreate_router_edge(resource, event, trigger, **kwargs):
|
|||||||
# is ok to check the type once
|
# is ok to check the type once
|
||||||
example_router = plugin.get_router(context, router_ids[0])
|
example_router = plugin.get_router(context, router_ids[0])
|
||||||
if example_router.get('distributed'):
|
if example_router.get('distributed'):
|
||||||
LOG.error("Recreating a distributed driver edge is not "
|
LOG.error("Recreating a distributed router edge is not "
|
||||||
"supported")
|
"supported")
|
||||||
return
|
return
|
||||||
router_driver = plugin._router_managers.get_tenant_router_driver(
|
router_driver = plugin._router_managers.get_tenant_router_driver(
|
||||||
@ -140,6 +126,66 @@ def nsx_recreate_router_edge(resource, event, trigger, **kwargs):
|
|||||||
{'router': router_id, 'edge': new_edge_id})
|
{'router': router_id, 'edge': new_edge_id})
|
||||||
|
|
||||||
|
|
||||||
|
def nsx_recreate_router(router_id):
|
||||||
|
# init the plugin and edge manager
|
||||||
|
cfg.CONF.set_override('core_plugin',
|
||||||
|
'vmware_nsx.shell.admin.plugins.nsxv.resources'
|
||||||
|
'.utils.NsxVPluginWrapper')
|
||||||
|
with utils.NsxVPluginWrapper() as plugin:
|
||||||
|
context = n_context.get_admin_context()
|
||||||
|
|
||||||
|
router = plugin.get_router(context, router_id)
|
||||||
|
if router.get('distributed'):
|
||||||
|
LOG.error("Recreating a distributed router is not supported")
|
||||||
|
return
|
||||||
|
router_driver = plugin._router_managers.get_tenant_router_driver(
|
||||||
|
context, router['router_type'])
|
||||||
|
|
||||||
|
# Check if it is already attached to an edge
|
||||||
|
binding = nsxv_db.get_nsxv_router_binding(context.session,
|
||||||
|
router_id)
|
||||||
|
if binding:
|
||||||
|
old_edge_id = binding['edge_id']
|
||||||
|
# detach the router from this edge
|
||||||
|
LOG.info("Detaching the router from edge %s", old_edge_id)
|
||||||
|
router_driver.detach_router(context, router_id,
|
||||||
|
{'router': router})
|
||||||
|
|
||||||
|
# attach the router to a new edge
|
||||||
|
appliance_size = router.get(routersize.ROUTER_SIZE)
|
||||||
|
router_driver.attach_router(context, router_id,
|
||||||
|
{'router': router},
|
||||||
|
appliance_size=appliance_size)
|
||||||
|
# find out who is the new edge to print it
|
||||||
|
new_edge_id = router_driver._get_edge_id_or_raise(
|
||||||
|
context, router_id)
|
||||||
|
LOG.info("Router %(router)s was attached to edge %(edge)s",
|
||||||
|
{'router': router_id, 'edge': new_edge_id})
|
||||||
|
|
||||||
|
|
||||||
|
@admin_utils.output_header
|
||||||
|
def nsx_recreate_router_or_edge(resource, event, trigger, **kwargs):
|
||||||
|
"""Recreate a router edge with all the data on a new NSXv edge"""
|
||||||
|
if not kwargs.get('property'):
|
||||||
|
LOG.error("Need to specify edge-id or router-id parameter")
|
||||||
|
return
|
||||||
|
|
||||||
|
# input validation
|
||||||
|
properties = admin_utils.parse_multi_keyval_opt(kwargs['property'])
|
||||||
|
old_edge_id = properties.get('edge-id')
|
||||||
|
router_id = properties.get('router-id')
|
||||||
|
if (not old_edge_id and not router_id) or (old_edge_id and router_id):
|
||||||
|
LOG.error("Need to specify edge-id or router-id parameter")
|
||||||
|
return
|
||||||
|
|
||||||
|
if old_edge_id:
|
||||||
|
LOG.info("ReCreating NSXv Router Edge: %s", old_edge_id)
|
||||||
|
return nsx_recreate_router_edge(old_edge_id)
|
||||||
|
else:
|
||||||
|
LOG.info("ReCreating NSXv Router: %s", router_id)
|
||||||
|
return nsx_recreate_router(router_id)
|
||||||
|
|
||||||
|
|
||||||
def migrate_distributed_routers_dhcp(resource, event, trigger, **kwargs):
|
def migrate_distributed_routers_dhcp(resource, event, trigger, **kwargs):
|
||||||
context = n_context.get_admin_context()
|
context = n_context.get_admin_context()
|
||||||
nsxv = utils.get_nsxv_client()
|
nsxv = utils.get_nsxv_client()
|
||||||
@ -162,7 +208,7 @@ def migrate_distributed_routers_dhcp(resource, event, trigger, **kwargs):
|
|||||||
nsxv.update_routes(edge_id, route_obj)
|
nsxv.update_routes(edge_id, route_obj)
|
||||||
|
|
||||||
|
|
||||||
registry.subscribe(nsx_recreate_router_edge,
|
registry.subscribe(nsx_recreate_router_or_edge,
|
||||||
constants.ROUTERS,
|
constants.ROUTERS,
|
||||||
shell.Operations.NSX_RECREATE.value)
|
shell.Operations.NSX_RECREATE.value)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user