"""
from collections import OrderedDict
-import json
import logging
+import json
_tickmark = ' (' + u'\u2713'.encode('utf8') + ')'
_crossmark = ' (' + u'\u2717'.encode('utf8') + ')'
+_success_sym = _tickmark
+_error_sym = _crossmark
class ifaceStatus():
"""Enumerates iface status """
def default(self, o):
retconfig = {}
if o.config:
- for k, v in o.config.items():
- if len(v) == 1:
- retconfig[k] = v[0]
- else:
- retconfig[k] = v
+ retconfig = {k: (v[0] if len(v) == 1 else v)
+ for k,v in o.config.items()}
return OrderedDict({'name' : o.name,
'addr_method' : o.addr_method,
'addr_family' : o.addr_family,
def is_config_present(self):
addr_method = self.addr_method
- if addr_method:
- if (addr_method.find('dhcp') != -1 or
- addr_method.find('dhcp6') != -1):
- return True
+ if addr_method and addr_method in ['dhcp', 'dhcp6', 'loopback']:
+ return True
if not self.config:
return False
else:
def get_config_attr_status_str(self, attr_name, idx=0):
ret = self.get_config_attr_status(attr_name, idx)
if ret:
- return _crossmark
+ return _error_sym
else:
- return _tickmark
+ return _success_sym
def compare(self, dstiface):
""" Compares two objects
outbuf += ' %s' %self.addr_family
if self.addr_method:
outbuf += ' %s' %self.addr_method
+ if with_status:
+ if (self.status == ifaceStatus.NOTFOUND or
+ self.status == ifaceStatus.ERROR):
+ outbuf += ' %s' %_error_sym
+ else:
+ outbuf += ' %s' %_success_sym
+ if self.status == ifaceStatus.NOTFOUND:
+ print outbuf + '\n'
+ return
outbuf += '\n'
config = self.config
if config:
outbuf += indent + '%s %s\n' %(cname, cv)
idx += 1
print outbuf
-
- def dump_json(self, with_status=False):
- print json.dumps(self, cls=ifaceJsonEncoder, indent=4)
import logging
import sys, traceback
import copy
+import json
from statemanager import *
from networkinterfaces import *
from iface import *
ifaceobjcurr.name = ifaceobj.name
ifaceobjcurr.lowerifaces = ifaceobj.lowerifaces
ifaceobjcurr.priv_flags = ifaceobj.priv_flags
+ ifaceobjcurr.auto = ifaceobj.auto
self.ifaceobjcurrdict[ifaceobj.name] = ifaceobjcurr
return ifaceobjcurr
if not ifacenames:
ifacenames = self.ifaceobjdict.keys()
- self.logger.debug('populating dependency info for %s' %str(ifacenames))
iqueue = deque(ifacenames)
while iqueue:
i = iqueue.popleft()
if dlist:
self.preprocess_dependency_list(ifaceobj.name,
dlist, ops)
- self.logger.debug('%s: lowerifaces/dependents: %s'
- %(i, str(dlist)))
ifaceobj.lowerifaces = dlist
[iqueue.append(d) for d in dlist]
if not self.dependency_graph.get(i):
if not dlist: continue
self.print_ifaceobjs_raw(dlist)
- def print_ifaceobjs_pretty(self, ifacenames, format='native'):
- """ pretty prints iface in format given by keyword arg format """
+ def _get_ifaceobjs_pretty(self, ifacenames, ifaceobjs, running=False):
+ """ returns iface obj list """
for i in ifacenames:
for ifaceobj in self.get_ifaceobjs(i):
- if (self.is_ifaceobj_noconfig(ifaceobj)):
+ if ((not running and self.is_ifaceobj_noconfig(ifaceobj)) or
+ (running and not ifaceobj.is_config_present())):
continue
- if format == 'json':
- ifaceobj.dump_json()
- else:
- ifaceobj.dump_pretty()
+ ifaceobjs.append(ifaceobj)
if self.WITH_DEPENDS and not self.ALL:
dlist = ifaceobj.lowerifaces
if not dlist: continue
- self.print_ifaceobjs_pretty(dlist, format)
+ self._get_ifaceobjs_pretty(dlist, ifaceobjs, running)
- def print_ifaceobjscurr_pretty(self, ifacenames, format='native'):
- """ pretty prints current running state of interfaces with status.
+ def print_ifaceobjs_pretty(self, ifacenames, format='native'):
+ """ pretty prints iface in format given by keyword arg format """
- returns 1 if any of the interface has an error,
- else returns 0
- """
+ ifaceobjs = []
+ self._get_ifaceobjs_pretty(ifacenames, ifaceobjs)
+ if not ifaceobjs: return
+ if format == 'json':
+ print json.dumps(ifaceobjs, cls=ifaceJsonEncoder, indent=4,
+ separators=(',', ': '))
+ else:
+ map(lambda i: i.dump_pretty(), ifaceobjs)
+ def _get_ifaceobjscurr_pretty(self, ifacenames, ifaceobjs):
ret = 0
for i in ifacenames:
ifaceobj = self.get_ifaceobjcurr(i)
if not ifaceobj: continue
- if ifaceobj.status == ifaceStatus.NOTFOUND:
- print 'iface %s (%s)\n' %(ifaceobj.name,
- ifaceStatus.to_str(ifaceStatus.NOTFOUND))
- ret = 1
- continue
- elif ifaceobj.status == ifaceStatus.ERROR:
+ if (ifaceobj.status == ifaceStatus.NOTFOUND or
+ ifaceobj.status == ifaceStatus.ERROR):
ret = 1
- if (self.is_ifaceobj_noconfig(ifaceobj)):
+ if self.is_ifaceobj_noconfig(ifaceobj):
continue
- if format == 'json':
- ifaceobj.dump_json(with_status=True)
- else:
- ifaceobj.dump_pretty(with_status=True)
+ ifaceobjs.append(ifaceobj)
if self.WITH_DEPENDS and not self.ALL:
dlist = ifaceobj.lowerifaces
if not dlist: continue
- self.print_ifaceobjscurr_pretty(dlist, format)
+ dret = self._get_ifaceobjscurr_pretty(dlist, ifaceobjs)
+ if dret: ret = 1
+ return ret
+
+ def print_ifaceobjscurr_pretty(self, ifacenames, format='native'):
+ """ pretty prints current running state of interfaces with status.
+
+ returns 1 if any of the interface has an error,
+ else returns 0
+ """
+
+ ifaceobjs = []
+ ret = self._get_ifaceobjscurr_pretty(ifacenames, ifaceobjs)
+ if not ifaceobjs: return
+ self.logger.debug(ifaceobjs)
+ if format == 'json':
+ print json.dumps(ifaceobjs, cls=ifaceJsonEncoder, indent=2,
+ separators=(',', ': '))
+ else:
+ map(lambda i: i.dump_pretty(with_status=True), ifaceobjs)
return ret
def print_ifaceobjsrunning_pretty(self, ifacenames, format='native'):
""" pretty prints iface running state """
- for i in ifacenames:
- ifaceobj = self.get_ifaceobj_first(i)
- if ifaceobj.status == ifaceStatus.NOTFOUND:
- print 'iface %s' %ifaceobj.name + ' (not found)\n'
- continue
- if not ifaceobj.is_config_present():
- continue
- if format == 'json':
- ifaceobj.dump_json()
- else:
- ifaceobj.dump_pretty()
- if self.WITH_DEPENDS and not self.ALL:
- dlist = ifaceobj.lowerifaces
- if not dlist: continue
- self.print_ifaceobjsrunning_pretty(dlist, format)
- return
+ ifaceobjs = []
+ self._get_ifaceobjs_pretty(ifacenames, ifaceobjs, running=True)
+ if not ifaceobjs: return
+ if format == 'json':
+ print json.dumps(ifaceobjs, cls=ifaceJsonEncoder, indent=2,
+ separators=(',', ': '))
+ else:
+ map(lambda i: i.dump_pretty(), ifaceobjs)
def _dump(self):
print 'ifupdown main object dump'