summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2013-06-05 04:41:59 +0200
committerAlexander Sulfrian <alexander@sulfrian.net>2013-06-05 19:26:32 +0200
commit37815fe06c5a2391236327641ef3890d64cb4c7e (patch)
treea3746dcb11bbd828681678f6d4bcfa820c42d754
parent957366cd72daf0ca5ffe8d53ce87063ffc9f9b33 (diff)
downloadtools-37815fe06c5a2391236327641ef3890d64cb4c7e.tar.gz
tools-37815fe06c5a2391236327641ef3890d64cb4c7e.tar.bz2
tools-37815fe06c5a2391236327641ef3890d64cb4c7e.zip
hostinfo: add basic string matching for the search
-rwxr-xr-xbin/hostinfo37
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))