Files
buun-stack/falkordb/justfile
2025-11-30 16:22:19 +09:00

194 lines
6.9 KiB
Makefile

set fallback := true
export FALKORDB_NAMESPACE := env("FALKORDB_NAMESPACE", "falkordb")
export FALKORDB_VERSION := env("FALKORDB_VERSION", "v4.14.8")
export FALKORDB_STORAGE_SIZE := env("FALKORDB_STORAGE_SIZE", "8Gi")
export EXTERNAL_SECRETS_NAMESPACE := env("EXTERNAL_SECRETS_NAMESPACE", "external-secrets")
export PROMETHEUS_NAMESPACE := env("PROMETHEUS_NAMESPACE", "monitoring")
export MONITORING_ENABLED := env("MONITORING_ENABLED", "")
[private]
default:
@just --list --unsorted --list-submodules
# Create FalkorDB namespace
create-namespace:
@kubectl get namespace ${FALKORDB_NAMESPACE} &>/dev/null || \
kubectl create namespace ${FALKORDB_NAMESPACE}
@kubectl label namespace ${FALKORDB_NAMESPACE} \
pod-security.kubernetes.io/enforce=baseline \
pod-security.kubernetes.io/warn=restricted \
--overwrite
# Delete FalkorDB namespace
delete-namespace:
@kubectl delete namespace ${FALKORDB_NAMESPACE} --ignore-not-found
# Create FalkorDB password secret
create-password-secret:
#!/bin/bash
set -euo pipefail
echo "Setting up FalkorDB password..."
PASSWORD=$(just utils::random-password)
if helm status external-secrets -n ${EXTERNAL_SECRETS_NAMESPACE} &>/dev/null; then
echo "External Secrets available. Storing password in Vault and creating ExternalSecret..."
just vault::put falkordb/auth password="$PASSWORD"
gomplate -f falkordb-password-external-secret.gomplate.yaml -o falkordb-password-external-secret.yaml
kubectl apply -f falkordb-password-external-secret.yaml
echo "Waiting for password secret to be ready..."
kubectl wait --for=condition=Ready externalsecret/falkordb-password-external-secret \
-n ${FALKORDB_NAMESPACE} --timeout=60s
else
echo "External Secrets not available. Creating Kubernetes Secret directly..."
kubectl delete secret falkordb-password -n ${FALKORDB_NAMESPACE} --ignore-not-found
kubectl create secret generic falkordb-password -n ${FALKORDB_NAMESPACE} \
--from-literal=redis-password="$PASSWORD"
if helm status vault -n vault &>/dev/null; then
just vault::put falkordb/auth password="$PASSWORD"
fi
fi
echo "FalkorDB password setup completed"
# Delete FalkorDB password secret
delete-password-secret:
@kubectl delete secret falkordb-password -n ${FALKORDB_NAMESPACE} --ignore-not-found
@kubectl delete externalsecret falkordb-password-external-secret -n ${FALKORDB_NAMESPACE} --ignore-not-found
# Install FalkorDB
install:
#!/bin/bash
set -euo pipefail
just create-namespace
just create-password-secret
METRICS_ENABLED="false"
SERVICEMONITOR_ENABLED="false"
if helm status kube-prometheus-stack -n ${PROMETHEUS_NAMESPACE} &>/dev/null; then
if [ -z "${MONITORING_ENABLED}" ]; then
if gum confirm "Enable Prometheus monitoring?"; then
MONITORING_ENABLED="true"
else
MONITORING_ENABLED="false"
fi
fi
if [ "${MONITORING_ENABLED}" = "true" ]; then
METRICS_ENABLED="true"
SERVICEMONITOR_ENABLED="true"
kubectl label namespace ${FALKORDB_NAMESPACE} buun.channel/enable-monitoring=true --overwrite
fi
fi
gomplate -f falkordb-values.gomplate.yaml -o falkordb-values.yaml
helm upgrade --install falkordb ../charts/falkordb \
-n ${FALKORDB_NAMESPACE} --create-namespace --wait \
-f falkordb-values.yaml \
--set metrics.enabled=${METRICS_ENABLED} \
--set metrics.serviceMonitor.enabled=${SERVICEMONITOR_ENABLED} \
--set metrics.serviceMonitor.labels.release=kube-prometheus-stack
echo ""
echo "FalkorDB installed successfully!"
echo "Connection: falkordb.${FALKORDB_NAMESPACE}.svc.cluster.local:6379"
# Uninstall FalkorDB
uninstall:
#!/bin/bash
set -euo pipefail
if gum confirm "Are you sure you want to uninstall FalkorDB?"; then
helm uninstall falkordb -n ${FALKORDB_NAMESPACE} --wait --ignore-not-found
just delete-password-secret
just delete-namespace
echo "FalkorDB uninstalled"
else
echo "Uninstall cancelled"
fi
# Get FalkorDB password
get-password:
@kubectl get secret falkordb-password -n ${FALKORDB_NAMESPACE} \
-o jsonpath="{.data.redis-password}" | base64 -d
@echo
# Get FalkorDB service URL
[private]
get-service-url:
@echo "redis://falkordb.${FALKORDB_NAMESPACE}.svc.cluster.local:6379"
# Check if telepresence is connected
[private]
check-telepresence:
#!/bin/bash
set -euo pipefail
if ! command -v telepresence &>/dev/null; then
echo "Error: telepresence is not installed" >&2
exit 1
fi
if ! telepresence status &>/dev/null; then
echo "Error: telepresence is not connected" >&2
echo "Please run: telepresence connect" >&2
exit 1
fi
# Check FalkorDB health
health-check:
#!/bin/bash
set -euo pipefail
just check-telepresence
PASSWORD=$(just get-password)
HOST="falkordb.${FALKORDB_NAMESPACE}.svc.cluster.local"
echo "Checking FalkorDB health at ${HOST}:6379..."
redis-cli -h ${HOST} -p 6379 -a "${PASSWORD}" --no-auth-warning PING
# Test FalkorDB with basic graph operations
test:
#!/bin/bash
set -euo pipefail
just check-telepresence
PASSWORD=$(just get-password)
HOST="falkordb.${FALKORDB_NAMESPACE}.svc.cluster.local"
GRAPH_NAME="test_graph_$(date +%s)"
echo "Testing FalkorDB at ${HOST}:6379"
echo "Using graph: ${GRAPH_NAME}"
echo
echo "1. Creating nodes..."
redis-cli -h ${HOST} -p 6379 -a "${PASSWORD}" --no-auth-warning \
GRAPH.QUERY ${GRAPH_NAME} "CREATE (:Person {name: 'Alice', age: 30})"
redis-cli -h ${HOST} -p 6379 -a "${PASSWORD}" --no-auth-warning \
GRAPH.QUERY ${GRAPH_NAME} "CREATE (:Person {name: 'Bob', age: 25})"
echo
echo "2. Creating relationship..."
redis-cli -h ${HOST} -p 6379 -a "${PASSWORD}" --no-auth-warning \
GRAPH.QUERY ${GRAPH_NAME} "MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'}) CREATE (a)-[:KNOWS {since: 2020}]->(b)"
echo
echo "3. Querying graph..."
redis-cli -h ${HOST} -p 6379 -a "${PASSWORD}" --no-auth-warning \
GRAPH.QUERY ${GRAPH_NAME} "MATCH (p:Person)-[:KNOWS]->(friend) RETURN p.name, friend.name"
echo
echo "4. Deleting test graph..."
redis-cli -h ${HOST} -p 6379 -a "${PASSWORD}" --no-auth-warning \
GRAPH.DELETE ${GRAPH_NAME}
echo
echo "Test completed successfully!"
# Clean up FalkorDB resources
cleanup:
#!/bin/bash
set -euo pipefail
echo "This will delete all FalkorDB resources and secrets."
if gum confirm "Are you sure you want to proceed?"; then
echo "Cleaning up FalkorDB resources..."
just vault::delete falkordb/auth || true
echo "Cleanup completed"
else
echo "Cleanup cancelled"
fi