From 8279c9423d1e2166db04c256e3b475583537888b Mon Sep 17 00:00:00 2001
From: Kenny Woodson <kwoodson@redhat.com>
Date: Mon, 14 Mar 2016 15:24:59 -0400
Subject: Updating our metadata tooling to work without env

---
 bin/openshift_ansible/awsutil.py | 10 ++---
 bin/oscp                         | 79 ++++++----------------------------
 bin/ossh                         | 92 +++++++++-------------------------------
 bin/ossh_bash_completion         |  6 +--
 bin/ossh_zsh_completion          |  6 +--
 5 files changed, 46 insertions(+), 147 deletions(-)

(limited to 'bin')

diff --git a/bin/openshift_ansible/awsutil.py b/bin/openshift_ansible/awsutil.py
index eba11e851..11651f087 100644
--- a/bin/openshift_ansible/awsutil.py
+++ b/bin/openshift_ansible/awsutil.py
@@ -137,13 +137,13 @@ class AwsUtil(object):
         inst_by_env = {}
         for _, host in inv['_meta']['hostvars'].items():
             # If you don't have an environment tag, we're going to ignore you
-            if 'ec2_tag_environment' not in host:
+            if 'oo_environment' not in host:
                 continue
 
-            if host['ec2_tag_environment'] not in inst_by_env:
-                inst_by_env[host['ec2_tag_environment']] = {}
-            host_id = "%s:%s" % (host['ec2_tag_Name'], host['ec2_id'])
-            inst_by_env[host['ec2_tag_environment']][host_id] = host
+            if host['oo_environment'] not in inst_by_env:
+                inst_by_env[host['oo_environment']] = {}
+            host_id = "%s:%s" % (host['oo_name'], host['oo_id'])
+            inst_by_env[host['oo_environment']][host_id] = host
 
         return inst_by_env
 
diff --git a/bin/oscp b/bin/oscp
index 203b9d6da..4d3286ed8 100755
--- a/bin/oscp
+++ b/bin/oscp
@@ -14,6 +14,8 @@ CONFIG_MAIN_SECTION = 'main'
 
 class Oscp(object):
     def __init__(self):
+        self.host = None
+        self.user = ''
         self.file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)))
 
         # Default the config path to /etc
@@ -56,8 +58,6 @@ class Oscp(object):
 
     def parse_cli_args(self):
         parser = argparse.ArgumentParser(description='OpenShift Online SSH Tool.')
