mirror of
https://github.com/sebaschi/dotfiles.git
synced 2025-11-08 20:04:28 +01:00
Add some shell functions as shellib for task files
This commit is contained in:
parent
7925f873a8
commit
854126bb4b
@ -1,5 +1,37 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Configuration variables with defaults
|
||||||
|
# URLs and remote resources
|
||||||
|
KANIDM_SERVER_CONFIG_URL="${KANIDM_SERVER_CONFIG_URL:-https://raw.githubusercontent.com/kanidm/kanidm/master/examples/server.toml}"
|
||||||
|
KANIDM_DOCKER_IMAGE="${KANIDM_DOCKER_IMAGE:-docker.io/kanidm/server:latest}"
|
||||||
|
|
||||||
|
# File paths
|
||||||
|
SERVER_CONFIG_FILE="${SERVER_CONFIG_FILE:-server.toml}"
|
||||||
|
SERVER_LOCALHOST_CONFIG="${SERVER_LOCALHOST_CONFIG:-server_localhost.toml}"
|
||||||
|
CLIENT_CONFIG_FILE="${CLIENT_CONFIG_FILE:-./kanidm}"
|
||||||
|
|
||||||
|
# Container and volume settings
|
||||||
|
CONTAINER_NAME="${CONTAINER_NAME:-kanidmd}"
|
||||||
|
VOLUME_NAME="${VOLUME_NAME:-kanidmd}"
|
||||||
|
CONTAINER_DATA_PATH="${CONTAINER_DATA_PATH:-/data}"
|
||||||
|
|
||||||
|
# Network settings
|
||||||
|
HTTPS_PORT="${HTTPS_PORT:-8443}"
|
||||||
|
LDAP_PORT="${LDAP_PORT:-3636}"
|
||||||
|
KANIDM_URI="${KANIDM_URI:-https://localhost:8443}"
|
||||||
|
|
||||||
|
# Domain settings
|
||||||
|
ORIGINAL_DOMAIN="${ORIGINAL_DOMAIN:-idm.example.com}"
|
||||||
|
TARGET_DOMAIN="${TARGET_DOMAIN:-localhost}"
|
||||||
|
|
||||||
|
# Account names
|
||||||
|
ADMIN_ACCOUNT="${ADMIN_ACCOUNT:-admin}"
|
||||||
|
IDM_ADMIN_ACCOUNT="${IDM_ADMIN_ACCOUNT:-idm_admin}"
|
||||||
|
|
||||||
|
# Package lists
|
||||||
|
FEDORA_SYSTEM_DEPS="${FEDORA_SYSTEM_DEPS:-systemd-devel sqlite-devel openssl-devel pam-devel clang lld}"
|
||||||
|
FEDORA_WEBUI_DEPS="${FEDORA_WEBUI_DEPS:-perl-FindBin perl-File-Compare}"
|
||||||
|
|
||||||
|
|
||||||
fedora_build_notes () {
|
fedora_build_notes () {
|
||||||
echo "NOTE: clang and lld are required to build Kanidm for performance"
|
echo "NOTE: clang and lld are required to build Kanidm for performance"
|
||||||
@ -7,27 +39,27 @@ fedora_build_notes () {
|
|||||||
|
|
||||||
}
|
}
|
||||||
install_system_lib_deps_fedora () {
|
install_system_lib_deps_fedora () {
|
||||||
dnf install systemd-devel sqlite-devel openssl-devel pam-devel clang lld
|
dnf install ${FEDORA_SYSTEM_DEPS}
|
||||||
}
|
}
|
||||||
|
|
||||||
install_webui_additional_pkgs () {
|
install_webui_additional_pkgs () {
|
||||||
dnf install perl-FindBin perl-File-Compare
|
dnf install ${FEDORA_WEBUI_DEPS}
|
||||||
}
|
}
|
||||||
|
|
||||||
get_server_dev_config () {
|
get_server_dev_config () {
|
||||||
wget https://raw.githubusercontent.com/kanidm/kanidm/master/examples/server.toml
|
wget "${KANIDM_SERVER_CONFIG_URL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
make_localhost_config () {
|
make_localhost_config () {
|
||||||
if [[ -f server.toml ]];then
|
if [[ -f "${SERVER_CONFIG_FILE}" ]];then
|
||||||
sed 's/idm\.example\.com/localhost/g' server.toml > server_localhost.toml
|
sed "s/${ORIGINAL_DOMAIN}/${TARGET_DOMAIN}/g" "${SERVER_CONFIG_FILE}" > "${SERVER_LOCALHOST_CONFIG}"
|
||||||
else
|
else
|
||||||
echo "First get example server.toml!"
|
echo "First get example ${SERVER_CONFIG_FILE}!"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
get_the_software () {
|
get_the_software () {
|
||||||
podman pull docker.io/kanidm/server:latest
|
podman pull "${KANIDM_DOCKER_IMAGE}"
|
||||||
}
|
}
|
||||||
|
|
||||||
create_eval_config () {
|
create_eval_config () {
|
||||||
@ -36,40 +68,40 @@ create_eval_config () {
|
|||||||
|
|
||||||
create_kanidmd_volume () {
|
create_kanidmd_volume () {
|
||||||
# First create volume for the data!
|
# First create volume for the data!
|
||||||
podman volume create kanidmd
|
podman volume create "${VOLUME_NAME}"
|
||||||
}
|
}
|
||||||
|
|
||||||
start_eval_container () {
|
start_eval_container () {
|
||||||
create_kanidmd_volume && podman create --name kanidmd \
|
create_kanidmd_volume && podman create --name "${CONTAINER_NAME}" \
|
||||||
-p '8443:8443' \
|
-p "${HTTPS_PORT}:${HTTPS_PORT}" \
|
||||||
-p '3636:3636' \
|
-p "${LDAP_PORT}:${LDAP_PORT}" \
|
||||||
-v kanidmd:/data \
|
-v "${VOLUME_NAME}:${CONTAINER_DATA_PATH}" \
|
||||||
docker.io/kanidm/server:latest
|
"${KANIDM_DOCKER_IMAGE}"
|
||||||
}
|
}
|
||||||
|
|
||||||
copy_config_to_container () {
|
copy_config_to_container () {
|
||||||
podman cp server_localhost.toml kanidmd:/data/server.toml
|
podman cp "${SERVER_LOCALHOST_CONFIG}" "${CONTAINER_NAME}:${CONTAINER_DATA_PATH}/${SERVER_CONFIG_FILE}"
|
||||||
}
|
}
|
||||||
|
|
||||||
generate_eval_certs () {
|
generate_eval_certs () {
|
||||||
podman run --rm -i -t -v kanidmd:/data \
|
podman run --rm -i -t -v "${VOLUME_NAME}:${CONTAINER_DATA_PATH}" \
|
||||||
docker.io/kanidm/server:latest \
|
"${KANIDM_DOCKER_IMAGE}" \
|
||||||
kanidmd cert-generate
|
kanidmd cert-generate
|
||||||
}
|
}
|
||||||
|
|
||||||
recover_admin_pw () {
|
recover_admin_pw () {
|
||||||
podman exec -i -t kanidmd \
|
podman exec -i -t "${CONTAINER_NAME}" \
|
||||||
kanidmd recover-account admin
|
kanidmd recover-account "${ADMIN_ACCOUNT}"
|
||||||
}
|
}
|
||||||
|
|
||||||
recover_idm_admin_pw () {
|
recover_idm_admin_pw () {
|
||||||
podman exec -i -t kanidmd \
|
podman exec -i -t "${CONTAINER_NAME}" \
|
||||||
kanidmd recover-account idm_admin
|
kanidmd recover-account "${IDM_ADMIN_ACCOUNT}"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_eval_client_config () {
|
setup_eval_client_config () {
|
||||||
cat <<'EOF' > ./kanidm
|
cat <<EOF > "${CLIENT_CONFIG_FILE}"
|
||||||
uri = "https://localhost:8443"
|
uri = "${KANIDM_URI}"
|
||||||
verify_ca = false
|
verify_ca = false
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
@ -78,7 +110,7 @@ check_can_login () {
|
|||||||
if ! command -v kanidm > /dev/null; then
|
if ! command -v kanidm > /dev/null; then
|
||||||
echo "First install kanidm client tools!"
|
echo "First install kanidm client tools!"
|
||||||
else
|
else
|
||||||
kanidm login --name idm_admin
|
kanidm login --name "${IDM_ADMIN_ACCOUNT}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
74
shellib/dot-local/lib/shellib/tasklib.sh
Normal file
74
shellib/dot-local/lib/shellib/tasklib.sh
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Task library - provides help functionality for task files
|
||||||
|
|
||||||
|
# List all functions defined in the current environment
|
||||||
|
list_functions() {
|
||||||
|
declare -F | awk '{print $3}'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Extract usage information from a function
|
||||||
|
get_function_usage() {
|
||||||
|
local func_name="$1"
|
||||||
|
local file="${2:-$0}"
|
||||||
|
|
||||||
|
# Get the function definition and extract Usage: comments
|
||||||
|
awk -v func="$func_name" '
|
||||||
|
/^[[:space:]]*'"$func_name"'[[:space:]]*\(\)/ {
|
||||||
|
in_func = 1
|
||||||
|
next
|
||||||
|
}
|
||||||
|
in_func && /^[[:space:]]*}[[:space:]]*$/ {
|
||||||
|
in_func = 0
|
||||||
|
}
|
||||||
|
in_func && /^[[:space:]]*#[[:space:]]*Usage:/ {
|
||||||
|
sub(/^[[:space:]]*#[[:space:]]*/, "", $0)
|
||||||
|
print $0
|
||||||
|
}
|
||||||
|
' "$file"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Display help for all functions in a task file
|
||||||
|
show_task_help() {
|
||||||
|
local file="${1:-$0}"
|
||||||
|
local func_list=$(list_functions | sort)
|
||||||
|
|
||||||
|
echo "Available tasks:"
|
||||||
|
echo "================"
|
||||||
|
echo
|
||||||
|
|
||||||
|
for func in $func_list; do
|
||||||
|
# Skip internal functions and the help function itself
|
||||||
|
if [[ ! "$func" =~ ^(_|show_task_help|list_functions|get_function_usage) ]]; then
|
||||||
|
local usage=$(get_function_usage "$func" "$file")
|
||||||
|
if [[ -n "$usage" ]]; then
|
||||||
|
printf "%-30s %s\n" "$func" "- $usage"
|
||||||
|
else
|
||||||
|
printf "%-30s\n" "$func"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
echo "Run any task by calling it directly: ./tasks <task_name>"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Alternative: Show detailed help for a specific function
|
||||||
|
show_function_help() {
|
||||||
|
local func_name="$1"
|
||||||
|
local file="${2:-$0}"
|
||||||
|
|
||||||
|
if ! declare -f "$func_name" >/dev/null 2>&1; then
|
||||||
|
echo "Error: Function '$func_name' not found" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Help for: $func_name"
|
||||||
|
echo "==================="
|
||||||
|
|
||||||
|
local usage=$(get_function_usage "$func_name" "$file")
|
||||||
|
if [[ -n "$usage" ]]; then
|
||||||
|
echo "$usage"
|
||||||
|
else
|
||||||
|
echo "No usage information available"
|
||||||
|
fi
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user