large refactoring of new code
diff --git a/nodes/ceph.py b/nodes/ceph.py
index c5a9288..216f30d 100644
--- a/nodes/ceph.py
+++ b/nodes/ceph.py
@@ -1,111 +1,71 @@
""" Collect data about ceph nodes"""
import json
-import sh
from node import Node
+from disk_perf_test_tool.ext_libs import sh
def discover_ceph_node():
""" Return list of ceph's nodes ips """
-
ips = {}
- osd_list = get_osds_list()
- osd_ips = get_osds_ips(osd_list)
+
+ osd_ips = get_osds_ips(get_osds_list())
mon_ips = get_mons_or_mds_ips("mon")
mds_ips = get_mons_or_mds_ips("mds")
+
for ip in osd_ips:
url = "ssh://%s" % ip
- if url in ips:
- ips[url].append("ceph-osd")
- else:
- ips[url] = ["ceph-osd"]
+ ips.setdefault(url, []).append("ceph-osd")
+
for ip in mon_ips:
url = "ssh://%s" % ip
- if url in ips:
- ips[url].append("ceph-mon")
- else:
- ips[url] = ["ceph-mon"]
+ ips.setdefault(url, []).append("ceph-mon")
+
for ip in mds_ips:
url = "ssh://%s" % ip
- if url in ips:
- ips[url].append("ceph-mds")
- else:
- ips[url] = ["ceph-mds"]
+ ips.setdefault(url, []).append("ceph-mds")
- res = []
- for url, roles in ips:
- res.append(Node(ip=url, roles=list(roles)))
-
- return res
-
-
-# internal services
-
-
-class CephException(Exception):
- """ Exceptions from ceph call"""
- pass
-
-class ParameterException(Exception):
- """ Bad parameter in function"""
- pass
+ return [Node(ip=url, roles=list(roles)) for url, roles in ips.items()]
def get_osds_list():
""" Get list of osds id"""
- try:
- res = sh.ceph.osd.ls()
- osd_list = [osd_id
- for osd_id in res.split("\n") if osd_id != '']
- return osd_list
- except sh.CommandNotFound:
- raise CephException("Ceph command not found")
- except:
- raise CephException("Ceph command 'osd ls' execution error")
+ return filter(None, sh.ceph.osd.ls().split("\n"))
def get_mons_or_mds_ips(who):
""" Return mon ip list
:param who - "mon" or "mds" """
- try:
- ips = set()
- if who == "mon":
- res = sh.ceph.mon.dump()
- elif who == "mds":
- res = sh.ceph.mds.dump()
- else:
- raise ParameterException("'%s' in get_mons_or_mds_ips instead of mon/mds" % who)
+ if who == "mon":
+ res = sh.ceph.mon.dump()
+ elif who == "mds":
+ res = sh.ceph.mds.dump()
+ else:
+ raise ValueError(("'%s' in get_mons_or_mds_ips instead" +
+ "of mon/mds") % who)
- line_res = res.split("\n")
- for line in line_res:
- fields = line.split()
- if len(fields) > 2 and who in fields[2]:
- ips.add(fields[1].split(":")[0])
+ line_res = res.split("\n")
+ ips = set()
- return ips
+ for line in line_res:
+ fields = line.split()
- except sh.CommandNotFound:
- raise CephException("Ceph command not found")
- except ParameterException as e:
- raise e
- except:
- mes = "Ceph command '%s dump' execution error" % who
- raise CephException(mes)
+ # what does fields[1], fields[2] means?
+ # make this code looks like:
+ # SOME_MENINGFULL_VAR1, SOME_MENINGFULL_VAR2 = line.split()[1:3]
+
+ if len(fields) > 2 and who in fields[2]:
+ ips.add(fields[1].split(":")[0])
+
+ return ips
def get_osds_ips(osd_list):
- """ Get osd's ips
+ """ Get osd's ips
:param osd_list - list of osd names from osd ls command"""
- try:
- ips = set()
- for osd_id in osd_list:
- res = sh.ceph.osd.find(osd_id)
- ip = json.loads(str(res))["ip"]
- ips.add(ip.split(":")[0])
- return ips
-
- except sh.CommandNotFound:
- raise CephException("Ceph command not found")
- except:
- raise CephException("Ceph command 'osd find' execution error")
-
+ ips = set()
+ for osd_id in osd_list:
+ res = sh.ceph.osd.find(osd_id)
+ ip = json.loads(str(res))["ip"]
+ ips.add(ip.split(":")[0])
+ return ips