in filebeat/fileset/modules.go [55:143]
func newModuleRegistry(modulesPath string,
moduleConfigs []*ModuleConfig,
overrides *ModuleOverrides,
beatInfo beat.Info,
filesetOverrides FilesetOverrides,
) (*ModuleRegistry, error) {
reg := ModuleRegistry{
registry: []Module{},
log: beatInfo.Logger.Named(logName),
}
for _, mcfg := range moduleConfigs {
// an empty ModuleConfig can reach this so we only force enable a
// config if the Module name is set and Enabled pointer is valid.
if (filesetOverrides.EnableAllFilesets || filesetOverrides.ForceEnableModuleFilesets) && mcfg.Module != "" && mcfg.Enabled != nil {
*mcfg.Enabled = true
}
if mcfg.Module == "" || (mcfg.Enabled != nil && !(*mcfg.Enabled)) {
continue
}
// Look for moved modules
if moduleName, moved := getCurrentModuleName(modulesPath, mcfg.Module); moved {
reg.log.Warnf("Configuration uses the old name %q for module %q, please update your configuration.", mcfg.Module, moduleName)
mcfg.Module = moduleName
}
moduleFilesets, err := getModuleFilesets(modulesPath, mcfg.Module)
if err != nil {
return nil, fmt.Errorf("error getting filesets for module %s: %w", mcfg.Module, err)
}
module := Module{
config: *mcfg,
filesets: []Fileset{},
}
if filesetOverrides.ForceEnableModuleFilesets {
if mcfg.Filesets == nil {
mcfg.Filesets = make(map[string]*FilesetConfig)
}
for _, fName := range moduleFilesets {
if _, ok := mcfg.Filesets[fName]; !ok {
mcfg.Filesets[fName] = &FilesetConfig{Enabled: func() *bool { b := true; return &b }()}
}
}
}
for filesetName, fcfg := range mcfg.Filesets {
fcfg, err = applyOverrides(fcfg, mcfg.Module, filesetName, overrides)
if err != nil {
return nil, fmt.Errorf("error applying overrides on fileset %s/%s: %w", mcfg.Module, filesetName, err)
}
// ModuleConfig can have empty Filesets so we only force
// enable if the Enabled pointer is valid
if (filesetOverrides.EnableAllFilesets || filesetOverrides.ForceEnableModuleFilesets) && fcfg.Enabled != nil {
*fcfg.Enabled = true
}
if fcfg.Enabled != nil && !(*fcfg.Enabled) {
continue
}
found := false
for _, name := range moduleFilesets {
if filesetName == name {
found = true
}
}
if !found {
return nil, fmt.Errorf("fileset %s/%s is configured but doesn't exist", mcfg.Module, filesetName)
}
fileset, err := New(modulesPath, filesetName, mcfg.Module, fcfg)
if err != nil {
return nil, err
}
if err = fileset.Read(beatInfo); err != nil {
return nil, fmt.Errorf("error reading fileset %s/%s: %w", mcfg.Module, filesetName, err)
}
module.filesets = append(module.filesets, *fileset)
}
reg.registry = append(reg.registry, module)
}
reg.log.Infof("Enabled modules/filesets: %s", reg.InfoString())
for _, mod := range reg.registry {
filesets := reg.ModuleConfiguredFilesets(mod)
if len(filesets) == 0 {
return nil, fmt.Errorf("module %s is configured but has no enabled filesets", mod.config.Module)
}
}
return ®, nil
}