nova-lxd/nclxd/nova/virt/lxd/config.py

122 lines
4.1 KiB
Python

import os
from oslo.config import cfg
from nova.i18n import _LW
from nova.openstack.common import log as logging
from nova.openstack.common import fileutils
from nova import utils
CONF = cfg.CONF
LOG = logging.getLogger(__name__)
class LXDConfigObject(object):
def __init__(self, **kwargs):
super(LXDConfigObject, self).__init__()
def set_config(self):
pass
class LXDConfigTemplate(LXDConfigObject):
def __init__(self, instance, image_meta):
super(LXDConfigTemplate, self).__init__()
self.instance = instance
self.image_meta = image_meta
def set_config(self):
templates = []
if (self.image_meta and
self.image_meta.get('properties', {}).get('template')):
lxc_template = self.image_meta['properties'].get('template')
else:
lxc_template = CONF.lxd.lxd_default_template
path = os.listdir(CONF.lxd.lxd_template_dir)
for line in path:
templates.append(line.replace('lxc-', ''))
if lxc_template in templates:
config_file = os.path.join(CONF.lxd.lxd_root_dir,
self.instance, 'config')
f = open(config_file, 'w')
f.write('lxc.include = %s/%s.common.conf\n' % (CONF.lxd.lxd_config_dir,
lxc_template))
f.write('lxc.include = %s/%s.userns.conf\n' % (CONF.lxd.lxd_config_dir,
lxc_template))
class LXDConfigSetName(LXDConfigObject):
def __init__(self, container, instance):
super(LXDConfigSetName, self).__init__()
self.container = container
self.instance = instance
def set_config(self):
self.container.append_config_item('lxc.utsname',
self.instance)
class LXDConfigSetRoot(LXDConfigObject):
def __init__(self, container, instance):
super(LXDConfigSetRoot, self).__init__()
self.container = container
self.instance = instance
self.container_rootfs = os.path.join(CONF.lxd.lxd_root_dir,
self.instance,
'rootfs')
def set_config(self):
self.container.append_config_item('lxc.rootfs',
self.container_rootfs)
class LXDConfigSetLog(LXDConfigObject):
def __init__(self, container, instance):
super(LXDConfigSetLog, self).__init__()
self.container = container
self.instance = instance
def set_config(self):
container_logfile = os.path.join(CONF.lxd.lxd_root_dir,
self.instance,
'logfile')
self.container.append_config_item('lxc.logfile',
container_logfile)
class LXDConfigConsole(LXDConfigObject):
def __init__(self, container, instance):
super(LXDConfigConsole, self).__init__()
self.container = container
self.instance = instance
def set_config(self):
console_log = os.path.join(CONF.lxd.lxd_root_dir,
self.instance,
'console.log')
self.container.append_config_item('lxc.console.logfile',
console_log)
utils.execute('touch', console_log)
class LXDUserConfig(LXDConfigObject):
def __init__(self, container, idmap):
super(LXDUserConfig, self).__init__()
self.container = container
self.idmap = idmap
def set_config(self):
for ent in self.idmap.lxc_conf_lines():
self.container.append_config_item(*ent)
class LXDSetLimits(LXDConfigObject):
def __init__(self, container, instance):
super(LXDSetLimits, self).__init__()
self.container = container
self.instance = instance
def set_config(self):
flavor = self.instance.get_flavor()
self.container.append_config_item(
'lxc.cgroup.memory.limit_in_bytes',
'%sM' % flavor.memory_mb)