Skip to content
Snippets Groups Projects
disk-partitions.py 4.28 KiB
Newer Older
root's avatar
root committed
#!/usr/bin/python

import re
import os
import sys
import argparse
import subprocess
import socket

try:
    myfullpath = os.path.dirname(os.path.realpath(__file__))
except NameError:
    myfullpath = os.path.abspath(os.path.curdir)

parser = argparse.ArgumentParser(description='Perform standalone CEPH installation.')
parser.add_argument('-t','--data', help='Data partition size')
parser.add_argument('-w','--wal', help='Wal partition size')
parser.add_argument('-d','--db', help='DB partition size')
parser.add_argument('-s','--ssd', help='ssd disks wal and db partitions')
args = parser.parse_args()

#We allow for implicit WAL
if args.db == None or args.data == None:
    print("Required arguments not provided. Exit.")
    print ("python disk-partitions.py --data <size> --db <size> --ssd /dev/<ssd block device>")
    print ("E.g.")
    print ("python disk-partitions.py --data 100%FREE --db 80G --ssd /dev/sdz")
    sys.exit(1)


dry_run = True

s = args.ssd
ssd_list = []

if len(s) == 0 :
  print("No ssd disks provided")
else:
  tmp =  s.split(',')

for t in tmp:
  try:
    os.stat(t)
  except OSError:
    print("Device %s doesn't exists. Exit."%t)
    sys.exit(-1)
  ssd_list.append(t)
  
ssd_string=""

for s in ssd_list:
  ssd_string = ssd_string + s + " "

os.system("echo pvcreate "+ssd_string)
if not(dry_run):
  os.system("pvcreate "+ssd_string)

hostname = socket.gethostname().split('.')[0]

vg_name_ssd = hostname+"_journal"

os.system("echo vgcreate "+vg_name_ssd+" "+ssd_string)

if not(dry_run):
  os.system("vgcreate "+vg_name_ssd+" "+ssd_string)

#sys.exit(0)

pattern = re.compile("^\d+(%FREE|K|M|G|T|P)$")


#print args

if pattern.match(args.db) and pattern.match(args.data):

    # CREATE JBOD DISKS MAP IF DOES NOT EXIST
    fn = os.path.join(myfullpath,'diskPosition2.out')
    if not os.path.isfile(fn):
        print "Building disk list"
        os.system(myfullpath+"/diskPosition2 > "+myfullpath+"/diskPosition2.out")
 
    #os.system(myfullpath+"/diskPosition2 > "+myfullpath+"/diskPosition2.out")

    # OPEN JBOD DISKS MAP FILE
    with open(fn, 'r') as f:
        lines = f.readlines()

    # CREATE PARTITIONS FOR CEPH OSDS AND UPDATE PUPPET CONFIGURATION
    sed_string=""

    for i in range(0,len(lines),3):
        #print lines[i]
        res_dev = re.search(r"/sys/block/[a-z]+",lines[i])
        res_bayid = re.search(r"BayID: \d+", lines[i])
        res_sn = re.search(r"Serial number:        \w+",lines[i])
        res_vnd = re.search(r"Vendor:               \w+", lines[i])
        res_prd = re.search(r"Product:              \w+", lines[i])


        dev = str(re.search(r"\wd[a-z]+",res_dev.group()).group())
        bayid = int(re.search(r"\d+",res_bayid.group()).group())
        sn = str(re.search(r"        \w+",res_sn.group()).group()).strip()
        vnd = str(re.search(r"               \w+",res_vnd.group()).group()).strip()
        prd = str(re.search(r"              \w+",res_prd.group()).group()).strip()
      
        #os.system("pvcreate /dev/"+dev)
        #os.system("vgcreate "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd+" /dev/"+dev)
        #os.system("lvcreate -L"+args.data+" -n "+dev+"_data "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd)
        #os.system("lvcreate -L"+args.wal+" -n "+dev+"_wal "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd)
        #os.system("lvcreate -L"+args.db+" -n "+dev+"_db "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd)

        os.system("echo pvcreate /dev/"+dev)
        if not(dry_run):
          os.system("pvcreate /dev/"+dev)

        os.system("echo vgcreate "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd+" /dev/"+dev)
        if not(dry_run):
          os.system("vgcreate "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd+" /dev/"+dev)

        if ('FREE' in args.data):
          os.system("echo lvcreate -l"+args.data+" -n "+dev+"_data "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd)
          if not(dry_run):
            os.system("lvcreate -l"+args.data+" -n "+dev+"_data "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd)
        else:
          os.system("echo lvcreate -L"+args.data+" -n "+dev+"_data "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd)
          if not(dry_run):
            os.system("lvcreate -L"+args.data+" -n "+dev+"_data "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd)
        

        os.system("echo lvcreate -L"+args.db+" -n "+dev+"_db "+vg_name_ssd)
        if not(dry_run):
          os.system("lvcreate -L"+args.db+" -n "+dev+"_db "+vg_name_ssd)