Exemplo n.º 1
0
    def __init__(self, plugins, lvm_conf, buildroot):
        if not util.original_ipc_ns or not util.have_setns:
            raise LvmError("Cannot initialize setns support, which is "
                           "needed by LVM plugin")
        self.buildroot = buildroot
        self.lvm_conf = lvm_conf
        self.vg_name = lvm_conf.get('volume_group')
        self.conf_id = '{0}.{1}'.format(self.prefix,
                                        buildroot.shared_root_name)
        self.pool_name = lvm_conf.get('pool_name', self.conf_id)
        self.ext = self.buildroot.config.get('unique-ext', 'head')
        self.head_lv = '+{0}.{1}'.format(self.conf_id, self.ext)
        self.fs_type = lvm_conf.get('filesystem', 'ext4')
        self.root_path = os.path.realpath(self.buildroot.make_chroot_path())
        if not self.vg_name:
            raise LvmError("Volume group must be specified")

        snapinfo_name = '.snapinfo-{0}.{1}'.format(self.conf_id, self.ext)
        self.basepath = buildroot.mockdir
        self.snap_info = os.path.join(self.basepath, snapinfo_name)
        self.lock = self.create_lock('lvm')
        self.pool_lock = self.create_lock('lmv-pool')
        self.mount = None

        prefix = 'hook_'
        for member in dir(self):
            if member.startswith(prefix):
                method = getattr(self, member)
                hook_name = member[len(prefix):]
                plugins.add_hook(hook_name, method)
Exemplo n.º 2
0
 def hook_remove_snapshot(self, name):
     if name == self.postinit_name:
         raise LvmError(dedent("""\
                 Won't remove postinit snapshot. To remove all logical
                 volumes associated with this buildroot, use --scrub lvm"""))
     lv_name = self.prefix_name(name)
     if not self.lv_is_our(lv_name):
         raise LvmError("Snapshot {0} doesn't exist".format(name))
     self.umount()
     if lv_name == self.get_current_snapshot():
         self.set_current_snapshot(self.prefix_name(self.postinit_name))
     lvm_do(['lvremove', '-f', self.vg_name + '/' + lv_name])
     self.buildroot.root_log.info("deleted {name} snapshot".format(name=name))
Exemplo n.º 3
0
 def make_snapshot(self, name):
     if self.lv_exists(name):
         raise LvmError(
             "Snapshot {name} already exists".format(name=self.remove_prefix(name)))
     lvcreate = ['lvcreate', '-s', self.vg_name + '/' + self.head_lv, '-n', name]
     lvm_do(lvcreate)
     self.set_current_snapshot(name)
Exemplo n.º 4
0
 def check_pool_size(self):
     size_data = self.allocated_pool_data()
     size_metadata = self.allocated_pool_metadata()
     self.buildroot.root_log.info("LVM plugin enabled. Allocated pool data: {0}%. Allocated metadata: {1}%.".format(size_data, size_metadata))
     if (('check_size' not in self.lvm_conf) or (('check_size' in self.lvm_conf) and (self.lvm_conf['check_size']))) and \
        ((size_metadata and size_metadata > 90) or (size_data and size_data > 90)):
         raise LvmError("Thin pool {0}/{1} is over 90%. Please enlarge it.".format(self.vg_name, self.pool_name))
     else:
         if size_metadata and size_metadata > 75:
             self.buildroot.root_log.warning("LVM Thin pool metadata are nearly filled up ({0}%). You may experience weird errors. Consider growing up your thin pool.".format(size_data))
         if size_data and size_data > 75:
             self.buildroot.root_log.warning("LVM Thin pool is nearly filled up ({0}%). You may experience weird errors. Consider growing up your thin pool.".format(size_data))
Exemplo n.º 5
0
 def set_current_snapshot(self, name):
     if not self.lv_is_our(name):
         raise LvmError("Snapshot {0} doesn't exist".format(
             self.remove_prefix(name)))
     with open(self.snap_info, 'w') as ac_record:
         ac_record.write(name)