From 536b5234c2710bba3b5f030845bc63ab0a898cc5 Mon Sep 17 00:00:00 2001 From: marcrp Date: Fri, 27 Sep 2013 14:52:37 -0400 Subject: [PATCH] Added node weight support Note that weight can be specified using the node-modify only but will be displayed in load balancer status, node-list, node-status, node-add, and node-modify. To support the setting of weight with load balancer create or node-add, it would require a bigger change because with those, multiple nodes can be specified with --node. Perhaps a syntax of ip:port:weight would make sense if that was supported. Also note that the API interface only returns weight when the value is not the default (1). Therefore, the weight column also only displays a weight value when it is not 1. Change-Id: I34ea3e4a144aeb47af661c161f5f3ee4946cbe7e --- libraclient/clientoptions.py | 4 +++- libraclient/libraapi.py | 17 ++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/libraclient/clientoptions.py b/libraclient/clientoptions.py index a9fc4e9..a90f822 100644 --- a/libraclient/clientoptions.py +++ b/libraclient/clientoptions.py @@ -190,7 +190,9 @@ class ClientOptions(object): sp.add_argument('--id', help='load balancer ID', required=True) sp.add_argument('--nodeid', help='node ID to modify', required=True) sp.add_argument('--condition', help='the new state for the node', - choices=['ENABLED', 'DISABLED'], required=True) + choices=['ENABLED', 'DISABLED']) + sp.add_argument('--weight', type=int, default=1, metavar='COUNT', + help='node weight ratio as compared to other nodes') sp = subparsers.add_parser( 'node-status', help='get status of a node in a load balancer' diff --git a/libraclient/libraapi.py b/libraclient/libraapi.py index 256c13e..b77962f 100644 --- a/libraclient/libraapi.py +++ b/libraclient/libraapi.py @@ -171,8 +171,9 @@ class LibraAPI(object): def node_list_lb(self, args): resp, body = self._get('/loadbalancers/{0}/nodes'.format(args.id)) - column_names = ['ID', 'Address', 'Port', 'Condition', 'Status'] - columns = ['id', 'address', 'port', 'condition', 'status'] + column_names = ['ID', 'Address', 'Port', 'Condition', 'Weight', + 'Status'] + columns = ['id', 'address', 'port', 'condition', 'weight', 'status'] self._render_list(column_names, columns, body['nodes']) def node_delete_lb(self, args): @@ -185,20 +186,22 @@ class LibraAPI(object): data['nodes'] = self._parse_nodes(args.node) resp, body = self._post('/loadbalancers/{0}/nodes' .format(args.id), body=data) - column_names = ['ID', 'Address', 'Port', 'Condition', 'Status'] - columns = ['id', 'address', 'port', 'condition', 'status'] + column_names = ['ID', 'Address', 'Port', 'Condition', 'Weight', + 'Status'] + columns = ['id', 'address', 'port', 'condition', 'weight', 'status'] self._render_list(column_names, columns, body['nodes']) def node_modify_lb(self, args): - data = {'condition': args.condition} + data = {'condition': args.condition, 'weight': args.weight} self._put('/loadbalancers/{0}/nodes/{1}' .format(args.id, args.nodeid), body=data) def node_status_lb(self, args): resp, body = self._get('/loadbalancers/{0}/nodes/{1}' .format(args.id, args.nodeid)) - column_names = ['ID', 'Address', 'Port', 'Condition', 'Status'] - columns = ['id', 'address', 'port', 'condition', 'status'] + column_names = ['ID', 'Address', 'Port', 'Condition', + 'Weight', 'Status'] + columns = ['id', 'address', 'port', 'condition', 'weight', 'status'] self._render_dict(column_names, columns, body) def logs_lb(self, args):