Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
oh-my-zsh
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
github
oh-my-zsh
Commits
13260744
Commit
13260744
authored
Dec 26, 2019
by
Marc Cornellà
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
knife: add README and reformat completion file
parent
a952854c
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
136 additions
and
104 deletions
+136
-104
README.md
plugins/knife/README.md
+25
-0
_knife
plugins/knife/_knife
+111
-104
No files found.
plugins/knife/README.md
0 → 100644
View file @
13260744
# knife plugin
This plugin adds completion for
[
knife
](
https://docs.chef.io/knife.html
)
, a command-line tool
to interact with
[
Chef
](
https://chef.io
)
, a platform to automate and manage infrastructure via
code.
To use it, add
`knife`
to the plugins array in your zshrc file:
```
zsh
plugins
=(
... knife
)
```
## Options
-
`KNIFE_RELATIVE_PATH`
: if set to
`true`
, the completion script will look for local cookbooks
under the
`cookbooks`
folder in the chef root directory. It has preference over the other two
options below.
**Default:**
empty.
-
`KNIFE_COOKBOOK_PATH`
: if set, it points to the folder that contains local cookbooks, for
example:
`/path/to/my/chef/cookbooks`
.
**Default:**
`cookbook_path`
field in
`knife.rb`
(see below).
-
`KNIFE_CONF_PATH`
: variable pointing to the
`knife.rb`
configuration file, for example
`/path/to/my/.chef/knife.rb`
. Only used if
`$KNIFE_COOKBOOK_PATH`
isn't set. If it exists,
`$PWD/.chef/knife.rb`
is used instead. Otherwise, if it's set, its value is used.
**Default**
:
`$HOME/.chef/knife.rb`
.
plugins/knife/_knife
View file @
13260744
...
@@ -9,7 +9,7 @@
...
@@ -9,7 +9,7 @@
# Read around where these are used for more detail.
# Read around where these are used for more detail.
# These flags should be available everywhere according to man knife
# These flags should be available everywhere according to man knife
knife_general_flags=(
--help --server-url --key --config --editor --format --log_level --logfile --no-editor --user --print-after --version --yes
)
knife_general_flags=(
--help --server-url --key --config --editor --format --log_level --logfile --no-editor --user --print-after --version --yes
)
# knife has a very special syntax, some example calls are:
# knife has a very special syntax, some example calls are:
# knife status
# knife status
...
@@ -25,8 +25,8 @@ _knife() {
...
@@ -25,8 +25,8 @@ _knife() {
typeset -A opt_args
typeset -A opt_args
cloudproviders=(bluebox ec2 rackspace slicehost terremark)
cloudproviders=(bluebox ec2 rackspace slicehost terremark)
_arguments \
_arguments \
'1: :->knifecmd'\
'1: :->knifecmd'
\
'2: :->knifesubcmd'\
'2: :->knifesubcmd'
\
'3: :->knifesubcmd2' \
'3: :->knifesubcmd2' \
'4: :->knifesubcmd3' \
'4: :->knifesubcmd3' \
'5: :->knifesubcmd4' \
'5: :->knifesubcmd4' \
...
@@ -38,7 +38,7 @@ _knife() {
...
@@ -38,7 +38,7 @@ _knife() {
;;
;;
knifesubcmd)
knifesubcmd)
case $words[2] in
case $words[2] in
(
bluebox|ec2|rackspace|slicehost|terremark)
bluebox|ec2|rackspace|slicehost|terremark)
compadd "$@" server images
compadd "$@" server images
;;
;;
client)
client)
...
@@ -76,6 +76,7 @@ _knife() {
...
@@ -76,6 +76,7 @@ _knife() {
;;
;;
*)
*)
_arguments '2:Subsubcommands:($(_knife_options1))'
_arguments '2:Subsubcommands:($(_knife_options1))'
;;
esac
esac
;;
;;
knifesubcmd2)
knifesubcmd2)
...
@@ -89,10 +90,10 @@ _knife() {
...
@@ -89,10 +90,10 @@ _knife() {
site)
site)
compadd "$@" vendor show share search download list unshare
compadd "$@" vendor show share search download list unshare
;;
;;
(
show|delete|edit)
show|delete|edit)
_arguments '3:Subsubcommands:($(_chef_$words[2]s_remote))'
_arguments '3:Subsubcommands:($(_chef_$words[2]s_remote))'
;;
;;
(
upload|test)
upload|test)
_arguments '3:Subsubcommands:($(_chef_$words[2]s_local) --all)'
_arguments '3:Subsubcommands:($(_chef_$words[2]s_local) --all)'
;;
;;
list)
list)
...
@@ -103,6 +104,7 @@ _knife() {
...
@@ -103,6 +104,7 @@ _knife() {
;;
;;
*)
*)
_arguments '3:Subsubcommands:($(_knife_options2))'
_arguments '3:Subsubcommands:($(_knife_options2))'
;;
esac
esac
;;
;;
knifesubcmd3)
knifesubcmd3)
...
@@ -113,12 +115,14 @@ _knife() {
...
@@ -113,12 +115,14 @@ _knife() {
versioncomp=1
versioncomp=1
_arguments '4:Cookbookversions:($(_cookbook_versions) latest)'
_arguments '4:Cookbookversions:($(_cookbook_versions) latest)'
;;
;;
(
node|client|role)
node|client|role)
compadd "$@" --attribute
compadd "$@" --attribute
;;
esac
esac
;;
esac
esac
case $words[4] in
case $words[4] in
(
show|edit)
show|edit)
_arguments '4:Subsubsubcommands:($(_chef_$words[2]_$words[3]s_remote))'
_arguments '4:Subsubsubcommands:($(_chef_$words[2]_$words[3]s_remote))'
;;
;;
file)
file)
...
@@ -134,6 +138,7 @@ _knife() {
...
@@ -134,6 +138,7 @@ _knife() {
;;
;;
*)
*)
_arguments '*:Subsubcommands:($(_knife_options3))'
_arguments '*:Subsubcommands:($(_knife_options3))'
;;
esac
esac
;;
;;
list)
list)
...
@@ -141,17 +146,18 @@ _knife() {
...
@@ -141,17 +146,18 @@ _knife() {
;;
;;
*)
*)
_arguments '*:Subsubcommands:($(_knife_options3))'
_arguments '*:Subsubcommands:($(_knife_options3))'
;;
esac
esac
;;
;;
knifesubcmd4)
knifesubcmd4)
if (( versioncomp > 0
)); then
if ((versioncomp > 0
)); then
compadd "$@" attributes definitions files libraries providers recipes resources templates
compadd "$@" attributes definitions files libraries providers recipes resources templates
else
else
case $words[5] in
case $words[5] in
file)
file)
_arguments '*:directory:_path_files -/ -W "$(_chef_root)/data_bags" -qS \ '
_arguments '*:directory:_path_files -/ -W "$(_chef_root)/data_bags" -qS \ '
;;
;;
*) _arguments '*:Subsubcommands:($(_knife_options2))'
*) _arguments '*:Subsubcommands:($(_knife_options2))' ;;
esac
esac
fi
fi
;;
;;
...
@@ -162,21 +168,23 @@ _knife() {
...
@@ -162,21 +168,23 @@ _knife() {
;;
;;
*)
*)
_arguments '*:Subsubcommands:($(_knife_options3))'
_arguments '*:Subsubcommands:($(_knife_options3))'
;;
esac
esac
;;
esac
esac
}
}
# Helper functions to provide the argument completion for several depths of commands
# Helper functions to provide the argument completion for several depths of commands
_knife_options1() {
_knife_options1() {
( for line in $( knife $words[2] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done
)
(for line in $(knife $words[2] --help | grep -v "^knife"); do echo $line | grep "\-\-"; done
)
}
}
_knife_options2() {
_knife_options2() {
( for line in $( knife $words[2] $words[3] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done
)
(for line in $(knife $words[2] $words[3] --help | grep -v "^knife"); do echo $line | grep "\-\-"; done
)
}
}
_knife_options3() {
_knife_options3() {
( for line in $( knife $words[2] $words[3] $words[4] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done
)
(for line in $(knife $words[2] $words[3] $words[4] --help | grep -v "^knife"); do echo $line | grep "\-\-"; done
)
}
}
# The chef_x_remote functions use knife to get a list of objects of type x on the server
# The chef_x_remote functions use knife to get a list of objects of type x on the server
...
@@ -217,7 +225,7 @@ _chef_cookbooks_local() {
...
@@ -217,7 +225,7 @@ _chef_cookbooks_local() {
if [ -f ./.chef/knife.rb ]; then
if [ -f ./.chef/knife.rb ]; then
knife_rb="./.chef/knife.rb"
knife_rb="./.chef/knife.rb"
fi
fi
local cookbook_path=${KNIFE_COOKBOOK_PATH:-$(grep cookbook_path $knife_rb | awk 'BEGIN {FS = "[" }; {print $2}' | sed 's/\,//g' | sed "s/'//g" | sed 's/\(.*\)]/\1/'
)}
local cookbook_path=${KNIFE_COOKBOOK_PATH:-$(grep cookbook_path $knife_rb | awk 'BEGIN {FS = "[" }; {print $2}' | sed 's/\,//g' | sed "s/'//g" | sed 's/\(.*\)]/\1/')}
fi
fi
(for i in $cookbook_path; do ls $i; done)
(for i in $cookbook_path; do ls $i; done)
}
}
...
@@ -229,10 +237,9 @@ _cookbook_versions() {
...
@@ -229,10 +237,9 @@ _cookbook_versions() {
# Searches up from current directory to find the closest folder that has a .chef folder
# Searches up from current directory to find the closest folder that has a .chef folder
# Useful for the knife upload/from file commands
# Useful for the knife upload/from file commands
_chef_root
() {
_chef_root() {
directory="$PWD"
directory="$PWD"
while [ $directory != '/' ]
while [ $directory != '/' ]; do
do
test -e "$directory/.chef" && echo "$directory" && return
test -e "$directory/.chef" && echo "$directory" && return
directory="${directory:h}"
directory="${directory:h}"
done
done
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment