Signed-off-by: Steve Durrheimer <s.durrheimer@gmail.com>
| ... | ... |
@@ -936,6 +936,238 @@ __docker_plugin_subcommand() {
|
| 936 | 936 |
|
| 937 | 937 |
# EO plugin |
| 938 | 938 |
|
| 939 |
+# BO service |
|
| 940 |
+ |
|
| 941 |
+__docker_service_complete_ls_filters() {
|
|
| 942 |
+ [[ $PREFIX = -* ]] && return 1 |
|
| 943 |
+ integer ret=1 |
|
| 944 |
+ |
|
| 945 |
+ if compset -P '*='; then |
|
| 946 |
+ case "${${words[-1]%=*}#*=}" in
|
|
| 947 |
+ (id) |
|
| 948 |
+ __docker_complete_services_ids && ret=0 |
|
| 949 |
+ ;; |
|
| 950 |
+ (name) |
|
| 951 |
+ __docker_complete_services_names && ret=0 |
|
| 952 |
+ ;; |
|
| 953 |
+ *) |
|
| 954 |
+ _message 'value' && ret=0 |
|
| 955 |
+ ;; |
|
| 956 |
+ esac |
|
| 957 |
+ else |
|
| 958 |
+ opts=('id' 'label' 'name')
|
|
| 959 |
+ _describe -t filter-opts "filter options" opts -qS "=" && ret=0 |
|
| 960 |
+ fi |
|
| 961 |
+ |
|
| 962 |
+ return ret |
|
| 963 |
+} |
|
| 964 |
+ |
|
| 965 |
+__docker_service_complete_tasks_filters() {
|
|
| 966 |
+ [[ $PREFIX = -* ]] && return 1 |
|
| 967 |
+ integer ret=1 |
|
| 968 |
+ |
|
| 969 |
+ if compset -P '*='; then |
|
| 970 |
+ case "${${words[-1]%=*}#*=}" in
|
|
| 971 |
+ (desired-state) |
|
| 972 |
+ state_opts=('accepted' 'running')
|
|
| 973 |
+ _describe -t state-opts "desired state options" state_opts && ret=0 |
|
| 974 |
+ ;; |
|
| 975 |
+ *) |
|
| 976 |
+ _message 'value' && ret=0 |
|
| 977 |
+ ;; |
|
| 978 |
+ esac |
|
| 979 |
+ else |
|
| 980 |
+ opts=('desired-state' 'id' 'label' 'name')
|
|
| 981 |
+ _describe -t filter-opts "filter options" opts -qS "=" && ret=0 |
|
| 982 |
+ fi |
|
| 983 |
+ |
|
| 984 |
+ return ret |
|
| 985 |
+} |
|
| 986 |
+ |
|
| 987 |
+__docker_services() {
|
|
| 988 |
+ [[ $PREFIX = -* ]] && return 1 |
|
| 989 |
+ integer ret=1 |
|
| 990 |
+ local line s |
|
| 991 |
+ declare -a lines services |
|
| 992 |
+ |
|
| 993 |
+ type=$1; shift |
|
| 994 |
+ |
|
| 995 |
+ lines=(${(f)"$(_call_program commands docker $docker_options service ls)"})
|
|
| 996 |
+ |
|
| 997 |
+ # Parse header line to find columns |
|
| 998 |
+ local i=1 j=1 k header=${lines[1]}
|
|
| 999 |
+ declare -A begin end |
|
| 1000 |
+ while (( j < ${#header} - 1 )); do
|
|
| 1001 |
+ i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 ))
|
|
| 1002 |
+ j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 ))
|
|
| 1003 |
+ k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 ))
|
|
| 1004 |
+ begin[${header[$i,$((j-1))]}]=$i
|
|
| 1005 |
+ end[${header[$i,$((j-1))]}]=$k
|
|
| 1006 |
+ done |
|
| 1007 |
+ end[${header[$i,$((j-1))]}]=-1
|
|
| 1008 |
+ lines=(${lines[2,-1]})
|
|
| 1009 |
+ |
|
| 1010 |
+ # Service ID |
|
| 1011 |
+ if [[ $type = (ids|all) ]]; then |
|
| 1012 |
+ for line in $lines; do |
|
| 1013 |
+ s="${line[${begin[ID]},${end[ID]}]%% ##}"
|
|
| 1014 |
+ s="$s:${(l:7:: :::)${${line[${begin[IMAGE]},${end[IMAGE]}]}%% ##}}"
|
|
| 1015 |
+ services=($services $s) |
|
| 1016 |
+ done |
|
| 1017 |
+ fi |
|
| 1018 |
+ |
|
| 1019 |
+ # Names |
|
| 1020 |
+ if [[ $type = (names|all) ]]; then |
|
| 1021 |
+ for line in $lines; do |
|
| 1022 |
+ s="${line[${begin[NAME]},${end[NAME]}]%% ##}"
|
|
| 1023 |
+ s="$s:${(l:7:: :::)${${line[${begin[IMAGE]},${end[IMAGE]}]}%% ##}}"
|
|
| 1024 |
+ services=($services $s) |
|
| 1025 |
+ done |
|
| 1026 |
+ fi |
|
| 1027 |
+ |
|
| 1028 |
+ _describe -t services-list "services" services "$@" && ret=0 |
|
| 1029 |
+ return ret |
|
| 1030 |
+} |
|
| 1031 |
+ |
|
| 1032 |
+__docker_complete_services() {
|
|
| 1033 |
+ [[ $PREFIX = -* ]] && return 1 |
|
| 1034 |
+ __docker_services all "$@" |
|
| 1035 |
+} |
|
| 1036 |
+ |
|
| 1037 |
+__docker_complete_services_ids() {
|
|
| 1038 |
+ [[ $PREFIX = -* ]] && return 1 |
|
| 1039 |
+ __docker_services ids "$@" |
|
| 1040 |
+} |
|
| 1041 |
+ |
|
| 1042 |
+__docker_complete_services_names() {
|
|
| 1043 |
+ [[ $PREFIX = -* ]] && return 1 |
|
| 1044 |
+ __docker_services names "$@" |
|
| 1045 |
+} |
|
| 1046 |
+ |
|
| 1047 |
+__docker_service_commands() {
|
|
| 1048 |
+ local -a _docker_service_subcommands |
|
| 1049 |
+ _docker_service_subcommands=( |
|
| 1050 |
+ "create:Create a new service" |
|
| 1051 |
+ "inspect:Display detailed information on one or more services" |
|
| 1052 |
+ "ls:List services" |
|
| 1053 |
+ "rm:Remove a service" |
|
| 1054 |
+ "scale:Scale one or multiple services" |
|
| 1055 |
+ "tasks:List the tasks of a service" |
|
| 1056 |
+ "update:Update a service" |
|
| 1057 |
+ ) |
|
| 1058 |
+ _describe -t docker-service-commands "docker service command" _docker_service_subcommands |
|
| 1059 |
+} |
|
| 1060 |
+ |
|
| 1061 |
+__docker_service_subcommand() {
|
|
| 1062 |
+ local -a _command_args opts_help opts_create_update |
|
| 1063 |
+ local expl help="--help" |
|
| 1064 |
+ integer ret=1 |
|
| 1065 |
+ |
|
| 1066 |
+ opts_help=("(: -)--help[Print usage]")
|
|
| 1067 |
+ opts_create_update=( |
|
| 1068 |
+ "($help)*--constraint=[Placement constraints]:constraint: " |
|
| 1069 |
+ "($help)--endpoint-mode=[Placement constraints]:mode:(VIP DNSRR)" |
|
| 1070 |
+ "($help)*"{-e=,--env=}"[Set environment variables]:env: "
|
|
| 1071 |
+ "($help)*--label=[Service labels]:label: " |
|
| 1072 |
+ "($help)--limit-cpu=[Limit CPUs]:value: " |
|
| 1073 |
+ "($help)--limit-memory=[Limit Memory]:value: " |
|
| 1074 |
+ "($help)--mode=[Limit Memory]:mode:(global replicated)" |
|
| 1075 |
+ "($help)*"{-m=,--mount=}"[Attach a mount to the service]:mount: "
|
|
| 1076 |
+ "($help)--name=[Service name]:name: " |
|
| 1077 |
+ "($help)*--network=[Network attachments]:network: " |
|
| 1078 |
+ "($help)*"{-p=,--publish=}"[Publish a port as a node port]:port: "
|
|
| 1079 |
+ "($help)--replicas=[Number of tasks]:replicas: " |
|
| 1080 |
+ "($help)--reserve-cpu=[Reserve CPUs]:value: " |
|
| 1081 |
+ "($help)--reserve-memory=[Reserve Memory]:value: " |
|
| 1082 |
+ "($help)--restart-condition=[Restart when condition is met]:mode:(any none on_failure)" |
|
| 1083 |
+ "($help)--restart-delay=[Delay between restart attempts]:delay: " |
|
| 1084 |
+ "($help)--restart-max-attempts=[Maximum number of restarts before giving up]:max-attempts: " |
|
| 1085 |
+ "($help)--restart-window=[Window used to evaluate the restart policy]:window: " |
|
| 1086 |
+ "($help)--stop-grace-period=[Time to wait before force killing a container]:grace period: " |
|
| 1087 |
+ "($help)--update-delay=[Delay between updates]:delay: " |
|
| 1088 |
+ "($help)--update-parallelism=[Maximum number of tasks updated simultaneously]:number: " |
|
| 1089 |
+ "($help -u --user)"{-u=,--user=}"[Username or UID]:user:_users"
|
|
| 1090 |
+ "($help -w --workdir)"{-w=,--workdir=}"[Working directory inside the container]:directory:_directories"
|
|
| 1091 |
+ ) |
|
| 1092 |
+ |
|
| 1093 |
+ case "$words[1]" in |
|
| 1094 |
+ (create) |
|
| 1095 |
+ _arguments $(__docker_arguments) \ |
|
| 1096 |
+ $opts_help \ |
|
| 1097 |
+ $opts_create_update \ |
|
| 1098 |
+ "($help -): :__docker_images" \ |
|
| 1099 |
+ "($help -):command: _command_names -e" \ |
|
| 1100 |
+ "($help -)*::arguments: _normal" && ret=0 |
|
| 1101 |
+ ;; |
|
| 1102 |
+ (inspect) |
|
| 1103 |
+ _arguments $(__docker_arguments) \ |
|
| 1104 |
+ $opts_help \ |
|
| 1105 |
+ "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \
|
|
| 1106 |
+ "($help -p --pretty)"{-p,--pretty}"[Print the information in a human friendly format]" \
|
|
| 1107 |
+ "($help -)*:service:__docker_complete_services" && ret=0 |
|
| 1108 |
+ ;; |
|
| 1109 |
+ (ls|list) |
|
| 1110 |
+ _arguments $(__docker_arguments) \ |
|
| 1111 |
+ $opts_help \ |
|
| 1112 |
+ "($help)*"{-f=,--filter=}"[Filter output based on conditions provided]:filter:->filter-options" \
|
|
| 1113 |
+ "($help -q --quiet)"{-q,--quiet}"[Only display IDs]" && ret=0
|
|
| 1114 |
+ case $state in |
|
| 1115 |
+ (filter-options) |
|
| 1116 |
+ __docker_service_complete_ls_filters && ret=0 |
|
| 1117 |
+ ;; |
|
| 1118 |
+ esac |
|
| 1119 |
+ ;; |
|
| 1120 |
+ (rm|remove) |
|
| 1121 |
+ _arguments $(__docker_arguments) \ |
|
| 1122 |
+ $opts_help \ |
|
| 1123 |
+ "($help -)*:service:__docker_complete_services" && ret=0 |
|
| 1124 |
+ ;; |
|
| 1125 |
+ (scale) |
|
| 1126 |
+ _arguments $(__docker_arguments) \ |
|
| 1127 |
+ $opts_help \ |
|
| 1128 |
+ "($help -)*:service:->values" && ret=0 |
|
| 1129 |
+ case $state in |
|
| 1130 |
+ (values) |
|
| 1131 |
+ if compset -P '*='; then |
|
| 1132 |
+ _message 'replicas' && ret=0 |
|
| 1133 |
+ else |
|
| 1134 |
+ __docker_complete_services -qS "=" |
|
| 1135 |
+ fi |
|
| 1136 |
+ ;; |
|
| 1137 |
+ esac |
|
| 1138 |
+ ;; |
|
| 1139 |
+ (tasks) |
|
| 1140 |
+ _arguments $(__docker_arguments) \ |
|
| 1141 |
+ $opts_help \ |
|
| 1142 |
+ "($help -a --all)"{-a,--all}"[Display all tasks]" \
|
|
| 1143 |
+ "($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \
|
|
| 1144 |
+ "($help -n --no-resolve)"{-n,--no-resolve}"[Do not map IDs to Names]" \
|
|
| 1145 |
+ "($help -)1:service:__docker_complete_services" && ret=0 |
|
| 1146 |
+ case $state in |
|
| 1147 |
+ (filter-options) |
|
| 1148 |
+ __docker_service_complete_tasks_filters && ret=0 |
|
| 1149 |
+ ;; |
|
| 1150 |
+ esac |
|
| 1151 |
+ ;; |
|
| 1152 |
+ (update) |
|
| 1153 |
+ _arguments $(__docker_arguments) \ |
|
| 1154 |
+ $opts_help \ |
|
| 1155 |
+ $opts_create_update \ |
|
| 1156 |
+ "($help)--arg=[Service command args]:arguments: _normal" \ |
|
| 1157 |
+ "($help)--command=[Service command]:command: _command_names -e" \ |
|
| 1158 |
+ "($help)--image=[Service image tag]:image:__docker_repositories" \ |
|
| 1159 |
+ "($help -)1:service:__docker_complete_services" && ret=0 |
|
| 1160 |
+ ;; |
|
| 1161 |
+ (help) |
|
| 1162 |
+ _arguments $(__docker_arguments) ":subcommand:__docker_service_commands" && ret=0 |
|
| 1163 |
+ ;; |
|
| 1164 |
+ esac |
|
| 1165 |
+ |
|
| 1166 |
+ return ret |
|
| 1167 |
+} |
|
| 1168 |
+ |
|
| 1169 |
+# EO service |
|
| 1170 |
+ |
|
| 939 | 1171 |
# BO swarm |
| 940 | 1172 |
|
| 941 | 1173 |
__docker_swarm_commands() {
|
| ... | ... |
@@ -1707,6 +1939,23 @@ __docker_subcommand() {
|
| 1707 | 1707 |
;; |
| 1708 | 1708 |
esac |
| 1709 | 1709 |
;; |
| 1710 |
+ (service) |
|
| 1711 |
+ local curcontext="$curcontext" state |
|
| 1712 |
+ _arguments $(__docker_arguments) \ |
|
| 1713 |
+ $opts_help \ |
|
| 1714 |
+ "($help -): :->command" \ |
|
| 1715 |
+ "($help -)*:: :->option-or-argument" && ret=0 |
|
| 1716 |
+ |
|
| 1717 |
+ case $state in |
|
| 1718 |
+ (command) |
|
| 1719 |
+ __docker_service_commands && ret=0 |
|
| 1720 |
+ ;; |
|
| 1721 |
+ (option-or-argument) |
|
| 1722 |
+ curcontext=${curcontext%:*:*}:docker-${words[-1]}:
|
|
| 1723 |
+ __docker_service_subcommand && ret=0 |
|
| 1724 |
+ ;; |
|
| 1725 |
+ esac |
|
| 1726 |
+ ;; |
|
| 1710 | 1727 |
(start) |
| 1711 | 1728 |
_arguments $(__docker_arguments) \ |
| 1712 | 1729 |
$opts_help \ |