diff options
Diffstat (limited to 'bin/oscp')
| -rwxr-xr-x | bin/oscp | 79 | 
1 files changed, 14 insertions, 65 deletions
@@ -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)  | 
