source: trunk/scripts/lvm-backup-reader/lvm-backup-reader.py @ 2955

Last change on this file since 2955 was 2270, checked in by iannucci, 16 years ago

LVM metadata reader script in lvm-backup-reader

  • Property svn:executable set to *
File size: 1.4 KB
RevLine 
[2270]1import re
2
3def complete(value):
4    if value.startswith('[') and not value.endswith(']'):
5        return False
6    return True
7
8def interpret(value):
9    return eval(value) # good enough for now
10
11class Metadata:
12    def __init__(self, fn):
13        self.text = open(fn, 'r').read()
14        lines = filter(lambda l: not l.startswith("#") and not l.strip()=='', self.text.splitlines())
15        d = {}
16        parent = []
17        node = d
18        mode = 0
19        for l in lines:
20            if mode == 0:
21                if l.strip() == '}':
22                    node = parent[-1]
23                    del parent[-1]
24                elif l.strip().endswith('{'):
25                    name = l.strip()[:-1].strip()
26                    parent.append(node)
27                    child = {}
28                    node[name] = child
29                    node = child
30                else:
31                    key, value = re.search(r'\t*(\S*) = (.*?)(\s*# .*)?$', l).groups()[0:2]
32                    if not complete(value):
33                        mode = 1
34                    else:
35                        node[key] = interpret(value)
36            elif mode == 1:
37                value += re.search(r'\t*(.*?)( *# .*)?$', l).group(0).strip()
38                if complete(value):
39                    node[key] = interpret(value)
40                    mode = 0
41        self.d = d
42
43import pprint
44pprint.pprint(Metadata('xenvg-backup').d)
Note: See TracBrowser for help on using the repository browser.