Home

Awesome

<h1 align="center"> <br/> Esctl <br/> </h1> <h4 align="center">A Command-Line Interface designed to ease Elasticsearch administration.</h4> <p align="center"> <a href="https://github.com/jeromepin/esctl/actions?query=workflow%3A%22Lint+and+test%22+branch%3Amaster"> <img src="https://github.com/jeromepin/esctl/workflows/Lint%20and%20test/badge.svg" alt="Test status"> </a> <a href="https://github.com/jeromepin/esctl/actions?query=workflow%3A%22Publish+%F0%9F%93%A6%22+branch%3Amaster"> <img src="https://github.com/jeromepin/esctl/workflows/Publish%20%F0%9F%93%A6/badge.svg" alt="Publish status"> </a> <a href="https://www.codefactor.io/repository/github/jeromepin/esctl"> <img src="https://www.codefactor.io/repository/github/jeromepin/esctl/badge" alt="Codefactor grade"> </a> <a href="https://sonarcloud.io/dashboard?id=jeromepin_esctl"> <img src="https://sonarcloud.io/api/project_badges/measure?project=jeromepin_esctl&metric=alert_status" alt="Code quality status"> </a> </p> <p align="center"> <a href="#key-features">Key Features</a> • <a href="#installation">Installation</a> • <a href="#how-to-use">How To Use</a> • <a href="#examples">Examples</a> • <a href="#license">License</a> • <a href="#developing">Developing</a> </p> <hr/>

Esctl is a CLI tool for Elasticsearch. I designed it to shorten huge curl commands Elasticsearch operators were running like :

curl -XPUT --user "john:doe" 'http://elasticsearch.example.com:9200/_cluster/settings' -d '{
    "transient" : {
        "cluster.routing.allocation.enable": "NONE"
    }
}'

The equivalent with esctl is

esctl cluster routing allocation enable none

Key Features

Installation

Using PIP

pip install esctl

From source

pip install git+https://github.com/jeromepin/esctl.git

How To Use

Esctl relies on a ~/.esctlrc file containing its config. This file is automatically created on the first start if it doesn't exists :

clusters:
  bar:
    servers:
      - https://bar.example.com

users:
  john-doe:
    username: john
    external_password:
      command:
        run: kubectl --context=bar --namespace=baz get secrets -o json my-secret | jq -r '.data.password||@base64d'

contexts:
  foo:
    user: john-doe
    cluster: bar

default-context: foo

Running pre-commands

Sometimes, you need to execute a shell command right before running the esctl command. Like running a kubectl port-forward in order to connect to your Kubernetes cluster. There is a pre_commands block inside the context which can take care of that :

clusters:
  remote-kubernetes:
    servers:
    - http://localhost:9200
contexts:
  my-distant-cluster:
    cluster: remote-kubernetes
    pre_commands:
    - command: kubectl --context=my-kubernetes-context --namespace=elasticsearch port-forward svc/elasticsearch 9200
      wait_for_exit: false
      wait_for_output: Forwarding from
    user: john-doe

Along with command, you can pass two options :

Examples

<p align="center"> <img src="node-list-sample.png" alt="node-list sample"> </p>

License

esctl is licensed under the GNU GPLv3. See LICENCE file.

Developing

Install

make install

Run tests

make test

Format and lint code

make lint