Browse Source

feat(multipass): add plugin for multipass (#10140)

Co-authored-by: C. Yavuzsen <cyavuzsen@comscore.com>
Civan Yavuzşen 2 years ago
parent
commit
4ee0cf3cb4
3 changed files with 102 additions and 0 deletions
  1. 22 0
      plugins/multipass/README.md
  2. 73 0
      plugins/multipass/_multipass
  3. 7 0
      plugins/multipass/multipass.plugin.zsh

+ 22 - 0
plugins/multipass/README.md

@@ -0,0 +1,22 @@
+# multipass
+
+This plugin provides completion for [multipass](https://multipass.run), as well as aliases
+for multipass commands.
+
+To use it, add `multipass` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... multipass)
+```
+
+## Aliases
+
+| Alias  | Command                                                             |
+| ------ | ------------------------------------------------------------------- |
+| `mp`   | `multipass`                                                         |
+| `mpl`  | `multipass list`                                                    |
+| `mpla` | `multipass launch`                                                  |
+| `mpln` | `multipass launch --network en0 --network name=bridge0,mode=manual` |
+| `mps`  | `multipass shell`                                                   |
+| `mpsp` | `multipass stop`                                                    |
+| `mpst` | `multipass start`                                                   |

+ 73 - 0
plugins/multipass/_multipass

@@ -0,0 +1,73 @@
+#compdef multipass
+
+_multipass_get_command_list () {
+  # Sample output:
+  # $ multipass --help
+  # ...
+  # Options:
+  #   -h, --help     Display this help
+  #   -v, --verbose  Increase logging verbosity. Repeat the 'v' in the short option
+  #                  for more detail. Maximum verbosity is obtained with 4 (or more)
+  #                  v's, i.e. -vvvv.
+  # ...
+  # Available commands:
+  #   alias     Create an alias
+  #   aliases   List available aliases
+  #   ...
+  #
+  $_comp_command1 --help | sed '1,/Available commands/d' | awk '/^[ \t]*[a-z]+/ { print $1 }'
+}
+
+_multipass_get_args_list () {
+  # Sample output:
+  # $ multpass help stop
+  # ...
+  # Options:
+  # -h, --help         Display this help
+  # -v, --verbose      Increase logging verbosity. Repeat the 'v' in the short
+  #                     option for more detail. Maximum verbosity is obtained with
+  #                     4 (or more) v's, i.e. -vvvv.
+  # --all              Stop all instances
+  # -t, --time <time>  Time from now, in minutes, to delay shutdown of the
+  #                     instance
+  # -c, --cancel       Cancel a pending delayed shutdown
+  #
+  # Arguments:
+  # name               Names of instances to stop. If omitted, and without the
+  #                     --all option, 'primary' will be assumed.
+  #
+  local arg_name=$($_comp_command1 help ${words[2]} | sed '1,/Arguments/d' | awk '/^[ \t]*[a-z]+/ { print $1; exit }')
+
+  case $arg_name in
+    name)
+      # Sample output:
+      # $ multipass list
+      # Name                    State             IPv4             Image
+      # workable-poacher        Running           10.2.0.28        Ubuntu openHAB Home Appliance
+      #
+      $_comp_command1 list | sed '1d' | awk '/^[ \t]*[^ ]+/ { print $1 }'
+    ;;
+    command)
+      _multipass_get_command_list
+    ;;
+  esac
+}
+
+_multipass () {
+  typeset -A opt_args
+
+  _arguments \
+    '1: :->command'\
+    '*: :->args'
+
+  case $state in
+    command)
+      compadd $(_multipass_get_command_list)
+    ;;
+    *)
+      compadd $(_multipass_get_args_list)
+    ;;
+  esac
+}
+
+_multipass "$@"

+ 7 - 0
plugins/multipass/multipass.plugin.zsh

@@ -0,0 +1,7 @@
+alias mp="multipass"
+alias mpl="multipass list"
+alias mpla="multipass launch"
+alias mpln="multipass launch --network en0 --network name=bridge0,mode=manual"
+alias mps="multipass shell"
+alias mpsp="multipass stop"
+alias mpst="multipass start"