From 37815fe06c5a2391236327641ef3890d64cb4c7e Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Wed, 5 Jun 2013 04:41:59 +0200 Subject: hostinfo: add basic string matching for the search --- bin/hostinfo | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/bin/hostinfo b/bin/hostinfo index 0a36f67..444bae7 100755 --- a/bin/hostinfo +++ b/bin/hostinfo @@ -52,7 +52,25 @@ def match_key(data, keys): return None -def match(host, search): +def match(host, search_key, search_value, negate): + search_keys = search_key.split('.') + + result = match_key(host, search_keys) + if search_value is None: + if negate: + if result is not None: + return (search_key, None) + return (None, True) + return (search_key, result) + else: + if result is None and negate: + return (search_key, True) + if result is not None: + if (search_value in str(result)) != negate: + return (search_key, result) + return (search_key, None) + +def _parse_search(search): if search[0] != '?': sys.stderr.write("Invalid search string.") sys.exit(1) @@ -63,15 +81,13 @@ def match(host, search): search = search[1:] negate = True - key_elem = search.split('.') - data = host + value = None + if '=' in search: + search_parts = search.split('=', 2) + search = search_parts[0] + value = search_parts[1] - result = match_key(data, key_elem) - if negate: - if result is not None: - return (search, None) - return (None, True) - return (search, result) + return (search, value, negate) def print_search(basepath, flags, search, filter_key=None): def _get_label(host): @@ -87,9 +103,10 @@ def print_search(basepath, flags, search, filter_key=None): hosts = _get_data(metadata) length = [len(_get_label(host)) for host in hosts['hosts']] + search_key, search_value, negate = _parse_search(search) for host in hosts['hosts']: data = _get_data(os.path.join(basepath, host)) - key, result = match(data, search) + key, result = match(data, search_key, search_value, negate) if result is not None: if flags.only_names: print(_get_label(host)) -- cgit v1.2.3-1-g7c22