mirror of
https://codeberg.org/scip/esctl.git
synced 2026-08-24 05:04:18 +02:00
add alias+datastream rollover, and auto rollover on index tpl change (#40)
fixes #37
This commit is contained in:
@@ -127,26 +127,28 @@ func IndexTemplateShow(conf *cfg.Config, tplname string) error {
|
||||
table = printer.NewTable(conf, 2, 0)
|
||||
table.Addheaders("index field mapping", "type")
|
||||
|
||||
for name, field := range tpl.IndexTemplate.Template.Mappings.Properties {
|
||||
typeval := ""
|
||||
if tpl.IndexTemplate.Template.Mappings != nil {
|
||||
for name, field := range tpl.IndexTemplate.Template.Mappings.Properties {
|
||||
typeval := ""
|
||||
|
||||
switch val := field.(type) {
|
||||
case *types.IntegerNumberProperty:
|
||||
typeval = val.Type
|
||||
case *types.KeywordProperty:
|
||||
typeval = val.Type
|
||||
case *types.DateProperty:
|
||||
typeval = val.Type
|
||||
switch val := field.(type) {
|
||||
case *types.IntegerNumberProperty:
|
||||
typeval = val.Type
|
||||
case *types.KeywordProperty:
|
||||
typeval = val.Type
|
||||
case *types.DateProperty:
|
||||
typeval = val.Type
|
||||
}
|
||||
|
||||
table.Entries = append(table.Entries, []string{
|
||||
name, typeval,
|
||||
})
|
||||
}
|
||||
|
||||
table.Entries = append(table.Entries, []string{
|
||||
name, typeval,
|
||||
})
|
||||
}
|
||||
|
||||
fmt.Println()
|
||||
if err := table.Print(); err != nil {
|
||||
return err
|
||||
fmt.Println()
|
||||
if err := table.Print(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -343,6 +345,12 @@ func IndexTemplateModify(conf *cfg.Config, name string, mappings []string) error
|
||||
return fmt.Errorf("failed to modify index template: %s", esErrorString(err))
|
||||
}
|
||||
|
||||
if conf.Rollover {
|
||||
if err := rolloverAliasIndexTemplate(conf, name); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -358,6 +366,72 @@ func IndexTemplateDelete(conf *cfg.Config, name string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Based on given index template find the associated index patterns,
|
||||
// find indices matching those, find their associated aliases and
|
||||
// rollover all we find. Only run when conf.Rollover==true
|
||||
func rolloverAliasIndexTemplate(conf *cfg.Config, name string) error {
|
||||
res, err := conf.DefaultCluster.ES.Indices.GetIndexTemplate().
|
||||
Name(name).
|
||||
Do(context.Background())
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get index template: %s", esErrorString(err))
|
||||
}
|
||||
|
||||
slog.Debug("res", "index template", res)
|
||||
|
||||
if len(res.IndexTemplates) != 1 {
|
||||
return errors.New("multiple or no index template matched the pattern")
|
||||
}
|
||||
|
||||
patterns := res.IndexTemplates[0].IndexTemplate.IndexPatterns
|
||||
aliases := map[string]int{}
|
||||
|
||||
// find all aliases matching the patterns
|
||||
for _, pattern := range patterns {
|
||||
res, err := conf.DefaultCluster.ES.Indices.ResolveIndex(pattern).
|
||||
Do(context.Background())
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to resolve index pattern: %s", esErrorString(err))
|
||||
}
|
||||
|
||||
for _, index := range res.Indices {
|
||||
for _, alias := range index.Aliases {
|
||||
aliases[alias] = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(aliases) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
table := printer.NewTable(conf, 4, 0)
|
||||
table.Addheaders("rollover alias", "status", "ack", "new index")
|
||||
|
||||
// apply rollover to all matching aliases, if any
|
||||
for alias := range aliases {
|
||||
res, err := RolloverAlias(conf, alias)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
table.Entries = append(table.Entries, []string{
|
||||
alias,
|
||||
fmt.Sprintf("%t", res.RolledOver),
|
||||
fmt.Sprintf("%t", res.Acknowledged),
|
||||
res.NewIndex,
|
||||
})
|
||||
|
||||
if err := table.Print(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func modMappings(mappings []string) (types.TypeMappingVariant, error) {
|
||||
typemaps := esdsl.NewTypeMapping()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user