diff --git a/cli-client/pvc.py b/cli-client/pvc.py index 68620282..de45a026 100755 --- a/cli-client/pvc.py +++ b/cli-client/pvc.py @@ -158,6 +158,22 @@ def cli_router(): pass +############################################################################### +# pvc router secondary +############################################################################### +@click.command(name='secondary', short_help='Set a router in secondary status.') +@click.argument( + 'router' +) +def router_secondary(router): + """ + Take ROUTER out of primary mode handling gateways and into secondary mode. + """ + + zk_conn = pvc_common.startZKConnection(zk_host) + retcode, retmsg = pvc_router.secondary_router(zk_conn, router) + cleanup(retcode, retmsg, zk_conn) + ############################################################################### # pvc router primary ############################################################################### @@ -874,6 +890,7 @@ cli_node.add_command(node_unflush) cli_node.add_command(node_info) cli_node.add_command(node_list) +cli_router.add_command(router_secondary) cli_router.add_command(router_primary) cli_router.add_command(router_info) cli_router.add_command(router_list) diff --git a/client-common/client_lib/router.py b/client-common/client_lib/router.py index d3241d85..a50bea03 100644 --- a/client-common/client_lib/router.py +++ b/client-common/client_lib/router.py @@ -86,15 +86,38 @@ def getInformationFromRouter(zk_conn, router_name, long_output): # # Direct Functions # +def secondary_router(zk_conn, router): + # Verify router is valid + if not common.verifyRouter(zk_conn, router): + return False, 'ERROR: No router named "{}" is present in the cluster.'.format(router) + + # Get current state + current_state = zkhandler.readdata(zk_conn, '/routers/{}/networkstate'.format(router)) + if current_state == 'primary': + click.echo('Setting router {} in secondary mode.'.format(router)) + zkhandler.writedata(zk_conn, { + '/routers': 'none' + }) + else: + click.echo('Router {} is already in secondary mode.'.format(router)) + + return True, '' + def primary_router(zk_conn, router): # Verify router is valid if not common.verifyRouter(zk_conn, router): return False, 'ERROR: No router named "{}" is present in the cluster.'.format(router) - click.echo('Setting router {} in primary mode.'.format(router)) - zkhandler.writedata(zk_conn, { - '/routers': router - }) + # Get current state + current_state = zkhandler.readdata(zk_conn, '/routers/{}/networkstate'.format(router)) + if current_state == 'secondary': + click.echo('Setting router {} in primary mode.'.format(router)) + zkhandler.writedata(zk_conn, { + '/routers': router + }) + else: + click.echo('Router {} is already in primary mode.'.format(router)) + return True, '' def get_info(zk_conn, router, long_output):