mirror of
https://github.com/sebaschi/dotfiles.git
synced 2025-11-08 18: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
|
||||
|
||||
# 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 () {
|
||||
echo "NOTE: clang and lld are required to build Kanidm for performance"
|
||||
@ -7,27 +39,27 @@ fedora_build_notes () {
|
||||
|
||||
}
|
||||
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 () {
|
||||
dnf install perl-FindBin perl-File-Compare
|
||||
dnf install ${FEDORA_WEBUI_DEPS}
|
||||
}
|
||||
|
||||
get_server_dev_config () {
|
||||
wget https://raw.githubusercontent.com/kanidm/kanidm/master/examples/server.toml
|
||||
wget "${KANIDM_SERVER_CONFIG_URL}"
|
||||
}
|
||||
|
||||
make_localhost_config () {
|
||||
if [[ -f server.toml ]];then
|
||||
sed 's/idm\.example\.com/localhost/g' server.toml > server_localhost.toml
|
||||
if [[ -f "${SERVER_CONFIG_FILE}" ]];then
|
||||
sed "s/${ORIGINAL_DOMAIN}/${TARGET_DOMAIN}/g" "${SERVER_CONFIG_FILE}" > "${SERVER_LOCALHOST_CONFIG}"
|
||||
else
|
||||
echo "First get example server.toml!"
|
||||
echo "First get example ${SERVER_CONFIG_FILE}!"
|
||||
fi
|
||||
}
|
||||
|
||||
get_the_software () {
|
||||
podman pull docker.io/kanidm/server:latest
|
||||
podman pull "${KANIDM_DOCKER_IMAGE}"
|
||||
}
|
||||
|
||||
create_eval_config () {
|
||||
@ -36,40 +68,40 @@ create_eval_config () {
|
||||
|
||||
create_kanidmd_volume () {
|
||||
# First create volume for the data!
|
||||
podman volume create kanidmd
|
||||
podman volume create "${VOLUME_NAME}"
|
||||
}
|
||||
|
||||
start_eval_container () {
|
||||
create_kanidmd_volume && podman create --name kanidmd \
|
||||
-p '8443:8443' \
|
||||
-p '3636:3636' \
|
||||
-v kanidmd:/data \
|
||||
docker.io/kanidm/server:latest
|
||||
create_kanidmd_volume && podman create --name "${CONTAINER_NAME}" \
|
||||
-p "${HTTPS_PORT}:${HTTPS_PORT}" \
|
||||
-p "${LDAP_PORT}:${LDAP_PORT}" \
|
||||
-v "${VOLUME_NAME}:${CONTAINER_DATA_PATH}" \
|
||||
"${KANIDM_DOCKER_IMAGE}"
|
||||
}
|
||||
|
||||
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 () {
|
||||
podman run --rm -i -t -v kanidmd:/data \
|
||||
docker.io/kanidm/server:latest \
|
||||
podman run --rm -i -t -v "${VOLUME_NAME}:${CONTAINER_DATA_PATH}" \
|
||||
"${KANIDM_DOCKER_IMAGE}" \
|
||||
kanidmd cert-generate
|
||||
}
|
||||
|
||||
recover_admin_pw () {
|
||||
podman exec -i -t kanidmd \
|
||||
kanidmd recover-account admin
|
||||
podman exec -i -t "${CONTAINER_NAME}" \
|
||||
kanidmd recover-account "${ADMIN_ACCOUNT}"
|
||||
}
|
||||
|
||||
recover_idm_admin_pw () {
|
||||
podman exec -i -t kanidmd \
|
||||
kanidmd recover-account idm_admin
|
||||
podman exec -i -t "${CONTAINER_NAME}" \
|
||||
kanidmd recover-account "${IDM_ADMIN_ACCOUNT}"
|
||||
}
|
||||
|
||||
setup_eval_client_config () {
|
||||
cat <<'EOF' > ./kanidm
|
||||
uri = "https://localhost:8443"
|
||||
cat <<EOF > "${CLIENT_CONFIG_FILE}"
|
||||
uri = "${KANIDM_URI}"
|
||||
verify_ca = false
|
||||
EOF
|
||||
}
|
||||
@ -78,7 +110,7 @@ check_can_login () {
|
||||
if ! command -v kanidm > /dev/null; then
|
||||
echo "First install kanidm client tools!"
|
||||
else
|
||||
kanidm login --name idm_admin
|
||||
kanidm login --name "${IDM_ADMIN_ACCOUNT}"
|
||||
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