Skip to content

Instantly share code, notes, and snippets.

View jplitza's full-sized avatar

Jan-Philipp Litza jplitza

View GitHub Profile
@jplitza
jplitza / kyverno-junit.jq
Created January 10, 2025 13:37
Convert output from `kyverno apply -p` (converted to JSON) to JUnit XML format using `jq`
@html "<testsuite name=\"kyverno\" tests=\"\(.summary|add)\" failures=\"\(.summary.fail)\" skipped=\"\(.summary.skip)\" errors=\"\(.summary.error)\">",
(.results | group_by(.policy) | .[] | [
@html "<testsuite name=\"\(.[0].policy)\">",
(group_by(.rule) | .[] | [
"<testsuite name=\"\(.[0].policy).\(.[0].rule)\">",
(.[] | [
@html "<testcase name=\"\(.policy).\(.rule).\(.resources[0].namespace)/\(.resources[0].kind)/\(.resources[0].name)\">",
(if .result == "fail"
then @html "<failure message=\"\(.message)\" />"
else if .result == "skip"
@jplitza
jplitza / resize-pvc.sh
Created December 4, 2024 11:16
Resize PersistentVolumeClaims according to owning StatefulSet spec
#!/bin/sh -eu
# Update the actual storage requets of existing PVCs to those specified in their owning StatefulSet.
# This assumes the StatefulSet was already "updated" (via `kubectl replace --force --cascade=orphan` or similar)
STS="$1"
kubectl get statefulset "$STS" -o jsonpath='{range .spec.volumeClaimTemplates[]}{.metadata.name} {.spec.resources.requests.storage}{"\n"}{end}' |
while read -r VOLNAME SIZE; do
for PVC in $(kubectl get pvc -o custom-columns=NAME:.metadata.name | grep -E "^$VOLNAME-$STS-[0-9]+\$"); do
#!/bin/sh
set -eu
REPO="$1"
ARCHIVE="$2"
FILE="$3"
# Fetch the latest version using GitHub API
VERSION="$(curl -s "https://api.github.com/repos/${REPO}/releases" | jq -r 'map(select(.prerelease | not)) | .[0].tag_name' | cut -c 2-)"
@jplitza
jplitza / nc.sh
Created February 23, 2024 14:10
Netcat in Bash
#!/bin/bash
set -eu
PROXY=false
usage() {
echo "Usage: $0 [-X connect -x <proxy:port>] <host> <port>"
}
@jplitza
jplitza / 41-firefox-callback.lua
Created November 24, 2022 14:16
Make Wireplumber route Firefox' voice output to internal ALSA output
stream_defaults.rules = {
{
matches = {
{
{ "application.name", "matches", "Firefox" },
{ "media.name", "matches", "AudioCallbackDriver" },
{ "media.class", "matches", "Stream/Output/Audio" },
}
},
apply_properties = {
@jplitza
jplitza / tplink.rb
Created December 17, 2021 15:34
Slightly modified Oxidized model for TP-Link switches
@jplitza
jplitza / co2mon.init
Last active October 11, 2022 20:54 — forked from librarian/hidapi_co2mon.py
Basic programm to use hidapi and report temp/co2 from Holtek Semiconductor, Inc. USB-zyTemp (hidapi is python3-hidapi in debian buster)
#!/bin/sh /etc/rc.common
START=50
USE_PROCD=1
NAME=co2mon
PROG=/root/co2mon/hidapi_co2mon.py
start_service() {
local url=$(uci -q get co2mon.@co2mon[0].url)
#!/bin/bash
set -eu
declare -a STATES=(OK WARNING CRITICAL UNKNOWN)
declare -i STATE_OK=0
declare -i STATE_WARNING=1
declare -i STATE_CRITICAL=2
declare -i STATE_UNKNOWN=3
@jplitza
jplitza / flash_router.sh
Created August 29, 2018 08:35
Flash a router running OpenWrt via SSH
#!/bin/sh
set -eu
if [ "$#" != 2 ]; then
echo "Usage: $(basename "$0") <iface> <file>"
exit 1
fi
IFACE="$1"
#!/bin/sh
SERVER="$1"
INTERVAL=10
# read once and ignore result, as it is bogus at first
cat /sys/bus/w1/devices/*/w1_slave > /dev/null
while sleep "$INTERVAL"; do
for DEV in /sys/bus/w1/devices/*/w1_slave; do