Skip to main content

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 ⚠️ nicht getestet)
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 ⚠️

⚠️ = SolrCloud-Funktionen – Code vorhanden, aber nicht gegen SolrCloud getestet.

Alle Core-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 enthält optionale Prefect-Tasks und -Flows. Diese befinden sich im Verzeichnis prefect_flows/ und sind nicht Teil des PyPI-Pakets – sie werden beim Build ausgeschlossen.

Um sie zu nutzen, müssen solrctl und prefect installiert sein:

uv pip install -e ".[prefect]"

Verfügbare Tasks und Flows (in prefect_flows/):

Modul Beschreibung
prefect_flows.tasks.core_swap Task: Core-Swap mit Retries
prefect_flows.tasks.alias_swap Task: Alias-Swap mit Retries ⚠️
prefect_flows.tasks.cleanup Task: Optionales Löschen alter Cores/Collections
prefect_flows.flows.swap_flow Flow: Kompletter Swap inkl. optionalem Cleanup

⚠️ Alias-Swap-Task ist für SolrCloud und nicht getestet.

Lokaler Testlauf:

uv run python -m prefect_flows.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)
prefect_flows/          # Prefect-Integration (nicht im PyPI-Paket)
  tasks/
    core_swap.py
    alias_swap.py        # ⚠️ SolrCloud – nicht getestet
    cleanup.py
  flows/
    swap_flow.py
tests/
docs/
  idea.md
  plan.md
  technical.md

Weitere Dokumentation

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
# SolrCloud (⚠️ untested – code exists but not verified against SolrCloud)
solrctl alias list                    # List all aliases
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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

solrctl-1.0.0.tar.gz (17.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

solrctl-1.0.0-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file solrctl-1.0.0.tar.gz.

File metadata

  • Download URL: solrctl-1.0.0.tar.gz
  • Upload date:
  • Size: 17.4 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

Hashes for solrctl-1.0.0.tar.gz
Algorithm Hash digest
SHA256 4bc14191b623a12eadcb5fe3c24ec1b706b783bbc076db6bb7f50e9a6d8b440e
MD5 6c15270e41b3fb0d1163d636d616b86d
BLAKE2b-256 5aa884bebb14ba37cb9efe05df1fc3e289fef4dd16aa97437d2b9d5de1557337

See more details on using hashes here.

File details

Details for the file solrctl-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: solrctl-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 13.0 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

Hashes for solrctl-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ae0113ff278501d7fb195619eeb9795489e9c8d885364713f79a0170166a8f2a
MD5 215a5f9d9bb108be5b8a0994d380eb71
BLAKE2b-256 713407bc428e3a93a5214123e635e38c2ae5ed22c8333b9312078b404b03bab1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page