b61fcb64abfd733a95f0e83e3009086959623252
- Author
- Frank Louwers <frank@openminds.be>
- Committer
- Frank Louwers <frank@openminds.be>
- Date
Message
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