/
vendorfilter.go
116 lines (100 loc) · 3.45 KB
/
vendorfilter.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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*
Copyright 2018 The OpenEBS Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package filter
import (
"strings"
"github.com/openebs/node-disk-manager/blockdevice"
"github.com/openebs/node-disk-manager/cmd/ndm_daemonset/controller"
"github.com/openebs/node-disk-manager/pkg/util"
)
const (
vendorFilterKey = "vendor-filter"
// vendorValueOpenEBS is the vendor for iscsi disks created by OpenEBS
vendorValueOpenEBS = "OpenEBS"
)
var (
vendorFilterName = "vendor filter" // filter name
vendorFilterState = defaultEnabled // filter state
includeVendors = ""
excludeVendors = ""
// list of vendors that are excluded by default. This is done so that OpenEBS created disks are excluded
// by default
defaultExcludedVendors = []string{vendorValueOpenEBS}
)
// vendorFilterRegister contains registration process of VendorFilter
var vendorFilterRegister = func() {
ctrl := <-controller.ControllerBroadcastChannel
if ctrl == nil {
return
}
if ctrl.NDMConfig != nil {
for _, filterConfig := range ctrl.NDMConfig.FilterConfigs {
if filterConfig.Key == vendorFilterKey {
vendorFilterName = filterConfig.Name
vendorFilterState = util.CheckTruthy(filterConfig.State)
includeVendors = filterConfig.Include
excludeVendors = filterConfig.Exclude
break
}
}
}
var fi controller.FilterInterface = newVendorFilter(ctrl)
newRegisterFilter := ®isterFilter{
name: vendorFilterName,
state: vendorFilterState,
fi: fi,
controller: ctrl,
}
newRegisterFilter.register()
}
// vendorFilter contains controller and include and exclude vendors
type vendorFilter struct {
controller *controller.Controller
excludeVendors []string
includeVendors []string
}
// newVendorFilter returns new pointer osDiskFilter
func newVendorFilter(ctrl *controller.Controller) *vendorFilter {
return &vendorFilter{
controller: ctrl,
}
}
// Start sets include and exclude vendor's list
func (vf *vendorFilter) Start() {
vf.includeVendors = make([]string, 0)
vf.excludeVendors = make([]string, 0)
// add the default exclude list to exclude vendors.
vf.excludeVendors = append(vf.excludeVendors, defaultExcludedVendors...)
if includeVendors != "" {
vf.includeVendors = strings.Split(includeVendors, ",")
}
if excludeVendors != "" {
vf.excludeVendors = append(vf.excludeVendors, strings.Split(excludeVendors, ",")...)
}
}
// Include returns true if vendor of the disk matches with given list
// or the list of the length is 0
func (vf *vendorFilter) Include(blockDevice *blockdevice.BlockDevice) bool {
if len(vf.includeVendors) == 0 {
return true
}
return util.ContainsIgnoredCase(vf.includeVendors, blockDevice.DeviceAttributes.Vendor)
}
// Exclude returns true if vendor of the disk does not match with given
// list or the list of the length is 0
func (vf *vendorFilter) Exclude(blockDevice *blockdevice.BlockDevice) bool {
if len(vf.excludeVendors) == 0 {
return true
}
return !util.ContainsIgnoredCase(vf.excludeVendors, blockDevice.DeviceAttributes.Vendor)
}