-        parser.add_argument('-e', '--env',
-                          action="store", help="Environment where this server exists.")
         parser.add_argument('-d', '--debug', default=False,
                           action="store_true", help="debug mode")
         parser.add_argument('-v', '--verbose', default=False,
@@ -82,8 +82,6 @@ class Oscp(object):
     def process_host(self):
         '''Determine host name and user name for SSH.
         '''
-        self.user = ''
-
         # is the first param passed a valid file?
         if os.path.isfile(self.args.src) or os.path.isdir(self.args.src):
             self.local_src = True
@@ -108,76 +106,34 @@ class Oscp(object):
                 self.host = search.groups()[0]
                 self.path = search.groups()[1]
 
-        if self.args.env:
-            self.env = self.args.env
-        elif "." in self.host:
-            self.host, self.env = self.host.split(".")
-        else:
-            self.env = None
-
     def get_hosts(self, refresh_cache=False):
-        '''Query our host inventory and return a dict where the format
-           equals:
-
-           dict['environment'] = [{'servername' : {}}, ]
-        '''
+        '''Query our host inventory and return a dict where the format '''
         if refresh_cache:
-            self.host_inventory = self.aws.build_host_dict_by_env(['--refresh-cache'])
+            self.host_inventory = self.aws.get_inventory(['--refresh-cache'])['_meta']['hostvars']
         else:
-            self.host_inventory = self.aws.build_host_dict_by_env()
+            self.host_inventory = self.aws.get_inventory()['_meta']['hostvars']
 
     def select_host(self):
         '''select host attempts to match the host specified
            on the command line with a list of hosts.
         '''
-        results = []
-        for env in self.host_inventory.keys():
-            for hostname, server_info in self.host_inventory[env].items():
-                if hostname.split(':')[0] == self.host:
-                    results.append((hostname, server_info))
-
-        # attempt to select the correct environment if specified
-        if self.env:
-            results = filter(lambda result: result[1]['oo_environment'] == self.env, results)
-
-        if results:
-            return results
+        results = None
+        if self.host_inventory.has_key(self.host):
+           results = (self.host, self.host_inventory[self.host])
         else:
             print "Could not find specified host: %s." % self.host
 
         # default - no results found.
-        return None
+        return results
 
     def list_hosts(self, limit=None):
         '''Function to print out the host inventory.
 
            Takes a single parameter to limit the number of hosts printed.
         '''
-
-        if self.env:
-            results = self.select_host()
-            if len(results) == 1:
-                hostname, server_info = results[0]
-                sorted_keys = server_info.keys()
-                sorted_keys.sort()
-                for key in sorted_keys:
-                    print '{0:<35} {1}'.format(key, server_info[key])
-            else:
-                for host_id, server_info in results[:limit]:
-                    print '{oo_name:<35} {oo_clusterid:<10} {oo_environment:<8} ' \
-                          '{oo_id:<15} {oo_public_ip:<18} {oo_private_ip:<18}'.format(**server_info)
-
-                if limit:
-                    print
-                    print 'Showing only the first %d results...' % limit
-                    print
-
-        else:
-            for env, host_ids in self.host_inventory.items():
-                for host_id, server_info in host_ids.items():
-                    print '{oo_name:<35} {oo_clusterid:<10} {oo_environment:<8} ' \
-                          '{oo_id:<15} {oo_public_ip:<18} {oo_private_ip:<18}'.format(**server_info)
-
+        for host_id, server_info in self.host_inventory.items():
+            print '{oo_name:<35} {oo_clusterid:<10} {oo_environment:<8} ' \
+                '{oo_id:<15} {oo_public_ip:<18} {oo_private_ip:<18}'.format(**server_info)
 
     def scp(self):
         '''scp files to or from a specified host
@@ -203,17 +159,10 @@ class Oscp(object):
             if not results:
                 return # early exit, no results
 
-            if len(results) > 1:
-                print "Multiple results found for %s." % self.host
-                for result in results:
-                    print "{oo_name:<35} {oo_clusterid:<5} {oo_environment:<5} {oo_id:<10}".format(**result[1])
-                return # early exit, too many results
-
             # Assume we have one and only one.
-            hostname, server_info = results[0]
-            dns = server_info['oo_public_ip']
+            server_info = results[1]
 
-            host_str = "%s%s%s" % (self.user, dns, self.path)
+            host_str = "%s%s%s" % (self.user, server_info['oo_public_ip'], self.path)
 
             if self.local_src:
                 scp_args.append(self.args.src)
diff --git a/bin/ossh b/bin/ossh
index 5e2506638..0dd2fb741 100755
--- a/bin/ossh
+++ b/bin/ossh
@@ -14,6 +14,8 @@ CONFIG_MAIN_SECTION = 'main'
 
 class Ossh(object):
     def __init__(self):
+        self.user = None
+        self.host = None
         self.file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)))
 
         # Default the config path to /etc
@@ -54,8 +56,6 @@ class Ossh(object):
 
     def parse_cli_args(self):
         parser = argparse.ArgumentParser(description='OpenShift Online SSH Tool.')
-        parser.add_argument('-e', '--env', action="store",
-                            help="Which environment to search for the host ")
         parser.add_argument('-d', '--debug', default=False,
                             action="store_true", help="debug mode")
         parser.add_argument('-v', '--verbose', default=False,
@@ -83,91 +83,48 @@ class Ossh(object):
     def process_host(self):
         '''Determine host name and user name for SSH.
         '''
-        self.env = None
-        self.user = None
-
-        re_env = re.compile("\.(" + "|".join(self.host_inventory.keys()) + ")")
-        search = re_env.search(self.args.host)
-        if self.args.env:
-            self.env = self.args.env
-        elif search:
-            # take the first?
-            self.env = search.groups()[0]
 
-        # remove env from hostname command line arg if found
-        if search:
-            self.args.host = re_env.split(self.args.host)[0]
+        parts = self.args.host.split('@')
 
         # parse username if passed
-        if '@' in self.args.host:
-            self.user, self.host = self.args.host.split('@')
+        if len(parts) > 1:
+            self.user = parts[0]
+            self.host = parts[1]
         else:
-            self.host = self.args.host
+            self.host = parts[0]
+
             if self.args.login_name:
                 self.user = self.args.login_name
 
-    def get_hosts(self, refresh_cache=False):
-        '''Query our host inventory and return a dict where the format
-           equals:
 
-           dict['servername'] = dns_name
-        '''
+    def get_hosts(self, refresh_cache=False):
+        '''Query our host inventory and return a dict where the format '''
         if refresh_cache:
-            self.host_inventory = self.aws.build_host_dict_by_env(['--refresh-cache'])
+            self.host_inventory = self.aws.get_inventory(['--refresh-cache'])['_meta']['hostvars']
         else:
-            self.host_inventory = self.aws.build_host_dict_by_env()
+            self.host_inventory = self.aws.get_inventory()['_meta']['hostvars']
 
     def select_host(self):
         '''select host attempts to match the host specified
            on the command line with a list of hosts.
         '''
-        results = []
-        for env in self.host_inventory.keys():
-            for hostname, server_info in self.host_inventory[env].items():
-                if hostname.split(':')[0] == self.host:
-                    results.append((hostname, server_info))
-
-        # attempt to select the correct environment if specified
-        if self.env:
-            results = filter(lambda result: result[1]['oo_environment'] == self.env, results)
-
-        if results:
-            return results
+        results = None
+        if self.host_inventory.has_key(self.host):
+           results = (self.host, self.host_inventory[self.host])
         else:
             print "Could not find specified host: %s." % self.host
 
         # default - no results found.
-        return None
+        return results
 
     def list_hosts(self, limit=None):
         '''Function to print out the host inventory.
 
            Takes a single parameter to limit the number of hosts printed.
         '''
-
-        if self.env:
-            results = self.select_host()
-            if len(results) == 1:
-                hostname, server_info = results[0]
-                sorted_keys = server_info.keys()
-                sorted_keys.sort()
-                for key in sorted_keys:
-                    print '{0:<35} {1}'.format(key, server_info[key])
-            else:
-                for host_id, server_info in results[:limit]:
-                    print '{oo_name:<35} {oo_clusterid:<10} {oo_environment:<8} ' \
-                          '{oo_id:<15} {oo_public_ip:<18} {oo_private_ip:<18}'.format(**server_info)
-
-                if limit:
-                    print
-                    print 'Showing only the first %d results...' % limit
-                    print
-
-        else:
-            for env, host_ids in self.host_inventory.items():
-                for host_id, server_info in host_ids.items():
-                    print '{oo_name:<35} {oo_clusterid:<10} {oo_environment:<8} ' \
-                          '{oo_id:<15} {oo_public_ip:<18} {oo_private_ip:<18}'.format(**server_info)
+        for host_id, server_info in self.host_inventory.items():
+            print '{oo_name:<35} {oo_clusterid:<10} {oo_environment:<8} ' \
+                '{oo_id:<15} {oo_public_ip:<18} {oo_private_ip:<18}'.format(**server_info)
 
     def ssh(self):
         '''SSH to a specified host
@@ -193,17 +150,10 @@ class Ossh(object):
             if not results:
                 return # early exit, no results
 
-            if len(results) > 1:
-                print "Multiple results found for %s." % self.host
-                for result in results:
-                    print "{oo_name:<35} {oo_clusterid:<5} {oo_environment:<5} {oo_id:<10}".format(**result[1])
-                return # early exit, too many results
-
             # Assume we have one and only one.
-            _, server_info = results[0]
-            dns = server_info['oo_public_ip']
+            server_info = results[1]
 
-            ssh_args.append(dns)
+            ssh_args.append(server_info['oo_public_ip'])
 
             #last argument
             if self.args.command:
diff --git a/bin/ossh_bash_completion b/bin/ossh_bash_completion
index 77b770a43..dcbde3e51 100755
--- a/bin/ossh_bash_completion
+++ b/bin/ossh_bash_completion
@@ -1,12 +1,12 @@
 __ossh_known_hosts(){
     if python -c 'import openshift_ansible' &>/dev/null; then
-      /usr/bin/python -c 'from openshift_ansible import multi_inventory; m=multi_inventory.MultiInventory(); m.run(); z=m.result; print "\n".join(["%s.%s" % (host["oo_name"],host["oo_environment"]) for dns, host in z["_meta"]["hostvars"].items() if all(k in host for k in ("oo_name", "oo_environment"))])'
+      /usr/bin/python -c 'from openshift_ansible import multi_inventory; m=multi_inventory.MultiInventory(); m.run(); z=m.result; print "\n".join([name for name in z["_meta"]["hostvars"].keys()])'
 
     elif [[ -f /dev/shm/.ansible/tmp/multi_inventory.cache ]]; then
-      /usr/bin/python -c 'import json; loc="/dev/shm/.ansible/tmp/multi_inventory.cache"; z=json.loads(open(loc).read()); print "\n".join(["%s.%s" % (host["oo_name"],host["oo_environment"]) for dns, host in z["_meta"]["hostvars"].items() if all(k in host for k in ("oo_name", "oo_environment"))])'
+      /usr/bin/python -c 'import json; loc="/dev/shm/.ansible/tmp/multi_inventory.cache"; z=json.loads(open(loc).read()); print "\n".join([name for name in z["_meta"]["hostvars"].keys()])'
 
     elif [[ -f ~/.ansible/tmp/multi_inventory.cache ]]; then
-      /usr/bin/python -c 'import json,os; loc="%s" % os.path.expanduser("~/.ansible/tmp/multi_inventory.cache"); z=json.loads(open(loc).read()); print "\n".join(["%s.%s" % (host["oo_name"],host["oo_environment"]) for dns, host in z["_meta"]["hostvars"].items() if all(k in host for k in ("oo_name", "oo_environment"))])'
+      /usr/bin/python -c 'import json,os; loc="%s" % os.path.expanduser("~/.ansible/tmp/multi_inventory.cache"); z=json.loads(open(loc).read()); print "\n".join([name for name in z["_meta"]["hostvars"].keys()])'
 
     fi
 }
diff --git a/bin/ossh_zsh_completion b/bin/ossh_zsh_completion
index 170ca889b..94ea61dab 100644
--- a/bin/ossh_zsh_completion
+++ b/bin/ossh_zsh_completion
@@ -2,13 +2,13 @@
 
 _ossh_known_hosts(){
     if python -c 'import openshift_ansible' &>/dev/null; then
-      print $(/usr/bin/python -c 'from openshift_ansible import multi_inventory; m=multi_inventory.MultiInventory(); m.run(); z=m.result; print "\n".join(["%s.%s" % (host["oo_name"],host["oo_environment"]) for dns, host in z["_meta"]["hostvars"].items() if all(k in host for k in ("oo_name", "oo_environment"))])')
+      print $(/usr/bin/python -c 'from openshift_ansible import multi_inventory; m=multi_inventory.MultiInventory(); m.run(); z=m.result; print "\n".join([name for name in z["_meta"]["hostvars"].keys()])')
 
     elif [[ -f /dev/shm/.ansible/tmp/multi_inventory.cache ]]; then
-      print $(/usr/bin/python -c 'import json; loc="/dev/shm/.ansible/tmp/multi_inventory.cache"; z=json.loads(open(loc).read()); print "\n".join(["%s.%s" % (host["oo_name"],host["oo_environment"]) for dns, host in z["_meta"]["hostvars"].items() if all(k in host for k in ("oo_name", "oo_environment"))])')
+      print $(/usr/bin/python -c 'import json; loc="/dev/shm/.ansible/tmp/multi_inventory.cache"; z=json.loads(open(loc).read()); print "\n".join([name for name in z["_meta"]["hostvars"].keys() ])')
 
     elif [[ -f ~/.ansible/tmp/multi_inventory.cache ]]; then
-      print $(/usr/bin/python -c 'import json,os; loc="%s" % os.path.expanduser("~/.ansible/tmp/multi_inventory.cache"); z=json.loads(open(loc).read()); print "\n".join(["%s.%s" % (host["oo_name"],host["oo_environment"]) for dns, host in z["_meta"]["hostvars"].items() if all(k in host for k in ("oo_name", "oo_environment"))])')
+      print $(/usr/bin/python -c 'import json,os; loc="%s" % os.path.expanduser("~/.ansible/tmp/multi_inventory.cache"); z=json.loads(open(loc).read()); print "\n".join([name for name in z["_meta"]["hostvars"].keys() ])')
 
     fi
 
-- 
cgit v1.2.3