add index template completion, index pattern filter and name filter

This commit is contained in:
2026-07-15 14:51:12 +02:00
parent 6f3df9b885
commit b73cb87f12
3 changed files with 67 additions and 11 deletions

View File

@@ -34,6 +34,7 @@ const (
Cilm
Cnode
Cclustersettings
Cindextemplate
)
func complete(conf *cfg.Config, cmd *cli.Command, what int) {
@@ -65,6 +66,8 @@ func complete(conf *cfg.Config, cmd *cli.Command, what int) {
list, err = es.NodeNames(conf)
case Cclustersettings:
list, err = es.ClusterSettingsNames(conf)
case Cindextemplate:
list, err = es.IndexTemplateNames(conf)
}
if err != nil {

View File

@@ -49,8 +49,23 @@ func IndexTemplateList(conf *cfg.Config) *cli.Command {
Aliases: []string{"ls"},
Usage: "list index templates",
Flags: []cli.Flag{
&cli.StringSliceFlag{
Name: "filter-index-pattern",
Usage: "show only index templates which use patterns, which match the filter",
Destination: &conf.Filter,
Aliases: []string{"F"},
},
&cli.BoolFlag{
Name: "hidden",
Usage: "show hidden index templates as well",
Destination: &conf.Hidden,
Aliases: []string{"H"},
},
},
Action: func(ctx context.Context, cmd *cli.Command) error {
return es.IndexTemplateList(conf)
return es.IndexTemplateList(conf, cmd.Args().Get(0))
},
}
}
@@ -71,7 +86,7 @@ func IndexTemplateShow(conf *cfg.Config) *cli.Command {
},
ShellComplete: func(ctx context.Context, cmd *cli.Command) {
complete(conf, cmd, Cindex)
complete(conf, cmd, Cindextemplate)
},
}
}
@@ -215,7 +230,7 @@ func IndexTemplateDelete(conf *cfg.Config) *cli.Command {
},
ShellComplete: func(ctx context.Context, cmd *cli.Command) {
complete(conf, cmd, Cindex)
complete(conf, cmd, Cindextemplate)
},
}
}

View File

@@ -33,7 +33,23 @@ import (
)
// used for completion
func IndexTemplateList(conf *cfg.Config) error {
func IndexTemplateNames(conf *cfg.Config) ([]string, error) {
res, err := conf.DefaultCluster.ES().Indices.GetIndexTemplate().
Do(context.Background())
if err != nil {
return nil, fmt.Errorf("failed to get index templates: %w", esErrorString(err))
}
names := make([]string, len(res.IndexTemplates))
for idx, tpl := range res.IndexTemplates {
names[idx] = tpl.Name
}
return names, nil
}
func IndexTemplateList(conf *cfg.Config, filter string) error {
res, err := conf.DefaultCluster.ES().Indices.GetIndexTemplate().
Do(context.Background())
if err != nil {
@@ -42,20 +58,42 @@ func IndexTemplateList(conf *cfg.Config) error {
slog.Debug("res", "index templates", res)
table := printer.NewTable(conf, 5, len(res.IndexTemplates))
table.Addheaders("name", "description", "priority")
table := printer.NewTable(conf, 5, 0)
table.Addheaders("name", "description", "index patterns", "priority")
for idx, tpl := range res.IndexTemplates {
desc, err := json.Marshal(tpl.IndexTemplate.Meta_["description"])
if err != nil {
return fmt.Errorf("failed to unmarshal meta json data: %w", err)
for _, tpl := range res.IndexTemplates {
if !conf.Hidden && strings.HasPrefix(tpl.Name, ".") {
continue
}
if filter != "" && !strings.Contains(tpl.Name, filter) {
continue
}
if len(conf.Filter) > 0 {
skip := true
for _, filter := range conf.Filter {
for _, pattern := range tpl.IndexTemplate.IndexPatterns {
if strings.Contains(pattern, filter) {
skip = false
}
}
}
if skip {
continue
}
}
desc := strings.TrimPrefix(strings.TrimSuffix(string(tpl.IndexTemplate.Meta_["description"]), `"`), `"`)
var prio int64
if tpl.IndexTemplate.Priority != nil {
prio = *tpl.IndexTemplate.Priority
}
table.Entries[idx] = []any{tpl.Name, desc, prio}
table.AddRow(tpl.Name, desc, tpl.IndexTemplate.IndexPatterns, prio)
}
table.Sort()