122 lines
4.1 KiB
Python
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)
|
|
|