diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2013-06-05 04:41:59 +0200 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2013-06-05 19:26:32 +0200 |
commit | 37815fe06c5a2391236327641ef3890d64cb4c7e (patch) | |
tree | a3746dcb11bbd828681678f6d4bcfa820c42d754 | |
parent | 957366cd72daf0ca5ffe8d53ce87063ffc9f9b33 (diff) | |
download | tools-37815fe06c5a2391236327641ef3890d64cb4c7e.tar.gz tools-37815fe06c5a2391236327641ef3890d64cb4c7e.tar.bz2 tools-37815fe06c5a2391236327641ef3890d64cb4c7e.zip |
hostinfo: add basic string matching for the search
-rwxr-xr-x | bin/hostinfo | 37 |
1 files 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)) |