aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Segundo2023-10-07 06:53:00 +0200
committerChristian Segundo2023-10-07 06:53:00 +0200
commit4397d810dd5d1d0f8453d6914e4b8c04e448b4ca (patch)
treea422ea646ea7c78d354c40c2f2b5ea869ead858b
parentdc45fc9d0c3ebed0c1340082b1d194fea66cd1ad (diff)
downloadkrash-4397d810dd5d1d0f8453d6914e4b8c04e448b4ca.tar.gz
add le files
-rw-r--r--Makefile.am7
-rw-r--r--configure.ac19
-rw-r--r--krash.in39
3 files changed, 65 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..8b45e33
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,7 @@
+bin_SCRIPTS = krash
+CLEANFILES = $(bin_SCRIPTS)
+
+install-exec-hook:
+ cd $(DESTDIR)$(bindir) && rm -f kubectl-node-crash && $(LN_S) krash kubectl-node-crash
+uninstall-hook:
+ cd $(DESTDIR)$(bindir) && rm -f kubectl-node-crash
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..3c9d22c
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,19 @@
+AC_INIT([krash], [1.0.0], [christian@segundo.io])
+AM_INIT_AUTOMAKE([foreign no-dependencies])
+AC_CONFIG_FILES([Makefile])
+
+AC_SUBST([CC])
+
+AC_PROG_LN_S
+AC_PATH_PROG([ENV_ABSOLUTE_PATH], [env])
+AS_IF([test x"$ENV_ABSOLUTE_PATH" = x""], [AC_MSG_ERROR([env is not available])])
+AC_SUBST([ENV_ABSOLUTE_PATH])
+
+AC_CHECK_PROG(BASH_CHECK,bash,yes)
+AC_CHECK_PROG(KUBECTL_CHECK,kubectl,yes)
+AS_IF([test x"$BASH_CHECK" != x"yes"], [AC_MSG_ERROR([bash is not available])])
+AS_IF([test x"$KUBECTL_CHECK" != x"yes"], [AC_MSG_ERROR([kubectl is not available])])
+
+AC_CONFIG_FILES([krash], [chmod +x krash])
+
+AC_OUTPUT
diff --git a/krash.in b/krash.in
new file mode 100644
index 0000000..aff12ec
--- /dev/null
+++ b/krash.in
@@ -0,0 +1,39 @@
+#!@ENV_ABSOLUTE_PATH@ bash
+set -eufo pipefail
+
+command -v kubectl >/dev/null 2>&1 || { echo 'Please install kubectl'; exit 1; }
+
+USAGE="Usage: $(basename "$0") <node-name> [-r|--reboot]"
+[ $# -eq 0 ] && { echo "$USAGE"; exit 1; }
+NODE_REBOOT=0
+NODE_NAME=${1:-}; shift
+
+if [[ $# -gt 0 ]]; then
+ if [[ "$1" =~ ^-r|--reboot$ ]]; then
+ NODE_REBOOT=1; shift
+ else
+ echo "$USAGE"; exit 1
+ fi
+fi
+
+kubectl apply -f - <<-EOF > /dev/null
+---
+apiVersion: v1
+kind: Pod
+metadata:
+ name: krash-${RANDOM}
+spec:
+ containers:
+ - name: krash
+ image: alpine:latest
+ securityContext:
+ privileged: true
+ command:
+ - /bin/sh
+ - -c
+ - |
+ sysctl -w kernel.panic=${NODE_REBOOT}
+ echo 'c' > /proc/sysrq-trigger
+ priorityClassName: system-node-critical
+ nodeName: ${NODE_NAME}
+EOF