=====================================================================

Finally decided to port personal scripts into a standalone library.

--- Release Notes ------------------------

- added support for python, zsh, and zx scripts
- added support for "interactive" scripts which drop the user to a REPL
- added support for passing arguments to commands
- added support for python/node virtualenv management through scwrypts
- added contributing and usage docs
- updated zsh plugin to write commands to history
- licensed under GPLv3

--- New Scripts --------------------------

zsh/scwrypts )
  - configure
  - environment/copy
  - environment/delete
  - environment/edit
  - environment/synchronize
  - logs/clear
  - logs/view

zsh )
  - aws/ecr/login
  - aws/efs/mount
  - aws/efs/unmount
  - aws/route53/backup
  - aws/s3/media-sync/pull
  - aws/s3/media-sync/push

python )
  - redis/interactive
This commit is contained in:
2022-04-28 16:09:23 -06:00
commit bffd64051c
63 changed files with 2131 additions and 0 deletions

5
zsh/aws/README.md Normal file
View File

@ -0,0 +1,5 @@
# Amazon Web Services
[![Generic Badge](https://img.shields.io/badge/barnybug-cli53-informational.svg)](https://github.com/barnybug/cli53)
<br>
- relies on AWS-CLI 2.x

16
zsh/aws/common.zsh Normal file
View File

@ -0,0 +1,16 @@
source ${0:a:h}/../common.zsh
__CHECK_DEPENDENCIES \
aws \
jq \
;
__CHECK_ENV_VARS \
_AWS_ACCOUNT \
_AWS_PROFILE \
_AWS_REGION \
;
#####################################################################
_AWS() { aws --profile $_AWS_PROFILE --region $_AWS_REGION --output json $@; }

10
zsh/aws/ecr/common.zsh Normal file
View File

@ -0,0 +1,10 @@
source ${0:a:h}/../common.zsh
__CHECK_DEPENDENCIES \
docker \
;
__CHECK_ENV_VARS \
;
#####################################################################

13
zsh/aws/ecr/login Executable file
View File

@ -0,0 +1,13 @@
#!/bin/zsh
source ${0:a:h}/common.zsh
__CHECK_IMPORTS
#####################################################################
__STATUS "performing AWS ECR docker login"
_AWS ecr get-login-password | docker login \
--username AWS \
--password-stdin \
"$_AWS_ACCOUNT.dkr.ecr.$_AWS_REGION.amazonaws.com" \
&& __SUCCESS "logged in to 'AWS:$_AWS_ACCOUNT:$_AWS_REGION'" \
|| __FAIL 1 "unable to login to '$_AWS_ACCOUNT' in '$_AWS_REGION'"

10
zsh/aws/efs/common.zsh Normal file
View File

@ -0,0 +1,10 @@
source ${0:a:h}/../common.zsh
__CHECK_DEPENDENCIES \
;
__CHECK_ENV_VARS \
AWS__EFS__LOCAL_MOUNT_POINT \
;
#####################################################################

64
zsh/aws/efs/mount Executable file
View File

@ -0,0 +1,64 @@
#!/bin/zsh
source ${0:a:h}/common.zsh
__CHECK_IMPORTS
#####################################################################
_EFS_CONNECT() {
__GETSUDO || exit 1
[ ! -d $AWS__EFS__LOCAL_MOUNT_POINT ] && {
sudo mkdir $AWS__EFS__LOCAL_MOUNT_POINT \
&& __STATUS "created local mount point '$AWS__EFS__LOCAL_MOUNT_POINT'"
}
local FS_ID=$(\
_AWS efs describe-file-systems \
| jq -r '.[] | .[] | .FileSystemId' \
| __FZF 'select a filesystem to mount' \
)
[ ! $FS_ID ] && __ABORT
local MOUNT_POINT="$AWS__EFS__LOCAL_MOUNT_POINT/$FS_ID"
[ -d "$MOUNT_POINT" ] && {
__STATUS "$FS_ID is already mounted"
exit 0
}
local MOUNT_TARGETS=$(_AWS efs describe-mount-targets --file-system-id $FS_ID)
local ZONE=$(\
echo $MOUNT_TARGETS \
| jq -r '.[] | .[] | .AvailabilityZoneName' \
| sort -u | __FZF 'select availability zone'\
)
[ ! $ZONE ] && __ABORT
local MOUNT_IP=$(\
echo $MOUNT_TARGETS \
| jq -r ".[] | .[] | select (.AvailabilityZoneName == \"$ZONE\") | .IpAddress" \
| head -n1 \
)
__SUCCESS 'ready to mount!'
__REMINDER 'your device must be connected to the appropriate VPN'
__STATUS "file system id : $FS_ID"
__STATUS "availability zone : $ZONE"
__STATUS "file system ip : $MOUNT_IP"
__STATUS "local mount point : $MOUNT_POINT"
__Yn 'proceed?' || __ABORT
sudo mkdir $MOUNT_POINT \
&& sudo mount \
-t nfs4 \
-o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport \
$MOUNT_IP:/ \
"$MOUNT_POINT" \
&& __SUCCESS "mounted at '$MOUNT_POINT'" \
|| {
sudo rmdir $MOUNT_POINT >/dev/null 2>&1
__FAIL 2 "unable to mount '$FS_ID'"
}
}
#####################################################################
_EFS_CONNECT

33
zsh/aws/efs/unmount Executable file
View File

@ -0,0 +1,33 @@
#!/bin/zsh
source ${0:a:h}/common.zsh
__CHECK_IMPORTS
#####################################################################
_EFS_DISCONNECT() {
[ ! -d "$AWS__EFS__LOCAL_MOUNT_POINT" ] && {
__STATUS 'no efs currently mounted'
exit 0
}
local MOUNTED=$(ls "$AWS__EFS__LOCAL_MOUNT_POINT")
[ ! $MOUNTED ] && {
__STATUS 'no efs currently mounted'
exit 0
}
__GETSUDO || exit 1
local SELECTED=$(echo $MOUNTED | __FZF 'select a file system to unmount')
[ ! $SELECTED ] && __ABORT
local EFS="$AWS__EFS__LOCAL_MOUNT_POINT/$SELECTED"
__STATUS "unmounting '$SELECTED'"
sudo umount $EFS >/dev/null 2>&1
sudo rmdir $EFS \
&& __SUCCESS "done" \
|| __FAIL 2 "failed to unmount '$EFS'"
}
#####################################################################
_EFS_DISCONNECT

34
zsh/aws/route53/backup Executable file
View File

@ -0,0 +1,34 @@
#!/bin/zsh
source ${0:a:h}/common.zsh
__CHECK_IMPORTS
#####################################################################
_ROUTE53_BACKUP() {
local BACKUP_PATH="$SCWRYPTS_OUTPUT_PATH/$ENV_NAME/aws-dns-backup/$(date '+%Y-%m-%d')"
mkdir -p $BACKUP_PATH >/dev/null 2>&1
local DOMAIN
local JOBS=()
for DOMAIN in $(_ROUTE53_GET_DOMAINS)
do
( __STATUS "creating '$BACKUP_PATH/$DOMAIN.txt'" \
&& cli53 export --profile $_AWS_PROFILE $DOMAIN > "$BACKUP_PATH/$DOMAIN.txt" \
&& __SUCCESS "backed up '$DOMAIN'" \
|| __ERROR "failed to back up '$DOMAIN'" \
) &
JOBS+=$!
done
local P
for P in ${JOBS[@]}; do wait $P >/dev/null 2>&1; done
}
_ROUTE53_GET_DOMAINS() {
cli53 list --profile $_AWS_PROFILE \
| awk '{print $2;}' \
| sed '1d; s/\.$//'\
;
}
#####################################################################
_ROUTE53_BACKUP

View File

@ -0,0 +1,10 @@
source ${0:a:h}/../common.zsh
__CHECK_DEPENDENCIES \
cli53 \
;
__CHECK_ENV_VARS \
;
#####################################################################

9
zsh/aws/s3/common.zsh Normal file
View File

@ -0,0 +1,9 @@
source ${0:a:h}/../common.zsh
__CHECK_DEPENDENCIES \
;
__CHECK_ENV_VARS \
;
#####################################################################

View File

@ -0,0 +1,34 @@
source ${0:a:h}/../common.zsh
__CHECK_DEPENDENCIES \
;
__CHECK_ENV_VARS \
AWS__S3__MEDIA_TARGETS \
AWS__S3__MEDIA_BUCKET \
;
AWS__S3__MEDIA_TARGETS=($(echo $AWS__S3__MEDIA_TARGETS | sed 's/,/\n/g'))
#####################################################################
__SYNC_MEDIA() {
local ACTION="$1"
local REMOTE_TARGET="s3://$AWS__S3__MEDIA_BUCKET/$2"
local LOCAL_TARGET="$HOME/$2"
local A B
case $ACTION in
push ) A="$LOCAL_TARGET"; B="$REMOTE_TARGET" ;;
pull ) A="$REMOTE_TARGET"; B="$LOCAL_TARGET" ;;
* ) __ERROR "unknown action '$1'"; return 1 ;;
esac
local FLAGS=(${@:3})
__STATUS "${ACTION}ing $2"
_AWS s3 sync $REMOTE_TARGET $LOCAL_TARGET $FLAGS \
&& __SUCCESS "$2 up-to-date" \
|| { __ERROR "unable to sync $2 (see above)"; return 1; }
}

