Merge branch 'main' of ssh://git.a09.uk:48766/alex/alex-environ

This commit is contained in:
Alex Manning 2024-07-14 21:42:31 +00:00
commit 3ab0a641a4
15 changed files with 178 additions and 11 deletions

2
.gitmodules vendored
View file

@ -1,3 +1,3 @@
[submodule "private"] [submodule "private"]
path = private path = private
url = ssh://git@git.a09.uk:48765/alex/alex-environ-private.git url = ssh://git@git.a09.uk:48766/alex/alex-environ-private.git

View file

@ -4,6 +4,8 @@
[[ $- != *i* ]] && return [[ $- != *i* ]] && return
#SET PATH IN .BASH_PROFILE #SET PATH IN .BASH_PROFILE
# Set the shell's editor to vi mode
set -o vi
#don't put duplicate lines or lines beginning with a space into history #don't put duplicate lines or lines beginning with a space into history
HISTCONTROL=ignoreboth HISTCONTROL=ignoreboth

View file

@ -0,0 +1,9 @@
---
$schema: https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json
version: "0.2"
#dictionaryDefinitions:
# - name: custom-words
# path: "~/.alex-environ/.home/cspell/custom-words.txt"
# addWords: true
#dictionaries:
# - custom-words

View file

View file

@ -28,7 +28,7 @@ limit-inference-results=100
# List of plugins (as comma separated values of python modules names) to load, # List of plugins (as comma separated values of python modules names) to load,
# usually to register additional checkers. # usually to register additional checkers.
load-plugins= #load-plugins=pylint_django
# Pickle collected data for later comparisons. # Pickle collected data for later comparisons.
persistent=yes persistent=yes

View file

@ -19,9 +19,7 @@
required = true required = true
clean = git-lfs clean -- %f clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f smudge = git-lfs smudge -- %f
[core]
hooksPath = ~/.alex-environ/private/home/git_hooks
[alias] [alias]
adog = log --all --decorate --oneline --graph adog = log --all --decorate --oneline --graph
[rerere]
enabled = true

1
home/.inputrc Normal file
View file

@ -0,0 +1 @@
set editing-mode vi

145
home/.local/bin/kubectl-ssh Executable file
View file

