|
@@ -14,6 +14,8 @@ CONFIG_MAIN_SECTION = 'main'
|
|
|
|
|
|
class Oscp(object):
|
|
class Oscp(object):
|
|
def __init__(self):
|
|
def __init__(self):
|
|
|
|
+ self.host = None
|
|
|
|
+ self.user = ''
|
|
self.file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)))
|
|
self.file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)))
|
|
|
|
|
|
# Default the config path to /etc
|
|
# Default the config path to /etc
|
|
@@ -56,8 +58,6 @@ class Oscp(object):
|
|
|
|
|
|
def parse_cli_args(self):
|
|
def parse_cli_args(self):
|
|
parser = argparse.ArgumentParser(description='OpenShift Online SSH Tool.')
|
|
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,
|
|
parser.add_argument('-d', '--debug', default=False,
|
|
action="store_true", help="debug mode")
|
|
action="store_true", help="debug mode")
|
|
parser.add_argument('-v', '--verbose', default=False,
|
|
parser.add_argument('-v', '--verbose', default=False,
|
|
@@ -82,8 +82,6 @@ class Oscp(object):
|
|
def process_host(self):
|
|
def process_host(self):
|
|
'''Determine host name and user name for SSH.
|
|
'''Determine host name and user name for SSH.
|
|
'''
|
|
'''
|
|
- self.user = ''
|
|
|
|
-
|
|
|
|
# is the first param passed a valid file?
|
|
# is the first param passed a valid file?
|
|
if os.path.isfile(self.args.src) or os.path.isdir(self.args.src):
|
|
if os.path.isfile(self.args.src) or os.path.isdir(self.args.src):
|
|
self.local_src = True
|
|
self.local_src = True
|
|
@@ -108,76 +106,34 @@ class Oscp(object):
|
|
self.host = search.groups()[0]
|
|
self.host = search.groups()[0]
|
|
self.path = search.groups()[1]
|
|
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):
|
|
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:
|
|
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:
|
|
else:
|
|
- self.host_inventory = self.aws.build_host_dict_by_env()
|
|
|
|
|
|
+ self.host_inventory = self.aws.get_inventory()['_meta']['hostvars']
|
|
|
|
|
|
def select_host(self):
|
|
def select_host(self):
|
|
'''select host attempts to match the host specified
|
|
'''select host attempts to match the host specified
|
|
on the command line with a list of hosts.
|
|
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:
|
|
else:
|
|
print "Could not find specified host: %s." % self.host
|
|
print "Could not find specified host: %s." % self.host
|
|
|
|
|
|
# default - no results found.
|
|
# default - no results found.
|
|
- return None
|
|
|
|
|
|
+ return results
|
|
|
|
|
|
def list_hosts(self, limit=None):
|
|
def list_hosts(self, limit=None):
|
|
'''Function to print out the host inventory.
|
|
'''Function to print out the host inventory.
|
|
|
|
|
|
Takes a single parameter to limit the number of hosts printed.
|
|
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):
|
|
def scp(self):
|
|
'''scp files to or from a specified host
|
|
'''scp files to or from a specified host
|
|
@@ -203,17 +159,10 @@ class Oscp(object):
|
|
if not results:
|
|
if not results:
|
|
return # early exit, no 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.
|
|
# 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:
|
|
if self.local_src:
|
|
scp_args.append(self.args.src)
|
|
scp_args.append(self.args.src)
|