#!/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)