feature add ilm-explain (#52)

This commit is contained in:
T. von Dein
2026-06-26 10:02:41 +02:00
parent 6200b5e7b0
commit d2a0812579
2 changed files with 42 additions and 2 deletions

View File

@@ -38,6 +38,7 @@ func Ilm(conf *cfg.Config) *cli.Command {
IlmShow(conf),
IlmCreate(conf),
IlmForecast(conf),
IlmExplain(conf),
},
}
}
@@ -54,6 +55,23 @@ func IlmRetry(conf *cfg.Config) *cli.Command {
}
}
func IlmExplain(conf *cfg.Config) *cli.Command {
return &cli.Command{
Name: "explain",
Usage: "explain ilm condition of an index",
UsageText: "explain <index>",
Action: func(ctx context.Context, cmd *cli.Command) error {
index := cmd.Args().Get(0)
if index == "" {
return errors.New("no index specified")
}
return es.IlmExplain(conf, index)
},
}
}
func IlmStatus(conf *cfg.Config) *cli.Command {
return &cli.Command{
Name: "status",

View File

@@ -18,6 +18,7 @@ package es
import (
"context"
"encoding/json"
"errors"
"fmt"
"log/slog"
@@ -26,6 +27,7 @@ import (
"codeberg.org/scip/esctl/pkg/cfg"
"codeberg.org/scip/esctl/pkg/printer"
"github.com/alecthomas/repr"
"github.com/charmbracelet/lipgloss"
"github.com/elastic/go-elasticsearch/v9/typedapi/esdsl"
"github.com/elastic/go-elasticsearch/v9/typedapi/ilm/putlifecycle"
"github.com/elastic/go-elasticsearch/v9/typedapi/types"
@@ -183,18 +185,38 @@ func IlmExplain(conf *cfg.Config, index string) error {
table := printer.NewTable(conf, 2, 0)
table.Addheaders("ilm status field", "value")
info := ""
err = json.Unmarshal(ilm.StepInfo["reason"], &info)
if err != nil {
return fmt.Errorf("failed to unmarshal step info: %w", err)
}
table.Entries = [][]string{
{"index", ilm.Index},
{"ilm policy", *ilm.Policy},
{"action", *ilm.Action},
{"step", *ilm.Step},
{"age", fmt.Sprintf("%s", ilm.Age)},
{"managed", fmt.Sprintf("%t", ilm.Managed)},
{"phase", *ilm.Phase},
{"phase execution", ilmPhaseString(ilm.PhaseExecution.PhaseDefinition, false)},
{"step", *ilm.Step},
{"failed step", *ilm.FailedStep},
{"failed step retry count", fmt.Sprintf("%d", ilm.FailedStepRetryCount)},
}
return table.Print()
if err := table.Print(); err != nil {
return err
}
if info != "" {
var bold = lipgloss.NewStyle().Bold(true)
fmt.Printf("\n%s:\n%s\n",
bold.Render("Step Reason"),
info)
}
return nil
}
func IlmCreate(conf *cfg.Config, policyname string) error {