dotfiles/roles/shell-dotfiles/files/functions

273 lines
7.3 KiB
Plaintext

# Usar una basura en vez de borrar sin mas
function rm() {
DIR=`date "+%y%m%dT%H%M%s"`
mkdir -p "$HOME/.basura/$DIR"
mv "$@" "$HOME/.basura/$DIR"
}
# Busca en la basura
function busca() {
find ~/.basura/ -name "*$@*"
}
# Sube cosas para compartir a mi servidor
function upload_stuff() {
for i in $@
do
rsync -P -e ssh $i drymer@daemons.it:/var/www/blog/mierdas/ > /dev/null
echo "https://daemons.it/mierdas/$i"
done
}
# Actualiza kubectl
function upgrade_kubectl (){
echo "Downloading kubectl..."
version=$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt);
curl -s -L https://storage.googleapis.com/kubernetes-release/release/$version/bin/linux/amd64/kubectl -o /tmp/kubectl
chmod +x /tmp/kubectl
mv /tmp/kubectl ~/Scripts/bin/kubectl-$version
ln -fs ~/Scripts/bin/kubectl-$version ~/Scripts/bin/kubectl
echo "kubectl version: $version"
}
# Actualiza kops
function upgrade_kops (){
echo "Downloading kops..."
uri=$(curl -s https://github.com/kubernetes/kops/releases/latest -L | grep "kops-linux-amd64" | grep -v strong | cut -d '"' -f2)
version=$(echo $uri | cut -d'/' -f6)
curl -s -L https://github.com/$uri -o /tmp/kops
chmod +x /tmp/kops
mv /tmp/kops ~/Scripts/bin/kops-$version
ln -fs ~/Scripts/bin/kops-$version ~/Scripts/bin/kops
echo "kops version: $version"
}
# Limpiar ramas mergeadas
function delete_old_branches(){
git checkout master
for branch in `git branch --merged | grep -v master`
do
git branch -d $branch
done
}
# Entra en un contenedor docker
function enter(){
if [[ -z $2 ]]
then
command=bash
else
command=$4
fi
docker exec -ti $1 $command
}
# Entra en un contenedor k8s
function kenter(){
if [[ -z $4 ]]
then
command=bash
else
command="$4"
fi
kubectl exec -ti $1 $2 $3 $command
}
# Comprueba que los repositorios git de un repositorio tienen commits a hacer
function git_updated() {
for git in `ls --color=none`
do
if [[ -d $git ]]
then
cd $git
gitstatus="`git status -s | awk '{print $2}'`"
if [[ -n $gitstatus ]]
then
echo "- \033[0;31m$git\033[0m:\n$gitstatus"
fi
cd ..
fi
done
}
# Docker presentaciones
function reveal () {
function async ()
{
sleep 3 && xdg-open http:localhost:8000
}
async &!
docker run -ti --name revealjs --rm -v `pwd`:/revealjs/files/ -p 8000:8000 revealjs
}
# Autocompletados
## kubectl
KUBECTL_BIN=`which kubectl`
function kubectl (){
if [[ -z $KUBECTL_SHOW_CONTEXT ]]
then
source <($KUBECTL_BIN completion zsh)
source <(kops completion zsh)
fi
KUBECTL_SHOW_CONTEXT="k8s-$($KUBECTL_BIN config current-context)"
$KUBECTL_BIN "$@"
}
## molecule
MOLECULE_BIN=`which molecule`
function molecule() {
if [[ -z $MOLECULE_SET ]]
then
MOLECULE_SET=True
eval "$(_MOLECULE_COMPLETE=source molecule)"
fi
$MOLECULE_BIN "$@"
}
## helm
HELM_BIN=`which helm`
function helm (){
if [[ -z $HELM_SHOW_CONTEXT ]]
then
source <($HELM_BIN completion zsh)
fi
$HELM_BIN "$@"
}
# fzf functions
## fkill - kill process
fkill() {
local pid
pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}')
if [ "x$pid" != "x" ]
then
echo $pid | xargs kill -${1:-9}
fi
}
## insert located file
fzf-locate-widget() {
local selected
if selected=$(locate / | fzf -q "$LBUFFER"); then
LBUFFER=$selected
fi
zle redisplay
}
zle -N fzf-locate-widget
bindkey '\ei' fzf-locate-widget
## Docker stuff: https://medium.com/@calbertts/docker-and-fuzzy-finder-fzf-4c6416f5e0b5
runc() {
export FZF_DEFAULT_OPTS='--height 90% --reverse --border'
local image=$(docker images --format '{{.Repository}}:{{.Tag}}' | fzf-tmux --reverse --multi)
if [[ $image != '' ]]; then
echo -e "\n \033[1mDocker image:\033[0m" $image
read -e -p $' \e[1mOptions: \e[0m' -i "-it --rm" options
printf " \033[1mChoose the command: \033[0m"
local cmd=$(echo -e "/bin/bash\nsh" | fzf-tmux --reverse --multi)
if [[ $cmd == '' ]]; then
read -e -p $' \e[1mCustom command: \e[0m' cmd
fi
echo -e " \033[1mCommand: \033[0m" $cmd
export FZF_DEFAULT_COMMAND='find ./ -type d -maxdepth 1 -exec basename {} \;'
printf " \033[1mChoose the volume: \033[0m"
local volume=$(fzf-tmux --reverse --multi)
local curDir=${PWD##*/}
if [[ $volume == '.' ]]; then
echo -e " \033[1mVolume: \033[0m" $volume
volume="`pwd`:/$curDir -w /$curDir"
else
echo -e " \033[1mVolume: \033[0m" $volume
volume="`pwd`/$volume:/$volume -w /$volume"
fi
export FZF_DEFAULT_COMMAND=""
export FZF_DEFAULT_OPTS=""
history -s runc
history -s docker run $options -v $volume $image $cmd
echo ''
docker run $options -v $volume $image $cmd
fi
}
stopc() {
export FZF_DEFAULT_OPTS='--height 90% --reverse --border'
local container=$(docker ps --format '{{.Names}} => {{.Image}}' | fzf-tmux --reverse --multi | awk -F '\\=>' '{print $1}')
if [[ $container != '' ]]; then
echo -e "\n \033[1mDocker container:\033[0m" $container
printf " \033[1mRemove?: \033[0m"
local cmd=$(echo -e "No\nYes" | fzf-tmux --reverse --multi)
if [[ $cmd != '' ]]; then
if [[ $cmd == 'No' ]]; then
echo -e "\n Stopping $container ...\n"
history -s stopc
history -s docker stop $container
docker stop $container > /dev/null
else
echo -e "\n Stopping $container ..."
history -s stopc
history -s docker stop $container
docker stop $container > /dev/null
echo -e " Removing $container ...\n"
history -s stopc
history -s docker rm $container
docker rm $container > /dev/null
fi
fi
fi
export FZF_DEFAULT_OPTS=""
}
runinc() {
export FZF_DEFAULT_OPTS='--height 90% --reverse --border'
local container=$(docker ps --format '{{.Names}} => {{.Image}}' | fzf-tmux --reverse --multi | awk -F '\\=>' '{print $1}')
if [[ $container != '' ]]; then
echo -e "\n \033[1mDocker container:\033[0m" $container
read -e -p $' \e[1mOptions: \e[0m' -i "-it" options
if [[ $@ == '' ]]; then
read -e -p $' \e[1mCommand: \e[0m' cmd
else
cmd="$@"
fi
echo ''
history -s runinc "$@"
history -s docker exec $options $container $cmd
docker exec $options $container $cmd
echo ''
fi
export FZF_DEFAULT_OPTS=""
}
showipc() {
export FZF_DEFAULT_OPTS='--height 90% --reverse --border'
local container=$(docker ps -a --format '{{.Names}} => {{.Image}}' | fzf-tmux --reverse --multi | awk -F '\\=>' '{print $1}')
if [[ $container != '' ]]; then
local network=$(docker inspect $container -f '{{.NetworkSettings.Networks}}' | awk -F 'map\\[|:' '{print $2}')
echo -e "\n \033[1mDocker container:\033[0m" $container
history -s showipc
history -s docker inspect -f "{{.NetworkSettings.Networks.${network}.IPAddress}}" $container
echo -e " \033[1mNetwork:\033[0m" $network
echo -e " \033[1mIP Address:\033[0m" $(docker inspect -f "{{.NetworkSettings.Networks.${network}.IPAddress}}" $container) "\n"
fi
}
# Clean docker
function docker_clean(){
echo "Deleting stopped containers..."
docker rm $(docker ps -a -q | awk '{print $1}')
echo "Deleting volumes..."
docker volume rm $(docker volume ls)
echo "Deleting none images..."
docker rmi $(docker images -f "dangling=true" -q)
}