@ -0,0 +1,145 @@
#!/usr/bin/env bash
set -e
ssh_node() {
node=$1
shift
if [ "$node" = "" ]; then
node=$(kubectl get node -o name "$@" | sed 's/node\///' | tr '\n' ' ')
node=${node::-1}
if [[ "$node" =~ " " ]]; then
echo "Node name must be specified. Choose one of: [$node]"
exit 1
else
echo "Single-node cluster detected. Defaulting to node $node"
fi
fi
if [ $# -eq 1 ]; then
command="$1"
shift
fi
ns=kube-system
pod=$(
kubectl create -n "$ns" -o name "$@" -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
generateName: ssh-node-
labels:
plugin: ssh-node
spec:
nodeName: $node
containers:
- name: ssh-node
image: rancherlabs/swiss-army-knife
imagePullPolicy: IfNotPresent
command: ["chroot", "/host"]
tty: true
stdin: true
stdinOnce: true
securityContext:
privileged: true
volumeMounts:
- name: host
mountPath: /host
volumes:
- name: host
hostPath:
path: /
hostNetwork: true
hostIPC: true
hostPID: true
restartPolicy: Never
tolerations:
- operator: "Exists"
EOF
)
deletePod() {
kubectl delete -n "$ns" "$pod" "$@" --wait=false
}
trap deletePod EXIT
echo "Created $pod"
echo "Waiting for container to start..."
kubectl wait -n "$ns" --for=condition=Ready --timeout 60s "$pod" "$@" >/dev/null
if [ -z "$command" ]; then
kubectl attach -n "$ns" -it "$pod" -c ssh-node "$@"
else
kubectl exec -n "$ns" -it "$pod" ssh-node -- "$command"
fi
}
ssh_pod() {
# TODO: improve this
if [ "$1" == "" ]; then
echo "Pod name must be specified."
exit 1
fi
# Use sh as a default and switch to bash if it's available
# shellcheck disable=SC2016
kubectl exec -it "$@" -- sh -c 'exec "$( command -v bash || echo sh )"'
}
print_usage() {
echo "Provider-agnostic way of opening a remote shell to a Kubernetes node."
echo
echo "Enables you to access a node even when it doesn't run an SSH server or"
echo "when you don't have the required credentials. Also, the way you log in"
echo "is always the same, regardless of what provides the Kubernetes cluster"
echo "(e.g. Minikube, Kind, Docker Desktop, GKE, AKS, EKS, ...)"
echo
echo "You must have cluster-admin rights to use this plugin."
echo
echo "The primary focus of this plugin is to provide access to nodes, but it"
echo "also provides a quick way of running a shell inside a pod."
echo
echo "Examples: "
echo " # Open a shell to node of a single-node cluster (e.g. Docker Desktop)"
echo " kubectl ssh node"
echo
echo " # Open a shell to node of a multi-node cluster (e.g. GKE)"
echo " kubectl ssh node my-worker-node-1"
echo
echo " # Execute the command ls on a node my-worker-node-1"
echo " kubectl ssh node my-worker-node-1 ls"
echo
echo " # Open a shell to a pod"
echo " kubectl ssh pod my-pod"
echo
echo "Usage:"
echo " kubectl ssh node [nodeName [command]]"
echo " kubectl ssh pod [podName] [-n namespace] [-c container]"
exit 0
}
if [ "$1" == "--help" ]; then
print_usage
fi
if [[ "$1" == node/* ]]; then
nodeName=${1:5}
shift
ssh_node "$nodeName" "$@"
elif [ "$1" == "node" ]; then
shift
case "$1" in
-*) nodeName="";;
"") ;;
*) nodeName="$1"; shift ;;
esac
ssh_node "$nodeName" "$@"
elif [[ "$1" == pod/* ]]; then
ssh_pod "$@"
elif [ "$1" == "pod" ]; then
shift
ssh_pod "$@"
else
print_usage
fi

View file

@ -1,4 +1,6 @@
{ {
"coc.preferences.extensionUpdateCheck": "weekly",
"rust-client.disableRustup": true, "rust-client.disableRustup": true,
"javascript.format.enabled": false, "javascript.format.enabled": false,
@ -13,5 +15,4 @@
"jedi.enable": true, "jedi.enable": true,
"suggest.noselect": true, "suggest.noselect": true,
} }

View file

@ -43,9 +43,12 @@ let g:ale_fortran_gcc_use_free_form = 0
"JSON "JSON
let g:ale_json_jq_options = '--sort-keys' let g:ale_json_jq_options = '--sort-keys'
" Spell checking
let g:ale_cspell_options = '--config ~/.alex-envion/home/.config/cspell/config.yaml'
"""Base Settings for COC """Base Settings for COC
let g:coc_config_home = '~/.alex-environ/home/.vimrc.d/coc' let g:coc_config_home = '~/.alex-environ/home/.vimrc.d/coc'
let g:coc_global_extensions = ['coc-jedi', 'coc-rls', 'coc-tsserver', 'coc-json', 'coc-htmldjango'] let g:coc_global_extensions = ['coc-jedi', 'coc-rust-analyzer', 'coc-tsserver', 'coc-json', 'coc-htmldjango']
"""Language Specific Options. """Language Specific Options.
"Remeber that COC has it's own settings file too, so most of it's settings are "Remeber that COC has it's own settings file too, so most of it's settings are
"there. "there.

View file

@ -26,7 +26,7 @@ function! LoadPlugins()
Plug 'amanning9/django-plus.vim' " Improvements for identifying files in django projects. Plug 'amanning9/django-plus.vim' " Improvements for identifying files in django projects.
Plug 'towolf/vim-helm' Plug 'towolf/vim-helm'
Plug 'Glench/Vim-Jinja2-Syntax' " Jinja syntax detection. Plug 'https://gitlab.com/HiPhish/jinja.vim.git' " Jinja syntax detection.
endfunction endfunction
" PLUGIN INITIALISATION " PLUGIN INITIALISATION

View file

@ -6,7 +6,6 @@ SSH_ENV=$HOME/.ssh/environment.`hostname`
start_agent () start_agent ()
{ {
# $1 Socket path to bind to. # $1 Socket path to bind to.
# If not running interactively, don't do anything else # If not running interactively, don't do anything else
[[ $- != *i* ]] && return [[ $- != *i* ]] && return
@ -31,6 +30,11 @@ load_keys ()
fi fi
} }
# If not running interactively, don't do anything else
[[ $- != *i* ]] && return
# If we are a subshell we should not do anything.
[[ $0 != -* ]] && return
# Source SSH settings, if applicable # Source SSH settings, if applicable
# If a ssh auth socket exists at this point, it must be from a forwarded agent. # If a ssh auth socket exists at this point, it must be from a forwarded agent.
if [ -n "${SSH_AUTH_SOCK+set}" ] && [[ ${SSH_AUTH_SOCK} != *"com.apple.launchd"* ]] if [ -n "${SSH_AUTH_SOCK+set}" ] && [[ ${SSH_AUTH_SOCK} != *"com.apple.launchd"* ]]

@ -1 +1 @@
Subproject commit 0e34233ad56224b2096022a2c8b0f4b4bd87d2d0 Subproject commit b306afff013552ece60cd7e7cf8e5ec061ac71ba

View file

@ -8,3 +8,4 @@ vint
from npm -g from npm -g
fixjson fixjson
cspell

View file

@ -65,3 +65,6 @@ ln -s ${environ_home}/.config/mypy ~/.config/mypy
##### In home dir ##### In home dir
ln -s ${environ_home}/.fonts ~/.fonts ln -s ${environ_home}/.fonts ~/.fonts
# readline
ln -s ${environ_home}/.inputrc ~/.inputrc