aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShohei YOSHIDA <syohex@gmail.com>2020-12-31 00:36:40 +0900
committerGitHub <noreply@github.com>2020-12-31 00:36:40 +0900
commit9def41ae646c1e5b2b88b4201491bb6a21d25fe7 (patch)
treeb6948562a852bf569593132e67bcc0b2ac0721fb
parentMerge pull request #711 from kanashimia/master (diff)
parent_mssh: Add a license header (diff)
downloadzsh-completions-9def41ae646c1e5b2b88b4201491bb6a21d25fe7.tar
zsh-completions-9def41ae646c1e5b2b88b4201491bb6a21d25fe7.tar.gz
zsh-completions-9def41ae646c1e5b2b88b4201491bb6a21d25fe7.tar.bz2
zsh-completions-9def41ae646c1e5b2b88b4201491bb6a21d25fe7.tar.lz
zsh-completions-9def41ae646c1e5b2b88b4201491bb6a21d25fe7.tar.xz
zsh-completions-9def41ae646c1e5b2b88b4201491bb6a21d25fe7.tar.zst
zsh-completions-9def41ae646c1e5b2b88b4201491bb6a21d25fe7.zip
Merge pull request #773 from simnalamburt/mssh
Add 'mssh' completion
-rw-r--r--src/_mssh83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/_mssh b/src/_mssh
new file mode 100644
index 0000000..553d944
--- /dev/null
+++ b/src/_mssh
@@ -0,0 +1,83 @@
+#compdef mssh
+# ------------------------------------------------------------------------------
+# Copyright (c) 2020 Hyeon Kim
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+# ------------------------------------------------------------------------------
+# Description
+# -----------
+# mssh is a Python client for accessing EC2 instances via AWS EC2 Instance
+# Connect.
+#
+# References:
+# https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-connect-methods.html#ec2-instance-connect-connecting-ec2-cli
+# https://github.com/aws/aws-ec2-instance-connect-cli
+# https://pypi.org/project/ec2instanceconnectcli/
+#
+# ------------------------------------------------------------------------------
+# Authors
+# -------
+#
+# * Hyeon Kim (https://hyeon.me/)
+#
+# ------------------------------------------------------------------------------
+
+# Define function only when it doesn't exist
+(( $+functions[_mssh_cache_policy] )) || _mssh_cache_policy() {
+ # Cache invalidates after 30 seconds
+ #
+ # Reference:
+ # http://zsh.sourceforge.net/Doc/Release/Expansion.html#index-globbing_002c-qualifiers
+ local -a oldp
+ oldp=( "$1"(ms+30) )
+ (( $#oldp ))
+}
+
+# Unless user explicitly turned off caching, enable caching just for this context
+local existing_setting
+zstyle -s ":completion:${curcontext}:" use-cache existing_setting
+if [[ -z "${existing_setting}" ]]; then
+ zstyle ":completion:${curcontext}:" use-cache on
+fi
+
+# Update cache policy only when there was no existing policy
+local existing_policy
+zstyle -s ":completion:${curcontext}:" cache-policy existing_policy
+if [[ -z "${existing_policy}" ]]; then
+ zstyle ":completion:${curcontext}:" cache-policy _mssh_cache_policy
+fi
+
+local -a instances
+if _cache_invalid mssh_instances || ! _retrieve_cache mssh_instances; then
+ # Cache is invalid or caching feature is disabled
+ IFS=$'\n\t' instances=($(
+ aws ec2 describe-instances \
+ --query 'Reservations[].Instances[] | [?State.Name == `running`].join(`:`, [InstanceId, Tags[?Key == `Name`].Value | [0]])' \
+ --output text
+ ))
+
+ _store_cache mssh_instances instances
+fi
+
+_describe 'command' instances
+
+# Reference:
+# http://zsh.sourceforge.net/Doc/Release/Completion-System.html
+# https://github.com/zsh-users/zsh-completions/blob/master/zsh-completions-howto.org