v1.0.0
===================================================================== 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:
5
zsh/aws/README.md
Normal file
5
zsh/aws/README.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Amazon Web Services
|
||||
[](https://github.com/barnybug/cli53)
|
||||
<br>
|
||||
|
||||
- relies on AWS-CLI 2.x
|
16
zsh/aws/common.zsh
Normal file
16
zsh/aws/common.zsh
Normal 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
10
zsh/aws/ecr/common.zsh
Normal file
@ -0,0 +1,10 @@
|
||||
source ${0:a:h}/../common.zsh
|
||||
|
||||
__CHECK_DEPENDENCIES \
|
||||
docker \
|
||||
;
|
||||
|
||||
__CHECK_ENV_VARS \
|
||||
;
|
||||
|
||||
#####################################################################
|
13
zsh/aws/ecr/login
Executable file
13
zsh/aws/ecr/login
Executable 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
10
zsh/aws/efs/common.zsh
Normal 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
64
zsh/aws/efs/mount
Executable 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
33
zsh/aws/efs/unmount
Executable 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
34
zsh/aws/route53/backup
Executable 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
|
10
zsh/aws/route53/common.zsh
Normal file
10
zsh/aws/route53/common.zsh
Normal 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
9
zsh/aws/s3/common.zsh
Normal file
@ -0,0 +1,9 @@
|
||||
source ${0:a:h}/../common.zsh
|
||||
|
||||
__CHECK_DEPENDENCIES \
|
||||
;
|
||||
|
||||
__CHECK_ENV_VARS \
|
||||
;
|
||||
|
||||
#####################################################################
|
34
zsh/aws/s3/media-sync/common.zsh
Normal file
34
zsh/aws/s3/media-sync/common.zsh
Normal 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
26
zsh/aws/s3/media-sync/pull
Executable 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
26
zsh/aws/s3/media-sync/push
Executable 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 $@
|
Reference in New Issue
Block a user