b61fcb64abfd733a95f0e83e3009086959623252

Author
Frank Louwers <frank@openminds.be>
Committer
Frank Louwers <frank@openminds.be>
Date

Message

knife autocompletion

Diff

This diff is truncated to protect this page.

  1diff --git a/plugins/knife/_knife b/plugins/knife/_knife
  2new file mode 100644
  3index 0000000000000000000000000000000000000000..7f8c95ee5a470810785cb719828371a5e7463e6c
  4--- /dev/null
  5+++ b/plugins/knife/_knife
  6@@ -0,0 +1,174 @@
  7+#compdef knife
  8+
  9+# These flags should be available everywhere according to man knife
 10+knife_general_flags=( --help --server-url --key --config --editor --format --log_level --logfile --no-editor --user --print-after --version --yes )
 11+
 12+# knife has a very special syntax, some example calls are:
 13+# knife status
 14+# knife cookbook list
 15+# knife role show ROLENAME
 16+# knife data bag show DATABAGNAME
 17+# knife role show ROLENAME --attribute ATTRIBUTENAME
 18+# knife cookbook show COOKBOOKNAME COOKBOOKVERSION recipes
 19+
 20+# The -Q switch in compadd allow for completions of things like "data bag" without having to go through two rounds of completion and avoids zsh inserting a \ for escaping spaces
 21+_knife() {
 22+  local curcontext="$curcontext" state line
 23+  typeset -A opt_args
 24+  cloudproviders=(bluebox ec2 rackspace slicehost terremark)
 25+  _arguments \
 26+    '1: :->knifecmd'\
 27+    '2: :->knifesubcmd'\
 28+    '3: :->knifesubcmd2' \
 29+    '4: :->knifesubcmd3' \
 30+    '5: :->knifesubcmd4' \
 31+    '6: :->knifesubcmd5'
 32+  
 33+  case $state in
 34+  knifecmd)
 35+    compadd -Q "$@" bootstrap client configure cookbook "cookbook site" "data bag" exec index node recipe role search ssh status windows $cloudproviders
 36+  ;;
 37+  knifesubcmd)
 38+    case $words[2] in
 39+    (bluebox|ec2|rackspace|slicehost|terremark)
 40+      compadd "$@" server images
 41+    ;;
 42+    client)
 43+      compadd -Q "$@" "bulk delete" list create show delete edit reregister
 44+    ;;
 45+    configure)
 46+      compadd "$@" client
 47+    ;;
 48+    cookbook)
 49+      compadd -Q "$@" test list create download delete "metadata from" show "bulk delete" metadata upload
 50+    ;;
 51+    node)
 52+     compadd -Q "$@" "from file" create show edit delete list run_list "bulk delete"
 53+    ;;
 54+    recipe)
 55+     compadd "$@" list
 56+    ;;
 57+    role)
 58+      compadd -Q "$@" "bulk delete" create delete edit "from file" list show
 59+    ;; 
 60+    windows)
 61+      compadd "$@" bootstrap
 62+    ;;
 63+    *)
 64+    _arguments '2:Subsubcommands:($(_knife_options1))'
 65+    esac
 66+   ;;
 67+   knifesubcmd2)
 68+    case $words[3] in
 69+     server)
 70+      compadd "$@" list create delete
 71+    ;;
 72+     images)
 73+      compadd "$@" list
 74+    ;;
 75+     site)
 76+      compadd "$@" vendor show share search download list unshare
 77+    ;;
 78+     (show|delete|edit)
 79+     _arguments '3:Subsubcommands:($(_chef_$words[2]s_remote))'
 80+    ;;
 81+    (upload|test)
 82+     _arguments '3:Subsubcommands:($(_chef_$words[2]s_local) --all)'
 83+    ;;
 84+    list)
 85+     compadd -a "$@" knife_general_flags
 86+    ;;
 87+    bag)
 88+      compadd -Q "$@" show edit list "from file" create delete
 89+    ;;
 90+    *)
 91+      _arguments '3:Subsubcommands:($(_knife_options2))'
 92+    esac
 93+   ;;
 94+   knifesubcmd3)
 95+     case $words[3] in
 96+      show)
 97+       case $words[2] in
 98+       cookbook)
 99+          versioncomp=1
100+          _arguments '4:Cookbookversions:($(_cookbook_versions) latest)'
101+       ;;
102+       (node|client|role)
103+         compadd "$@" --attribute
104+       esac
105+     esac