...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package registry
17
18 import (
19 "github.com/pkg/errors"
20
21 "github.com/chaos-mesh/chaos-mesh/api/v1alpha1"
22 "github.com/chaos-mesh/chaos-mesh/pkg/selector/generic"
23 )
24
25 type Registry map[string]SelectorFactory
26
27
28 type SelectorFactory = func(selector v1alpha1.GenericSelectorSpec, option generic.Option) (generic.Selector, error)
29
30 func Parse(registry Registry, spec v1alpha1.GenericSelectorSpec, option generic.Option) (generic.SelectorChain, error) {
31 selectors := make([]generic.Selector, 0, len(registry))
32 for name, factory := range registry {
33 selector, err := factory(spec, option)
34 if err != nil {
35 return nil, errors.Errorf("cannot parse %s selector, msg: %+v", name, err)
36 }
37 selectors = append(selectors, selector)
38 }
39 return selectors, nil
40 }
41