1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
from provisioning import Provisioning
import os
import json
import rcExceptions as ex
from stat import *
from rcUtilities import justcall
import glob
class ProvisioningDisk(Provisioning):
def __init__(self, r):
Provisioning.__init__(self, r)
self.pvs = r.svc.config.get(self.r.rid, 'pvs')
self.pvs = self.pvs.split()
try:
self.options = r.svc.config.get(self.r.rid, 'options').split()
except:
self.options = []
l = []
for pv in self.pvs:
l += glob.glob(pv)
self.pvs = l
def provisioner(self):
if self.r.has_it():
self.r.log.info("already provisioned")
return
err = False
for i, pv in enumerate(self.pvs):
if not os.path.exists(pv):
self.r.log.error("pv %s does not exist"%pv)
err |= True
mode = os.stat(pv)[ST_MODE]
if S_ISBLK(mode):
continue
else:
self.r.log.error("pv %s is not a block device nor a loop file"%pv)
err |= True
if err:
raise ex.excError
for pv in self.pvs:
pv = pv.replace('/disk/', '/rdisk/')
cmd = ['pvcreate', '-f', pv]
ret, out, err = self.r.vcall(cmd)
if ret != 0:
raise ex.excError
pvs = []
for pv in self.pvs:
pvs.append(pv.replace('/rdisk/', '/disk/'))
cmd = ['vgcreate']
if len(self.options) > 0:
cmd += self.options
cmd += [self.r.name] + pvs
ret, out, err = self.r.vcall(cmd)
if ret != 0:
raise ex.excError
self.r.log.info("provisioned")
return True
|