26
zsh/aws/s3/media-sync/pull Executable file
View File

@ -0,0 +1,26 @@
#!/bin/zsh
source ${0:a:h}/common.zsh
__CHECK_IMPORTS
#####################################################################
__PULL_ALL_MEDIA() {
local FLAGS=($@)
local FAILED_COUNT=0
__STATUS 'starting media download from s3'
local TARGET
for TARGET in $AWS__S3__MEDIA_TARGETS
do
__SYNC_MEDIA pull $TARGET $FLAGS || ((FAILED_COUNT+=1))
done
[[ $FAILED_COUNT -eq 0 ]] \
&& __SUCCESS 'local media files now up-to-date' \
|| __FAIL $FAILED_COUNT 'unable to download one or more targets' \
;
}
#####################################################################
__PULL_ALL_MEDIA $@

26
zsh/aws/s3/media-sync/push Executable file
View File

@ -0,0 +1,26 @@
#!/bin/zsh
source ${0:a:h}/common.zsh
__CHECK_IMPORTS
#####################################################################
__PUSH_ALL_MEDIA() {
local FLAGS=($@)
local FAILED_COUNT=0
__STATUS 'starting media upload to s3'
local TARGET
for TARGET in $AWS__S3__MEDIA_TARGETS
do
__SYNC_MEDIA push $TARGET $FLAGS || ((FAILED_COUNT+=1))
done
[[ $FAILED_COUNT -eq 0 ]] \
&& __SUCCESS 's3 media files now up-to-date' \
|| __FAIL $FAILED_COUNT 'unable to upload one or more targets' \
;
}
#####################################################################
__PUSH_ALL_MEDIA $@