Pārlūkot izejas kodu

Adding [tab] completion for bash and zsh.

Kenny Woodson 10 gadi atpakaļ
vecāks
revīzija
d124436d94
3 mainītis faili ar 45 papildinājumiem un 10 dzēšanām
  1. 18 7
      bin/COMPLETION_SETUP
  2. 20 0
      bin/_ossh_zsh_completion
  3. 7 3
      bin/ossh

+ 18 - 7
bin/COMPLETION_SETUP

@@ -1,17 +1,11 @@
 # ossh is an ssh replacement.
 # 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.
 to something meaningful such as an IP address or dns name.
 
 
 This allows us to treat our servers as cattle and not as pets.
 This allows us to treat our servers as cattle and not as pets.
 
 
-In order to setup bash completion, source the following script:
-/path/to/repository/openshift-online-ansible/bin/ossh_bash_completion
-
-This bash_completion 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.
-
 If you have not run the ossh command and it has not laid down
 If you have not run the ossh command and it has not laid down
 a cache file the completions will not be available.
 a cache file the completions will not be available.
 
 
@@ -19,3 +13,20 @@ You can populate the cache by running `ossh --list`.  This
 will populate the cache file and the completions should
 will populate the cache file and the completions should
 become available.
 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.
+
+# BASH
+In order to setup bash completion, source the following script:
+/path/to/repository/openshift-online-ansible/bin/ossh_bash_completion
+
+# ZSH
+In order to setup zsh completion, you will need to verify
+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]` 
+for a list of completions.
+

+ 20 - 0
bin/_ossh_zsh_completion

@@ -0,0 +1,20 @@
+#compdef ossh
+
+_ossh_known_hosts(){
+  if [[ -f ~/.ansible/tmp/multi_ec2_inventory.cache ]]; then
+    /usr/bin/python -c 'import json,os; z = json.loads(open("%s"%os.path.expanduser("~/.ansible/tmp/multi_ec2_inventory.cache")).read()); print "\n".join(["%s.%s" % (host["ec2_tag_Name"],host["ec2_tag_environment"]) for dns, host in z["_meta"]["hostvars"].items()])'
+  fi
+
+}
+_ossh(){
+  local curcontext="$curcontext" state line
+  typeset -A opt_args
+
+  _arguments -s : \
+      "*:Hosts:_ossh_known_hosts"
+
+  case $state in
+  *)
+        
+}
+_ossh "$@"

+ 7 - 3
bin/ossh

@@ -26,6 +26,13 @@ class Ossh(object):
         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__)))
         self.parse_cli_args()
         self.parse_cli_args()
 
 
+        # parse host and user
+        self.process_host()
+
+        if not self.args.list and not self.env:
+            print "Please specify an environment."
+            return
+
         if self.args.host == '' and not self.args.list:
         if self.args.host == '' and not self.args.list:
             self.parser.print_help()
             self.parser.print_help()
             return
             return
@@ -34,15 +41,12 @@ class Ossh(object):
 
 
         self.host_inventory = self.get_hosts()
         self.host_inventory = self.get_hosts()
 
 
-
         if self.args.debug:
         if self.args.debug:
             print self.args
             print self.args
 
 
         # get a dict of host inventory
         # get a dict of host inventory
         self.get_hosts()
         self.get_hosts()
 
 
-        # parse host and user
-        self.process_host()
 
 
         # perform the SSH
         # perform the SSH
         if self.args.list:
         if self.args.list: