Updated chroot's cleanup function
[tools/mic.git] / micng / configmgr.py
1 #!/usr/bin/python -t
2
3 import os
4 import sys
5 import logging
6 import micng.utils as utils
7
8 DEFAULT_OUTDIR='.'
9 DEFAULT_TMPDIR='/var/tmp'
10 DEFAULT_CACHEDIR='/var/cache'
11 DEFAULT_GSITECONF='/etc/micng/micng.conf'
12
13 class ConfigMgr(object):
14     def __init__(self, siteconf=None, ksconf=None):
15         self.common = {}
16         self.create = {}
17         self.convert = {}
18         self.chroot = {}
19
20         self.siteconf = siteconf
21         self.ksconf = ksconf
22
23         self.create["tmpdir"] = DEFAULT_TMPDIR
24         self.create["cachedir"] = DEFAULT_CACHEDIR
25         self.create["outdir"] = DEFAULT_OUTDIR
26
27         self.init_siteconf(self.siteconf)
28         self.init_kickstart(self.ksconf)
29
30     def init_siteconf(self, siteconf = None):
31         from ConfigParser import SafeConfigParser
32         siteconf_parser = SafeConfigParser()
33         siteconf_files = [DEFAULT_GSITECONF]
34
35         if not os.path.exists(DEFAULT_GSITECONF):
36             logging.debug("Not exists file: %s" % DEFAULT_GSITECONF)
37             return
38
39         if siteconf:
40             self.siteconf = siteconf
41             siteconf_files = [self.siteconf]
42         siteconf_parser.read(siteconf_files)
43
44         for option in siteconf_parser.options('common'):
45             value = siteconf_parser.get('common', option)
46             self.common[option] = value
47
48         for option in siteconf_parser.options('create'):
49             value = siteconf_parser.get('create', option)
50             self.create[option] = value
51
52         for option in siteconf_parser.options('convert'):
53             value = siteconf_parser.get('convert', option)
54             self.convert[option] = value
55
56         for option in siteconf_parser.options('chroot'):
57             value = siteconf_parser.get('chroot', option)
58             self.chroot[option] = value
59
60
61     def init_kickstart(self, ksconf=None):
62         if not ksconf:
63             self.create['ks'] = None
64             self.create['repomd'] = None
65             return
66         self.ksconf = ksconf
67         try:
68             self.kickstart = utils.kickstart.read_kickstart(self.ksconf)
69             self.ksrepos = utils.misc.get_repostrs_from_ks(self.kickstart)
70             print "retrieving repo metadata..."
71             self.repometadata = utils.misc.get_metadata_from_repos(self.ksrepos, self.create['cachedir'])
72             self.create['ks'] = self.kickstart
73             self.create['repomd'] = self.repometadata
74             self.create['name'] = os.path.splitext(os.path.basename(ksconf))[0]
75         except OSError, e:
76             raise Exception("failed to create image: %s" % e)
77         except Exception, e:
78             raise Exception("unable to load kickstart file '%s': %s" % (self.ksconf, e))
79
80
81     def setProperty(self, name, value):
82         if not hasattr(self, name):
83             return None
84
85         if name == 'ksconf':
86             self.init_kickstart(value)
87             return True
88
89         if name == 'siteconf':
90             self.init_siteconf(value)
91             return True
92
93         return setattr(self, name, value)
94
95     def getProperty(self, name):
96         if not hasattr(self, name):
97             return None
98         return getattr(self, name)
99
100     def setCategoryProperty(self, category, name, value):
101         if not hasattr(self, category):
102             raise Exception("Error to parse %s", category)
103         categ = getattr(self, category)
104         categ[name] = value
105
106     def getCategoryProperty(self, category, name):
107         if not hasattr(self, category):
108             raise Exception("Error to parse %s", category)
109         categ = getattr(self, category)
110         return categ[name]
111
112     def getCreateOption(self, name):
113         if not self.create.has_key(name):
114             raise Exception("Attribute Error: not such attribe %s" % name)
115         return self.create[name]
116
117     def getConvertOption(self, name):
118         if not self.convert.has_key(name):
119             raise Exception("Attribute Error: not such attribe %s" % name)
120         return self.convert[name]
121
122     def getChrootOption(self, name):
123         if not self.chroot.has_key(name):
124             raise Exception("Attribute Error: not such attribe %s" % name)
125         return self.chroot[name]
126
127     def dumpAllConfig(self):
128         sys.stdout.write("create options:\n")
129         for key in self.create.keys():
130             sys.stdout.write("%-8s= %s\n" % (key, self.create[key]))
131         sys.stdout.write("convert options:\n")
132         for key in self.convert.keys():
133             sys.stdout.write("%-8s= %s\n" % (key, self.ccnvert[key]))
134         sys.stdout.write("chroot options:\n")
135         for key in self.chroot.keys():
136             sys.stdout.write("%-8s= %s\n" % (key, self.chroot[key]))
137
138 def getConfigMgr():
139     return configmgr
140
141 configmgr = ConfigMgr()
142