CLI-Tool zur Verwaltung von Apache Solr 9.x – Cores tauschen, Status abfragen, Konfiguration einsehen
Project description
solrctl
CLI-Tool und Python-Library zur Verwaltung von Apache Solr 9.x – ohne Downtime Cores tauschen, Status abfragen, Konfiguration einsehen.
Installation
uv tool install solrctl
Oder aus dem Checkout:
uv pip install -e .
Nutzung als CLI
# Solr erreichbar?
solrctl ping
# Cores anzeigen
solrctl core list
# Core-Infos (Pfade, Dokumentanzahl, Größe)
solrctl core info <name>
# solrconfig.xml abrufen
solrctl core config <name>
# Schema als XML abrufen
solrctl core schema <name>
# Core-Swap (unterbrechungsfrei)
solrctl core swap --source <neuer_core> --target <aktiver_core>
# Core erstellen
solrctl core create <name> [--config-set CONFIG_SET]
# Core löschen
solrctl core delete <name> [--delete-index]
# Alias-Operationen (SolrCloud)
solrctl alias list
solrctl alias swap --alias <name> --collection <ziel>
solrctl alias delete <name>
Alle Befehle akzeptieren globale Optionen:
--solr-url Basis-URL der Solr-Instanz (Default: http://localhost:8983, Env: SOLR_URL)
--user Basic-Auth Benutzername (Env: SOLR_USER)
--password Basic-Auth Passwort (Env: SOLR_PASSWORD)
Nutzung als Python-Library
solrctl kann direkt im Python-Code verwendet werden – ohne CLI.
Einfache Funktionen (auto-Client)
Jede Funktion erstellt automatisch einen SolrClient und schließt ihn nach dem Aufruf:
from solrctl import swap, list_cores, ping, get_core_info
# Solr erreichbar?
if ping("http://localhost:8983"):
print("Solr ist da!")
# Alle Cores auflisten
cores = list_cores("http://localhost:8983")
# Core-Swap (unterbrechungsfrei)
swap("http://localhost:8983", source="core_new", target="core_active")
# Core-Infos abfragen
info = get_core_info("core1", solr_url="http://localhost:8983")
print(info["index"]["numDocs"])
SolrClient für mehrere Operationen
Für mehrere Operationen in einer Session eigenen SolrClient als Kontext-Manager verwenden:
from solrctl import SolrClient
with SolrClient("http://localhost:8983", auth=("user", "pass")) as client:
if client.ping():
cores = client.list_cores()
for core_name in cores:
info = client.get_core_info(core_name)
print(f"{core_name}: {info['index']['numDocs']} docs")
client.swap_cores("core_active", "core_new")
config_xml = client.get_core_config("core_active")
schema_xml = client.get_core_schema("core_active")
Verfügbare Funktionen
| Funktion | Beschreibung |
|---|---|
ping(solr_url) |
Erreichbarkeit prüfen |
list_cores(solr_url) |
Alle Cores auflisten |
get_core_info(core, solr_url) |
Core-Details abfragen |
swap(source, target, solr_url) |
Zwei Cores tauschen |
delete_core(core, delete_index, solr_url) |
Core löschen |
create_core(core, config_set, solr_url) |
Neuen Core erstellen |
get_core_config(core, solr_url) |
solrconfig.xml abrufen |
get_core_schema(core, solr_url) |
Schema als XML abrufen |
list_aliases(solr_url) |
Alle Aliases auflisten |
swap_alias(alias, collection, solr_url) |
Alias umsetzen |
delete_alias(alias, solr_url) |
Alias löschen |
Alle Funktionen akzeptieren solr_url (default: http://localhost:8983) und auth (optional: (user, password)-Tupel).
Voraussetzungen
- Python 3.11+
- Zugriff auf eine Solr 9.x Instanz (Standalone für Core-Befehle, SolrCloud für Alias-Befehle)
Lokale Entwicklung
# Abhängigkeiten inkl. Dev- und Prefect-Extras installieren
uv sync --all-extras
# Tests ausführen
uv run pytest
# CLI lokal ausführen
uv run solrctl --help
Docker-basiertes Test-Setup
docker compose up -d
solrctl --solr-url http://localhost:8983 ping
Prefect-Integration
solrctl liefert optionale Prefect-Tasks und -Flows für automatisierte Pipelines. Die Prefect-Abhängigkeiten werden nicht standardmäßig installiert:
uv pip install -e ".[prefect]"
Verfügbare Tasks und Flows:
| Modul | Beschreibung |
|---|---|
solrctl.tasks.core_swap |
Task: Core-Swap mit Retries |
solrctl.tasks.alias_swap |
Task: Alias-Swap mit Retries |
solrctl.tasks.cleanup |
Task: Optionales Löschen alter Cores/Collections |
solrctl.flows.swap_flow |
Flow: Kompletter Swap inkl. optionalem Cleanup |
Lokaler Testlauf:
uv run python -m solrctl.flows.swap_flow
Projektstruktur
src/
solrctl/
__init__.py # Public API (Funktionen + SolrClient)
api.py # High-Level-Komfort-Funktionen
cli.py # Click-CLI
client.py # SolrClient (HTTP-API-Wrapper)
tasks/ # Prefect-Tasks (optional)
alias_swap.py
core_swap.py
cleanup.py
flows/ # Prefect-Flows (optional)
swap_flow.py
tests/
docs/
idea.md
plan.md
technical.md
Weitere Dokumentation
docs/plan.md– Ausführungsplan und aktueller Statusdocs/technical.md– Architekturentscheidungen
KI-Unterstützung
Dieses Projekt wurde mit Unterstützung von KI-Tools (Large Language Models) entwickelt. Code-Struktur, Implementierung und Dokumentation wurden dabei unterstützt durch automatiserte Vorschläge. Alle Entscheidungen wurden vom Entwickler geprüft und bestätigt. Transparenz über den Entwicklungsprozess ist uns wichtig.
English
solrctl is a CLI tool and Python library for managing Apache Solr 9.x – swap cores without downtime, query status, inspect configuration.
CLI Usage
solrctl ping # Check if Solr is reachable
solrctl core list # List all cores
solrctl core info <name> # Show core details
solrctl core config <name> # Get solrconfig.xml
solrctl core schema <name> # Get schema as XML
solrctl core swap --source NEW --target ACTIVE # Zero-downtime core swap
solrctl core create <name> # Create a new core
solrctl core delete <name> # Delete a core
solrctl alias list # List all aliases (SolrCloud)
solrctl alias swap --alias NAME --collection TARGET
Python Library
from solrctl import swap, list_cores, SolrClient
# Quick one-shot calls (auto-creates and closes client)
swap("http://localhost:8983", source="new", target="active")
cores = list_cores("http://localhost:8983")
# Session with multiple operations
with SolrClient("http://localhost:8983") as client:
client.swap_cores("active", "new")
info = client.get_core_info("active")
Install
uv tool install solrctl
Requires Python 3.11+, Apache Solr 9.x. MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file solrctl-0.6.0b1.tar.gz.
File metadata
- Download URL: solrctl-0.6.0b1.tar.gz
- Upload date:
- Size: 21.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"KDE neon","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9909b20f2b54e781466e71d25c4e75dee2a82eec8b713e0a2a942f850a661503
|
|
| MD5 |
ae1f513e5f983ddfaabbbd3ab7812117
|
|
| BLAKE2b-256 |
47c0543076a937477012aae246c835d52f32c92e5529b445848635288f9aa18b
|
File details
Details for the file solrctl-0.6.0b1-py3-none-any.whl.
File metadata
- Download URL: solrctl-0.6.0b1-py3-none-any.whl
- Upload date:
- Size: 21.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"KDE neon","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53ea0142309b5a3f4a5c38f744afc005776b73e3b12d5d60019a5b70240cb933
|
|
| MD5 |
5ef3fc728d39b6fa435322cb241c5017
|
|
| BLAKE2b-256 |
eb83c51d33d2ed042061e574b62ab6d37a1621a5f1043852c589bbfd84c0c03a
|