11# Common function for Cloudstack's XenAPI plugins
2- #
2+ #
33# Copyright (C) 2012 Citrix Systems
44
55import ConfigParser
1313DEFAULT_LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
1414DEFAULT_LOG_FILE = "/var/log/cloudstack_plugins.log"
1515
16- PLUGIN_CONFIG_PATH = ' /etc/xensource/cloudstack_plugins.conf'
16+ PLUGIN_CONFIG_PATH = " /etc/xensource/cloudstack_plugins.conf"
1717OVSDB_PID_PATH = "/var/run/openvswitch/ovsdb-server.pid"
1818OVSDB_DAEMON_PATH = "ovsdb-server"
1919OVS_PID_PATH = "/var/run/openvswitch/ovs-vswitchd.pid"
2020OVS_DAEMON_PATH = "ovs-vswitchd"
21- VSCTL_PATH = '/usr/bin/ovs-vsctl'
22- OFCTL_PATH = '/usr/bin/ovs-ofctl'
23- XE_PATH = "/opt/xensource/bin/xe"
21+ VSCTL_PATH = "/usr/bin/ovs-vsctl"
22+ OFCTL_PATH = "/usr/bin/ovs-ofctl"
23+ XE_PATH = "/opt/xensource/bin/xe"
24+
2425
2526class PluginError (Exception ):
2627 """Base Exception class for all plugin errors."""
2728 def __init__ (self , * args ):
2829 Exception .__init__ (self , * args )
2930
31+
3032def setup_logging (log_file = None ):
3133 debug = False
3234 verbose = False
@@ -39,23 +41,23 @@ def setup_logging(log_file=None):
3941 try :
4042 options = config .options ('LOGGING' )
4143 if 'debug' in options :
42- debug = config .getboolean ('LOGGING' ,'debug' )
44+ debug = config .getboolean ('LOGGING' , 'debug' )
4345 if 'verbose' in options :
44- verbose = config .getboolean ('LOGGING' ,'verbose' )
46+ verbose = config .getboolean ('LOGGING' , 'verbose' )
4547 if 'format' in options :
46- log_format = config .get ('LOGGING' ,'format' )
48+ log_format = config .get ('LOGGING' , 'format' )
4749 if 'date_format' in options :
48- log_date_format = config .get ('LOGGING' ,'date_format' )
50+ log_date_format = config .get ('LOGGING' , 'date_format' )
4951 if 'file' in options :
50- log_file_2 = config .get ('LOGGING' ,'file' )
52+ log_file_2 = config .get ('LOGGING' , 'file' )
5153 except ValueError :
5254 # configuration file contained invalid attributes
5355 # ignore them
5456 pass
5557 except ConfigParser .NoSectionError :
5658 # Missing 'Logging' section in configuration file
5759 pass
58-
60+
5961 root_logger = logging .root
6062 if debug :
6163 root_logger .setLevel (logging .DEBUG )
@@ -66,7 +68,7 @@ def setup_logging(log_file=None):
6668 formatter = logging .Formatter (log_format , log_date_format )
6769
6870 log_filename = log_file or log_file_2 or DEFAULT_LOG_FILE
69-
71+
7072 logfile_handler = logging .FileHandler (log_filename )
7173 logfile_handler .setFormatter (formatter )
7274 root_logger .addHandler (logfile_handler )
@@ -94,60 +96,65 @@ def do_cmd(cmd):
9496 return output
9597
9698
97- def _is_process_run (pidFile , name ):
99+ def _is_process_run (pidFile , name ):
98100 try :
99- fpid = open (pidFile , "r" )
100- pid = fpid .readline ()
101- fpid .close ()
101+ fpid = open (pidFile , "r" )
102+ pid = fpid .readline ()
103+ fpid .close ()
102104 except IOError , e :
103105 return - 1
104106
105107 pid = pid [:- 1 ]
106- ps = os .popen ("ps -ae" )
108+ ps = os .popen ("ps -ae" )
107109 for l in ps :
108110 if pid in l and name in l :
109- ps .close ()
111+ ps .close ()
110112 return 0
111113
112- ps .close ()
114+ ps .close ()
113115 return - 2
114116
115- def _is_tool_exist (name ):
117+
118+ def _is_tool_exist (name ):
116119 if os .path .exists (name ):
117120 return 0
118121 return - 1
119122
120123
121- def check_switch ():
124+ def check_switch ():
122125 global result
123126
124- ret = _is_process_run (OVSDB_PID_PATH , OVSDB_DAEMON_PATH )
127+ ret = _is_process_run (OVSDB_PID_PATH , OVSDB_DAEMON_PATH )
125128 if ret < 0 :
126- if ret == - 1 : return "NO_DB_PID_FILE"
127- if ret == - 2 : return "DB_NOT_RUN"
129+ if ret == - 1 :
130+ return "NO_DB_PID_FILE"
131+ if ret == - 2 :
132+ return "DB_NOT_RUN"
128133
129- ret = _is_process_run (OVS_PID_PATH , OVS_DAEMON_PATH )
134+ ret = _is_process_run (OVS_PID_PATH , OVS_DAEMON_PATH )
130135 if ret < 0 :
131- if ret == - 1 : return "NO_SWITCH_PID_FILE"
132- if ret == - 2 : return "SWITCH_NOT_RUN"
136+ if ret == - 1 :
137+ return "NO_SWITCH_PID_FILE"
138+ if ret == - 2 :
139+ return "SWITCH_NOT_RUN"
133140
134- if _is_tool_exist (VSCTL_PATH ) < 0 :
141+ if _is_tool_exist (VSCTL_PATH ) < 0 :
135142 return "NO_VSCTL"
136143
137- if _is_tool_exist (OFCTL_PATH ) < 0 :
144+ if _is_tool_exist (OFCTL_PATH ) < 0 :
138145 return "NO_OFCTL"
139146
140147 return "SUCCESS"
141148
142149
143150def _build_flow_expr (** kwargs ):
144- is_delete_expr = kwargs .get ('delete' , False )
151+ is_delete_expr = kwargs .get ('delete' , False )
145152 flow = ""
146153 if not is_delete_expr :
147154 flow = "hard_timeout=%s,idle_timeout=%s,priority=%s" \
148- % (kwargs .get ('hard_timeout' ,'0' ),
149- kwargs .get ('idle_timeout' ,'0' ),
150- kwargs .get ('priority' ,'1' ))
155+ % (kwargs .get ('hard_timeout' , '0' ),
156+ kwargs .get ('idle_timeout' , '0' ),
157+ kwargs .get ('priority' , '1' ))
151158 in_port = 'in_port' in kwargs and ",in_port=%s" % kwargs ['in_port' ] or ''
152159 dl_type = 'dl_type' in kwargs and ",dl_type=%s" % kwargs ['dl_type' ] or ''
153160 dl_src = 'dl_src' in kwargs and ",dl_src=%s" % kwargs ['dl_src' ] or ''
@@ -156,7 +163,7 @@ def _build_flow_expr(**kwargs):
156163 nw_dst = 'nw_dst' in kwargs and ",nw_dst=%s" % kwargs ['nw_dst' ] or ''
157164 proto = 'proto' in kwargs and ",%s" % kwargs ['proto' ] or ''
158165 ip = ('nw_src' in kwargs or 'nw_dst' in kwargs ) and ',ip' or ''
159- flow = (flow + in_port + dl_type + dl_src + dl_dst +
166+ flow = (flow + in_port + dl_type + dl_src + dl_dst +
160167 (ip or proto ) + nw_src + nw_dst )
161168 return flow
162169
@@ -174,17 +181,18 @@ def add_flow(bridge, **kwargs):
174181
175182
176183def del_flows (bridge , ** kwargs ):
177- """
184+ """
178185 Removes flows according to criteria passed as keyword.
179186 """
180187 flow = _build_flow_expr (delete = True , ** kwargs )
181188 # out_port condition does not exist for all flow commands
182- out_port = 'out_port' in kwargs and ",out_port=%s" % kwargs ['out_port' ] or ''
189+ out_port = ("out_port" in kwargs and
190+ ",out_port=%s" % kwargs ['out_port' ] or '' )
183191 flow = flow + out_port
184192 delFlow = [OFCTL_PATH , 'del-flows' , bridge , flow ]
185193 do_cmd (delFlow )
186-
187-
194+
195+
188196def del_all_flows (bridge ):
189197 delFlow = [OFCTL_PATH , "del-flows" , bridge ]
190198 do_cmd (delFlow )
0 commit comments