#!/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') args = parser.parse_args() if args.wal == None or args.db == None or args.data == None: print("Required arguments not provided. Exit.") sys.exit(1) pattern = re.compile("^\d+(K|M|G|T|P)$") hostname = socket.gethostname().split('.')[0] if pattern.match(args.wal) and 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): os.system(myfullpath+"/diskPosition2 > "+myfullpath+"/diskPosition2.out") # OPEN JBOD DISKS MAP FILE with open(fn, 'r') as f: lines = f.readlines() import subprocess subprocess.call("echo yes | cp disks_lists_template.pp disks_lists.pp", shell=True) tp = open("disks_lists.pp","r") tp_lines = tp.readlines() tp.close() #Remove last parantheses ll = tp_lines[0:-2] disk_tag_template = 'ceph_osd_list_prod' disk_tag = disk_tag_template+"_"+hostname ll.append(" \'"+disk_tag+"\'" + " => {\n") ll.append(' }\n') ll.append('}\n') n = open("disks_lists.pp", "w") for l in ll: n.write(l) n.close() #print("sed -n -i /s/"+disk_tag_template+"/"+disk_tag+"/g' disks_lists.pp") #os.system('cat disks_lists.pp') #subprocess.call(["sed -i -e 's/"+disk_tag_template+"/"+disk_tag+"/g' disks_lists.pp"], shell=True) #os.system('cat disks_lists.pp') #sys.exit(0) # CREATE PARTITIONS FOR CEPH OSDS AND UPDATE PUPPET CONFIGURATION sed_string="" for i in range(0,len(lines),3): res_dev = re.search(r"/sys/block/\wd[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) os.system("echo vgcreate "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd+" /dev/"+dev) os.system("echo lvcreate -L"+args.data+" -n "+dev+"_data "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd) os.system("echo lvcreate -L"+args.wal+" -n "+dev+"_wal "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd) os.system("echo lvcreate -L"+args.db+" -n "+dev+"_db "+str(bayid)+"-"+sn+"-"+vnd+"-"+prd) sed_string = sed_string + "\ \ \ \ \ \ \'\"'\"'"+str(bayid)+"-"+sn+"-"+vnd+"-"+prd+"/"+dev+"_data\'\"'\"'=> \ {\\n \ \ \ \ \ \ \ \ store_type => '\"'\"'bluestore'\"'\"',\ \\n \ \ \ \ \ \ \ \ bluestore_wal => '\"'\"'"+str(bayid)+"-"+sn+"-"+vnd+"-"+prd+"/"+dev+"_wal'\"'\"',\ \\n \ \ \ \ \ \ \ \ bluestore_db => '\"'\"'"+str(bayid)+"-"+sn+"-"+vnd+"-"+prd+"/"+dev+"_db'\"'\"',\ \\n \ \ \ \ \ \ \ \ ensure => '\"'\"'present'\"'\"',\\n \ \ \ \ \ \},\\n" sed_string = sed_string + "\ \ \ \ \}," #print sed_string os.system("sed -i '/ '\"'\""+disk_tag+"\"'\"' => {/a "+sed_string+\ "' "+"./disks_lists.pp")