Fix container rescue/unrescue with lvm
Fix container resuce/unrescue with lvm. Signed-off-by: Chuck Short <chuck.short@canonical.com>
This commit is contained in:
@@ -20,6 +20,7 @@ from nova import exception
|
||||
from nova import i18n
|
||||
from nova.virt import configdrive
|
||||
from nova.virt import driver
|
||||
import os
|
||||
import pprint
|
||||
|
||||
from oslo_config import cfg
|
||||
@@ -175,7 +176,15 @@ class LXDContainerConfig(object):
|
||||
|
||||
def configure_container_rescuedisk(self, container_config, instance):
|
||||
LOG.debug('Creating LXD rescue disk')
|
||||
rescue_path = self.container_dir.get_container_rescue(instance.name)
|
||||
instance_name = '%s-backup' % instance.name
|
||||
|
||||
if self.container_dir.is_lvm(instance_name):
|
||||
self.container_utils.mount_filesystem(
|
||||
self.container_dir.get_container_lvm(instance_name),
|
||||
(os.path.join(self.container_dir.get_container_dir(
|
||||
instance), instance_name)))
|
||||
|
||||
rescue_path = self.container_dir.get_container_rescue(instance_name)
|
||||
self.add_config(container_config, 'devices', 'rescue',
|
||||
data={'path': 'mnt',
|
||||
'source': rescue_path,
|
||||
|
||||
@@ -281,8 +281,8 @@ class LXDContainerOperations(object):
|
||||
utils.execute('chmod', '755',
|
||||
os.path.join(
|
||||
self.container_dir.get_container_dir(
|
||||
instance.name), instance.name),
|
||||
run_as_root=True)
|
||||
instance.name), instance.name),
|
||||
run_as_root=True)
|
||||
with open(console_log, 'rb') as fp:
|
||||
log_data, remaning = utils.last_bytes(fp,
|
||||
MAX_CONSOLE_BYTES)
|
||||
|
||||
@@ -16,12 +16,15 @@
|
||||
|
||||
from nova import exception
|
||||
from nova import i18n
|
||||
from nova import utils
|
||||
import os
|
||||
|
||||
import container_client
|
||||
from oslo_concurrency import processutils
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log as logging
|
||||
from oslo_utils import excutils
|
||||
import six
|
||||
|
||||
|
||||
_ = i18n._
|
||||
@@ -247,6 +250,23 @@ class LXDContainerUtils(object):
|
||||
{'instance': instance.name,
|
||||
'reason': ex}, instance=instance)
|
||||
|
||||
def mount_filesystem(self, dev_path, dir_path):
|
||||
try:
|
||||
_out, err = utils.execute('mount',
|
||||
'-t', 'ext4',
|
||||
dev_path, dir_path, run_as_root=True)
|
||||
except processutils.ProcessExecutionError as e:
|
||||
err = six.text_type(e)
|
||||
return err
|
||||
|
||||
def umount_filesystem(self, dir_path):
|
||||
try:
|
||||
_out, err = utils.execute('umount',
|
||||
dir_path, run_as_root=True)
|
||||
except processutils.ProcessExecutionError as e:
|
||||
err = six.text_type(e)
|
||||
return err
|
||||
|
||||
|
||||
class LXDContainerDirectories(object):
|
||||
|
||||
@@ -299,7 +319,24 @@ class LXDContainerDirectories(object):
|
||||
'rootfs')
|
||||
|
||||
def get_container_rescue(self, instance):
|
||||
return os.path.join(CONF.lxd.root_dir,
|
||||
'containers',
|
||||
'%s-backup' % instance,
|
||||
'rootfs')
|
||||
if self.is_lvm(instance):
|
||||
return os.path.join(CONF.lxd.root_dir,
|
||||
'containers',
|
||||
instance)
|
||||
else:
|
||||
return os.path.join(CONF.lxd.root_dir,
|
||||
'containers',
|
||||
instance,
|
||||
'rootfs')
|
||||
|
||||
def get_container_lvm(self, instance):
|
||||
return '%s/%s.lv' % (self.get_container_dir(instance),
|
||||
instance)
|
||||
|
||||
def is_lvm(self, instance):
|
||||
try:
|
||||
if os.path.exists(os.readlink(
|
||||
self.get_container_lvm(instance))):
|
||||
return True
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user