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
117
118
119
120
121
122
123
124
125
|
##############################################################################
# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
import logging
import vstf.controller.settings.settings as sets
LOG = logging.getLogger(__name__)
class FlowsSettings(sets.Settings):
def __init__(self, path="/etc/vstf/perf/",
filename="sw_perf.flownodes-settings",
mode=sets.SETS_SINGLE):
self._check_actors = {'namespaces', 'senders', 'receivers', 'watchers'}
self._nocheck_actors = {"cpu_listens"}
super(FlowsSettings, self).__init__(path, filename, mode)
def _register_func(self):
super(FlowsSettings, self)._register_func()
for actor in self._check_actors:
actor = actor.encode()
func_name = "add_%s" % actor
setattr(self, func_name, self._adding_file(func_name, self._mset, self._fset, actor, self._check_add))
func_name = "madd_%s" % actor
setattr(self, func_name, self._adding_memory(func_name, self._mset, actor, self._check_add))
for actor in self._nocheck_actors:
actor = actor.encode()
func_name = "add_%s" % actor
setattr(self, func_name, self._adding_file(func_name, self._mset, self._fset, actor))
func_name = "madd_%s" % actor
setattr(self, func_name, self._adding_memory(func_name, self._mset, actor))
LOG.debug(self.__dict__.keys())
def clear_all(self):
actors = self._check_actors | self._nocheck_actors
for actor in actors:
func_name = "set_%s" % actor
func = getattr(self, func_name)
func([])
def mclear_all(self):
actors = self._check_actors | self._nocheck_actors
for actor in actors:
func_name = "mset_%s" % actor
func = getattr(self, func_name)
func([])
def _check_add(self, value):
flows = ['agent', 'dev']
if not isinstance(value, dict):
raise Exception("type is error: %s" % (str(value)))
for flow in flows:
if flow not in value.keys():
raise Exception("keys[%s] is missing: %s" % (flow, str(value)))
items = ["ip", "namespace", "mac", "iface", "bdf"]
for item in items:
if item not in value['dev'].keys():
raise Exception("keys[%s] is error: %s" % (item, str(value)))
def unit_test():
from vstf.common.log import setup_logging
setup_logging(level=logging.DEBUG, log_file="/var/log/vstf/vstf-flows-settings.log", clevel=logging.INFO)
flows_settings = FlowsSettings()
LOG.info(flows_settings.settings)
flows_settings.clear_all()
flows_settings.set_flows(2)
LOG.info(flows_settings.settings)
flow_1 = {
"agent": "192.168.188.14",
"dev": {
"ip": "192.168.1.100",
"namespace": "vstf-space-1",
"mac": "90:e2:ba:20:1f:d8",
"iface": "eth4",
"bdf": "04:00.0"
}
}
flow_2 = {
"agent": "192.168.188.14",
"dev": {
"ip": "192.168.1.101",
"namespace": "vstf-space-2",
"mac": "90:e2:ba:20:1f:d9",
"iface": "p57p2",
"bdf": "04:00.1"
}
}
flows_settings.add_senders(flow_1)
flows_settings.add_senders(flow_2)
flows_settings.add_receivers(flow_2)
flows_settings.add_receivers(flow_1)
flows_settings.add_watchers(flow_1)
flows_settings.add_watchers(flow_2)
flows_settings.add_namespaces(flow_1)
flows_settings.add_namespaces(flow_2)
cpu = {
"agent": "192.168.188.16",
"affctl":{
"policy": 2
}
}
flows_settings.add_cpu_listens(cpu)
LOG.info(flows_settings.settings)
if __name__ == '__main__':
unit_test()
|