blob: 216f30d4426c8ac5dadb23cf21a83990c4a87947 [file] [log] [blame]
""" Collect data about ceph nodes"""
import json
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_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
ips.setdefault(url, []).append("ceph-osd")
for ip in mon_ips:
url = "ssh://%s" % ip
ips.setdefault(url, []).append("ceph-mon")
for ip in mds_ips:
url = "ssh://%s" % ip
ips.setdefault(url, []).append("ceph-mds")
return [Node(ip=url, roles=list(roles)) for url, roles in ips.items()]
def get_osds_list():
""" Get list of osds id"""
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" """
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")
ips = set()
for line in line_res:
fields = line.split()
# 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
:param osd_list - list of osd names from osd ls command"""
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