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)
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

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


Download files

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

Source Distribution

solrctl-0.6.0b1.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

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

solrctl-0.6.0b1-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

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

Hashes for solrctl-0.6.0b1.tar.gz
Algorithm Hash digest
SHA256 9909b20f2b54e781466e71d25c4e75dee2a82eec8b713e0a2a942f850a661503
MD5 ae1f513e5f983ddfaabbbd3ab7812117
BLAKE2b-256 47c0543076a937477012aae246c835d52f32c92e5529b445848635288f9aa18b

See more details on using hashes here.

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

Hashes for solrctl-0.6.0b1-py3-none-any.whl
Algorithm Hash digest
SHA256 53ea0142309b5a3f4a5c38f744afc005776b73e3b12d5d60019a5b70240cb933
MD5 5ef3fc728d39b6fa435322cb241c5017
BLAKE2b-256 eb83c51d33d2ed042061e574b62ab6d37a1621a5f1043852c589bbfd84c0c03a

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