def check_cinder_vg(config, messages): cinders_volume = config["CONFIG_CINDER_VOLUME_NAME"] # Do we have a cinder-volumes vg? have_cinders_volume = False server = utils.ScriptRunner(config['CONFIG_STORAGE_HOST']) server.append('vgdisplay %s' % cinders_volume) try: server.execute() have_cinders_volume = True except exceptions.ScriptRuntimeError: pass if config["CONFIG_CINDER_VOLUMES_CREATE"] == "n": if not have_cinders_volume: raise exceptions.MissingRequirements("The cinder server should " "contain a volume group") match = re.match(r'^(?P<size>\d+)G$', config['CONFIG_CINDER_VOLUMES_SIZE'].strip()) if not match: msg = 'Invalid Cinder volumes VG size.' raise exceptions.ParamValidationError(msg) cinders_volume_size = int(match.group('size')) * 1024 cinders_reserve = int(cinders_volume_size * 0.03) cinders_volume_size = cinders_volume_size + cinders_reserve config['CONFIG_CINDER_VOLUMES_SIZE'] = '%sM' % cinders_volume_size
def check_cinder_vg(config, messages): cinders_volume = 'cinder-volumes' if config['CONFIG_UNSUPPORTED'] != 'y': config['CONFIG_STORAGE_HOST'] = config['CONFIG_CONTROLLER_HOST'] if config["CONFIG_CINDER_VOLUMES_CREATE"] != "y": if not have_cinders_volume: raise exceptions.MissingRequirements("The cinder server should " "contain a cinder-volumes " "volume group") match = re.match('^(?P<size>\d+)G$', config['CONFIG_CINDER_VOLUMES_SIZE'].strip()) if not match: msg = 'Invalid Cinder volumes VG size.' raise exceptions.ParamValidationError(msg) cinders_volume_size = int(match.group('size')) * 1024 cinders_reserve = int(cinders_volume_size * 0.03) cinders_volume_size = cinders_volume_size + cinders_reserve config['CONFIG_CINDER_VOLUMES_SIZE'] = 'sM' % cinders_volume_size
def check_cinder_vg(config, messages): cinders_volume = 'cinder-volumes' # Do we have a cinder-volumes vg? have_cinders_volume = False server = utils.ScriptRunner(config['CONFIG_CONTROLLER_HOST']) server.append('vgdisplay %s' % cinders_volume) try: server.execute() have_cinders_volume = True except exceptions.ScriptRuntimeError: pass # Configure system LVM settings (snapshot_autoextend) server = utils.ScriptRunner(config['CONFIG_CONTROLLER_HOST']) server.append('sed -i -r "s/^ *snapshot_autoextend_threshold +=.*/' ' snapshot_autoextend_threshold = 80/" ' '/etc/lvm/lvm.conf') server.append('sed -i -r "s/^ *snapshot_autoextend_percent +=.*/' ' snapshot_autoextend_percent = 20/" ' '/etc/lvm/lvm.conf') try: server.execute() except exceptions.ScriptRuntimeError: logging.info("Warning: Unable to set system LVM settings.") if config["CONFIG_CINDER_VOLUMES_CREATE"] != "y": if not have_cinders_volume: raise exceptions.MissingRequirements("The cinder server should " "contain a cinder-volumes " "volume group") else: if have_cinders_volume: messages.append(output_messages.INFO_CINDER_VOLUMES_EXISTS) return server = utils.ScriptRunner(config['CONFIG_CONTROLLER_HOST']) server.append('systemctl') try: server.execute() rst_cmd = 'systemctl restart openstack-cinder-volume.service' except exceptions.ScriptRuntimeError: rst_cmd = 'service openstack-cinder-volume restart' server.clear() logging.info("A new cinder volumes group will be created") cinders_volume_path = '/var/lib/cinder' server.append('mkdir -p %s' % cinders_volume_path) logging.debug("Volume's path: %s" % cinders_volume_path) match = re.match('^(?P<size>\d+)G$', config['CONFIG_CINDER_VOLUMES_SIZE'].strip()) if not match: msg = 'Invalid Cinder volumes VG size.' raise exceptions.ParamValidationError(msg) cinders_volume_size = int(match.group('size')) * 1024 cinders_reserve = int(cinders_volume_size * 0.03) cinders_volume_size = cinders_volume_size + cinders_reserve cinders_volume_path = os.path.join(cinders_volume_path, cinders_volume) server.append('dd if=/dev/zero of=%s bs=1 count=0 seek=%sM' % (cinders_volume_path, cinders_volume_size)) server.append('LOFI=$(losetup --show -f %s)' % cinders_volume_path) server.append('pvcreate $LOFI') server.append('vgcreate %s $LOFI' % cinders_volume) # Add the loop device on boot server.append( 'grep %(volume)s /etc/rc.d/rc.local || ' 'echo "losetup -f %(path)s && ' 'vgchange -a y %(volume)s && ' '%(restart_cmd)s" ' '>> /etc/rc.d/rc.local' % { 'volume': cinders_volume, 'restart_cmd': rst_cmd, 'path': cinders_volume_path }) server.append('grep "#!" /etc/rc.d/rc.local || ' 'sed -i \'1i#!/bin/sh\' /etc/rc.d/rc.local') server.append('chmod +x /etc/rc.d/rc.local') # Let's make sure it exists server.append('vgdisplay %s' % cinders_volume) try: server.execute() except exceptions.ScriptRuntimeError: # Release loop device if cinder's volume creation # fails. try: logging.debug("Release loop device, volume creation failed") server = utils.ScriptRunner(config['CONFIG_CONTROLLER_HOST']) server.append('losetup -d $(losetup -j %s | cut -d : -f 1)' % cinders_volume_path) server.execute() except: pass raise exceptions.MissingRequirements("Cinder's volume group '%s' " "could not be created" % cinders_volume)
def check_cinder_vg(): cinders_volume = 'cinder-volumes' # Do we have a cinder-volumes vg? have_cinders_volume = False server = utils.ScriptRunner(controller.CONF['CONFIG_CINDER_HOST']) server.append('vgdisplay %s' % cinders_volume) try: server.execute() have_cinders_volume = True except ScriptRuntimeError: pass if controller.CONF["CONFIG_CINDER_VOLUMES_CREATE"] != "y": if not have_cinders_volume: raise exceptions.MissingRequirements( "The cinder server should" " contain a cinder-volumes volume group") else: if have_cinders_volume: controller.MESSAGES.append( output_messages.INFO_CINDER_VOLUMES_EXISTS) return server = utils.ScriptRunner(controller.CONF['CONFIG_CINDER_HOST']) logging.info("A new cinder volumes group will be created") err = "Cinder's volume group '%s' could not be created" % \ cinders_volume cinders_volume_path = '/var/lib/cinder' server.append('mkdir -p %s' % cinders_volume_path) logging.debug("Volume's path: %s" % cinders_volume_path) cinders_volume_path = os.path.join(cinders_volume_path, cinders_volume) server.append('dd if=/dev/zero of=%s bs=1 count=0 seek=%s' % \ (cinders_volume_path, controller.CONF['CONFIG_CINDER_VOLUMES_SIZE'])) server.append('LOFI=$(losetup --show -f %s)' % cinders_volume_path) server.append('pvcreate $LOFI') server.append('vgcreate %s $LOFI' % cinders_volume) # Add the loop device on boot server.append('grep %s /etc/rc.d/rc.local || ' 'echo losetup $LOFI %s >> /etc/rc.d/rc.local' % (cinders_volume, cinders_volume_path)) server.append('grep "#!" /etc/rc.d/rc.local || ' 'sed -i \'1i#!/bin/sh\' /etc/rc.d/rc.local') server.append('chmod +x /etc/rc.d/rc.local') # Let's make sure it exists server.append('vgdisplay %s' % cinders_volume) try: server.execute() except ScriptRuntimeError: # Release loop device if cinder's volume creation # fails. try: logging.debug("Release loop device, volume creation failed") server = utils.ScriptRunner( controller.CONF['CONFIG_CINDER_HOST']) server.append('losetup -d $(losetup -j %s | cut -d : -f 1)' % cinders_volume_path) server.execute() except: pass raise exceptions.MissingRequirements(err)