コード例 #1
0
def _lvm_conf_configured():
    """
    Return True if lvm local conf is using the correct version or is private,
    otherwise return False.
    """
    try:
        cur_conf = confmeta.read_metadata(_LVMLOCAL_CUR)
    except EnvironmentError as e:
        if e.errno != errno.ENOENT:
            raise
        return False

    if cur_conf.revision is None:
        # LVM installs a default lvmlocal.conf with documention for the "local"
        # section. We backup this file and replace it with vdsm version.
        _log(
            "WARNING: LVM local configuration: %s is not based on vdsm "
            "configuration", _LVMLOCAL_CUR)
        return False

    vdsm_conf = confmeta.read_metadata(_LVMLOCAL_VDSM)
    if cur_conf.private:
        # Using private configuration is ok
        _log("Using private lvm local configuration: %s", _LVMLOCAL_CUR)
        if cur_conf.revision < vdsm_conf.revision:
            # But using outated configuration is not. The admin should update
            # the file revision to avoid this warning.
            _log(
                "WARNING: Installed lvm local configuration: %s was based "
                "on an older revision. Please update the file form vdsm "
                "configuration: %s", _LVMLOCAL_CUR, _LVMLOCAL_VDSM)
        return True

    return vdsm_conf.revision == cur_conf.revision
コード例 #2
0
ファイル: lvm.py プロジェクト: EdDev/vdsm
def _lvm_conf_configured():
    """
    Return True if lvm local conf is using the correct version or is private,
    otherwise return False.
    """
    try:
        cur_conf = confmeta.read_metadata(_LVMLOCAL_CUR)
    except EnvironmentError as e:
        if e.errno != errno.ENOENT:
            raise
        return False

    if cur_conf.revision is None:
        # LVM installs a default lvmlocal.conf with documention for the "local"
        # section. We backup this file and replace it with vdsm version.
        _log("WARNING: LVM local configuration: %s is not based on vdsm "
             "configuration", _LVMLOCAL_CUR)
        return False

    vdsm_conf = confmeta.read_metadata(_LVMLOCAL_VDSM)
    if cur_conf.private:
        # Using private configuration is ok
        _log("Using private lvm local configuration: %s", _LVMLOCAL_CUR)
        if cur_conf.revision < vdsm_conf.revision:
            # But using outated configuration is not. The admin should update
            # the file revision to avoid this warning.
            _log("WARNING: Installed lvm local configuration: %s was based "
                 "on an older revision. Please update the file form vdsm "
                 "configuration: %s", _LVMLOCAL_CUR, _LVMLOCAL_VDSM)
        return True

    return vdsm_conf.revision == cur_conf.revision
コード例 #3
0
 def test_must_start_with_metadata(self):
     data = (b"There is no metadata here\n"
             b"#REVISION: 1\n"
             b"#PRIVATE: YES\n")
     with temporaryPath(data=data) as path:
         md = confmeta.read_metadata(path)
         self.assertEqual(md.revision, None)
         self.assertEqual(md.private, False)
コード例 #4
0
 def test_ignore_file_body(self):
     data = (b"#REVISION: 1\n"
             b"#PRIVATE: YES\n"
             b"REVISION: 2\n"
             b"PRIVATE: NO\n")
     with temporaryPath(data=data) as path:
         md = confmeta.read_metadata(path)
         self.assertEqual(md.revision, 1)
         self.assertEqual(md.private, True)
コード例 #5
0
 def test_order_does_not_matter(self):
     data = (b"# A comment\n"
             b"#PRIVATE: NO\n"
             b"# Another comment\n"
             b"#REVISION: 1\n"
             b"# Last comment\n"
             b"Actual file data...")
     with temporaryPath(data=data) as path:
         md = confmeta.read_metadata(path)
         self.assertEqual(md.revision, 1)
         self.assertEqual(md.private, False)
コード例 #6
0
 def test_no_metadata(self):
     data = (b"# There is no metadata here\n" b"Actual file data...\n")
     with temporaryPath(data=data) as path:
         md = confmeta.read_metadata(path)
         self.assertEqual(md.revision, None)
         self.assertEqual(md.private, False)
コード例 #7
0
 def test_empty(self):
     data = b""
     with temporaryPath(data=data) as path:
         md = confmeta.read_metadata(path)
         self.assertEqual(md.revision, None)
         self.assertEqual(md.private, False)
コード例 #8
0
 def test_no_revision_owned_by_sysadmin(self):
     data = b"#PRIVATE: YES\n"
     with temporaryPath(data=data) as path:
         md = confmeta.read_metadata(path)
         self.assertEqual(md.revision, None)
         self.assertEqual(md.private, True)
コード例 #9
0
 def test_no_revision(self):
     data = b"#PRIVATE: NO\n"
     with temporaryPath(data=data) as path:
         md = confmeta.read_metadata(path)
         self.assertEqual(md.revision, None)
         self.assertEqual(md.private, False)
コード例 #10
0
 def test_owned_by_sysadmin(self):
     data = (b"#REVISION: 1\n" b"#PRIVATE: YES\n")
     with temporaryPath(data=data) as path:
         md = confmeta.read_metadata(path)
         self.assertEqual(md.revision, 1)
         self.assertEqual(md.private, True)
コード例 #11
0
 def test_owned_by_vdsm_by_default(self):
     data = b"#REVISION: 1\n"
     with temporaryPath(data=data) as path:
         md = confmeta.read_metadata(path)
         self.assertEqual(md.revision, 1)
         self.assertEqual(md.private, False)
コード例 #12
0
 def test_invalid_private(self):
     data = (b"#REVISION: 1\n" b"#PRIVATE:\n")
     with temporaryPath(data=data) as path:
         with self.assertRaises(ValueError):
             confmeta.read_metadata(path)
コード例 #13
0
 def test_invalid_revision(self):
     data = (b"#REVISION: invalid\n")
     with temporaryPath(data=data) as path:
         with self.assertRaises(ValueError):
             confmeta.read_metadata(path)
コード例 #14
0
 def test_extra_whitespace(self):
     data = (b"#REVISION:  1   \n" b"#PRIVATE:   NO  \n")
     with temporaryPath(data=data) as path:
         md = confmeta.read_metadata(path)
         self.assertEqual(md.revision, 1)
         self.assertEqual(md.private, False)
コード例 #15
0
 def test_last_value_win(self):
     data = (b"#REVISION: 4\n" b"#REVISION: 3\n" b"#PRIVATE: YES\n")
     with temporaryPath(data=data) as path:
         md = confmeta.read_metadata(path)
         self.assertEqual(md.revision, 3)
         self.assertEqual(md.private, True)
コード例 #16
0
 def test_ignore_unknonwn_tags(self):
     data = (b"#UNKNOWN: VALUE\n" b"#REVISION: 1\n" b"#PRIVATE: YES\n")
     with temporaryPath(data=data) as path:
         md = confmeta.read_metadata(path)
         self.assertEqual(md.revision, 1)
         self.assertEqual(md.private, True)