From cedef18d9450a1b3c8c0f72c10174735529cda04 Mon Sep 17 00:00:00 2001 From: Kenny Woodson Date: Thu, 5 Feb 2015 17:01:06 -0500 Subject: Removed comments and cleaned up code. --- bin/README_SHELL_COMPLETION | 11 ++++--- bin/ansibleutil.py | 2 -- bin/opssh.py | 66 --------------------------------------- bin/ossh | 75 +++++++++++++-------------------------------- 4 files changed, 28 insertions(+), 126 deletions(-) delete mode 100755 bin/opssh.py (limited to 'bin') diff --git a/bin/README_SHELL_COMPLETION b/bin/README_SHELL_COMPLETION index 0183544e6..e17b4b205 100644 --- a/bin/README_SHELL_COMPLETION +++ b/bin/README_SHELL_COMPLETION @@ -1,7 +1,7 @@ # ossh is an ssh replacement. -Ossh uses a dynamic inventory cache in order to lookup hostnames and translate them +ossh uses a dynamic inventory cache in order to lookup hostnames and translate them to something meaningful such as an IP address or dns name. This allows us to treat our servers as cattle and not as pets. @@ -13,9 +13,10 @@ You can populate the cache by running `ossh --list`. This will populate the cache file and the completions should become available. -This zsh script will look at the cached version of your -multi_ec2 results in ~/.ansible/tmp/. It will then parse a few -{host}.{env} out of the json and return them to be completable. +This script will look at the cached version of your +multi_ec2 results in ~/.ansible/tmp/multi_ec2_inventory.cache. +It will then parse a few {host}.{env} out of the json +and return them to be completable. # BASH In order to setup bash completion, source the following script: @@ -27,6 +28,6 @@ that the _ossh_zsh_completion script is somewhere in the path of $fpath. Once $fpath includes the _ossh_zsh_completion script then you should -run `exec zsh`. This will then allow you to call `ossh host[TAB]` +run `exec zsh`. This will then allow you to call `ossh host[TAB]` for a list of completions. diff --git a/bin/ansibleutil.py b/bin/ansibleutil.py index 6df3e7126..b12b7b447 100644 --- a/bin/ansibleutil.py +++ b/bin/ansibleutil.py @@ -26,8 +26,6 @@ class AnsibleUtil(object): if p.returncode != 0: raise RuntimeError(err) - #with open('/tmp/ans.out','w') as fd: - #fd.writelines(out) return json.loads(out.strip()) def get_environments(self): diff --git a/bin/opssh.py b/bin/opssh.py deleted file mode 100755 index 6ee390c4c..000000000 --- a/bin/opssh.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python -# vim: expandtab:tabstop=4:shiftwidth=4 - -import argparse -import os -import ansibleutil -import sys - -class Program(object): - def __init__(self): - self.file_path = os.path.join(os.path.dirname(os.path.realpath(__file__))) - self.parse_cli_args() - self.ansible = ansibleutil.AnsibleUtil() - - inv = self.ansible.get_inventory() - #print inv.keys() - #sys.exit() - - if self.args.list_environments: - self.list_environments() - sys.exit() - - if self.args.list_groups: - self.list_security_groups() - sys.exit() - - def parse_cli_args(self): - parser = argparse.ArgumentParser( - description='OpenShift Online Operations Parallel SSH' - ) - - parser.add_argument("-v", '--verbosity', action="count", - help="increase output verbosity") - - group = parser.add_mutually_exclusive_group() - - group.add_argument('--list-environments', action="store_true", - help='List all environments') - group.add_argument('--list-groups', action="store_true", - help='List all security groups') - group.add_argument('-e', '--environment', - help='Set the environment') - - self.args = parser.parse_args() - - def list_environments(self): - envs = self.ansible.get_environments() - print - print "Environments" - print "------------" - for env in envs: - print env - print - - def list_security_groups(self): - envs = self.ansible.get_security_groups() - print - print "Groups" - print "------" - for env in envs: - print env - print - - -if __name__ == '__main__': - p = Program() diff --git a/bin/ossh b/bin/ossh index 1fa987d21..f41eedadf 100755 --- a/bin/ossh +++ b/bin/ossh @@ -1,6 +1,6 @@ #!/usr/bin/env python +# vim: expandtab:tabstop=4:shiftwidth=4 -import pdb import argparse import ansibleutil import traceback @@ -8,24 +8,19 @@ import sys import os import re - -# use dynamic inventory -# list instances -# symlinked to ~/bin -# list instances that match pattern -# python! - -# list environment stuff as well -# 3 states: -# - an exact match; return result -# - a partial match; return all regex results -# - no match; None - class Ossh(object): def __init__(self): self.file_path = os.path.join(os.path.dirname(os.path.realpath(__file__))) self.parse_cli_args() + self.ansible = ansibleutil.AnsibleUtil() + + # get a dict of host inventory + if self.args.list: + self.get_hosts() + else: + self.get_hosts(True) + # parse host and user self.process_host() @@ -37,13 +32,6 @@ class Ossh(object): self.parser.print_help() return - self.ansible = ansibleutil.AnsibleUtil() - - # get a dict of host inventory - if self.args.list: - self.get_hosts() - else: - self.get_hosts(True) if self.args.debug: print self.args @@ -56,8 +44,6 @@ class Ossh(object): def parse_cli_args(self): parser = argparse.ArgumentParser(description='Openshift Online SSH Tool.') - parser.add_argument('-r', '--random', action="store", - help="Choose a random host") parser.add_argument('-e', '--env', action="store", help="Which environment to search for the host ") parser.add_argument('-d', '--debug', default=False, @@ -73,7 +59,7 @@ class Ossh(object): parser.add_argument('-o', '--ssh_opts', action='store', help='options to pass to SSH.\n \ - "-o ForwardX11 yes"') + "-oForwardX11=yes,TCPKeepAlive=yes"') parser.add_argument('host', nargs='?', default='') self.args = parser.parse_args() @@ -86,7 +72,7 @@ class Ossh(object): self.env = None self.user = None - re_env = re.compile('\.(int|stg|prod|ops)') + 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 @@ -106,19 +92,16 @@ class Ossh(object): if self.args.login_name: self.user = self.args.login_name - def get_hosts(self, cache=False): + def get_hosts(self, cache_only=False): '''Query our host inventory and return a dict where the format equals: dict['servername'] = dns_name ''' - # TODO: perform a numerical sort on these hosts - # and display them - - if not cache: - self.host_inventory = self.ansible.build_host_dict() - else: + if cache_only: self.host_inventory = self.ansible.build_host_dict(['--cache-only']) + else: + self.host_inventory = self.ansible.build_host_dict() def select_host(self, regex=False): '''select host attempts to match the host specified @@ -127,25 +110,17 @@ class Ossh(object): if regex is specified then we will attempt to match all *{host_string}* equivalents. ''' -# list environment stuff as well -# 3 states: -# - an exact match; return result -# - a partial match; return all regex results -# - no match; None re_host = re.compile(self.host) - exact = [] results = [] for hostname, server_info in self.host_inventory[self.env].items(): if hostname.split(':')[0] == self.host: - exact.append((hostname, server_info)) - break + # an exact match, return it! + return [(hostname, server_info)] elif re_host.search(hostname): results.append((hostname, server_info)) - if exact: - return exact - elif results: + if results: return results else: print "Could not find specified host: %s in %s" % (self.host, self.env) @@ -153,7 +128,6 @@ class Ossh(object): # default - no results found. return None - def list_hosts(self, limit=None): '''Function to print out the host inventory. @@ -192,10 +166,8 @@ class Ossh(object): '''SSH to a specified host ''' try: - cmd = '/usr/bin/ssh' - # shell args start with the program name in position 1 - ssh_args = [cmd, ] + ssh_args = ['/usr/bin/ssh'] if self.user: ssh_args.append('-l%s' % self.user) @@ -204,7 +176,8 @@ class Ossh(object): ssh_args.append('-vvv') if self.args.ssh_opts: - ssh_args.append("-o%s" % self.args.ssh_opts) + for arg in self.args.ssh_opts.split(","): + ssh_args.append("-o%s" % arg) result = self.select_host() if not result: @@ -235,10 +208,6 @@ class Ossh(object): print sys.exc_info() -def main(): - ossh = Ossh() - - if __name__ == '__main__': - main() + ossh = Ossh() -- cgit v1.2.3