def _parse_parameters(name, args, main): ''' Parse run parameters into a dict. ''' args = utils.nvpairs2dict(args) params = {} for key, default, _ in common_params(): params[key] = default for key, val in args.iteritems(): params[key] = val for param in main['parameters']: name = param['name'] if name not in params: if 'default' not in param: raise ValueError("Missing required parameter %s" % (name)) params[name] = param['default'] user = params['user'] port = params['port'] _filter_dict(params, 'nodes', _filter_nodes, user, port) _filter_dict(params, 'dry_run', utils.is_boolean_true) _filter_dict(params, 'sudo', utils.is_boolean_true) _filter_dict(params, 'statefile', lambda x: (x and os.path.abspath(x)) or x) if config.core.debug: params['debug'] = True return params
def do_add(self, context, *args): ''' Add the given node(s) to the cluster. Installs packages, sets up corosync and pacemaker, etc. Must be executed from a node in the existing cluster. ''' params = self._args_implicit(context, args, 'node') paramdict = utils.nvpairs2dict(params) node = paramdict.get('node') if node: node = node.replace(',', ' ').split() else: node = [] nodes = paramdict.get('nodes') if not nodes: nodes = utils.list_cluster_nodes() nodes += node params += ['nodes=%s' % (','.join(nodes))] return scripts.run('add', params)
def test_nvpairs2dict(): assert utils.nvpairs2dict(['a=b', 'c=d']) == {'a': 'b', 'c': 'd'} assert utils.nvpairs2dict(['a=b=c', 'c=d']) == {'a': 'b=c', 'c': 'd'} assert utils.nvpairs2dict(['a']) == {'a': None}