forked from joeholley/supergloo
/
rules_shared.go
44 lines (42 loc) · 1.28 KB
/
rules_shared.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package apply
import (
"github.com/solo-io/go-utils/errors"
"github.com/solo-io/supergloo/cli/pkg/options"
v1 "github.com/solo-io/supergloo/pkg/api/v1"
)
func ConvertSelector(in options.Selector) (*v1.PodSelector, error) {
useLabels := len(in.SelectedLabels) > 0
useUpstreams := len(in.SelectedUpstreams) > 0
useNamespaces := len(in.SelectedNamespaces) > 0
switch {
case !(useLabels || useUpstreams || useNamespaces):
return nil, nil
case (useLabels && useUpstreams) || (useLabels && useNamespaces) || (useUpstreams && useNamespaces):
return nil, errors.Errorf("you may only use one type of selector: upstreams, namespaces, or labels")
case useLabels:
return &v1.PodSelector{
SelectorType: &v1.PodSelector_LabelSelector_{
LabelSelector: &v1.PodSelector_LabelSelector{
LabelsToMatch: in.SelectedLabels,
},
},
}, nil
case useUpstreams:
return &v1.PodSelector{
SelectorType: &v1.PodSelector_UpstreamSelector_{
UpstreamSelector: &v1.PodSelector_UpstreamSelector{
Upstreams: in.SelectedUpstreams,
},
},
}, nil
case useNamespaces:
return &v1.PodSelector{
SelectorType: &v1.PodSelector_NamespaceSelector_{
NamespaceSelector: &v1.PodSelector_NamespaceSelector{
Namespaces: in.SelectedNamespaces,
},
},
}, nil
}
return nil, nil
}