1 |
Rename snapshot_target to snapshot |
2 |
--- |
3 |
catalyst/main.py | 75 +++++++++--------------- |
4 |
catalyst/targets/embedded_target.py | 4 -- |
5 |
catalyst/targets/grp_target.py | 4 -- |
6 |
catalyst/targets/livecd_stage1_target.py | 4 -- |
7 |
catalyst/targets/livecd_stage2_target.py | 4 -- |
8 |
catalyst/targets/netboot2_target.py | 4 -- |
9 |
catalyst/targets/netboot_target.py | 4 -- |
10 |
catalyst/targets/snapshot.py | 93 ++++++++++++++++++++++++++++++ |
11 |
catalyst/targets/snapshot_target.py | 97 -------------------------------- |
12 |
catalyst/targets/stage1_target.py | 4 -- |
13 |
catalyst/targets/stage2_target.py | 4 -- |
14 |
catalyst/targets/stage3_target.py | 4 -- |
15 |
catalyst/targets/stage4_target.py | 5 -- |
16 |
catalyst/targets/tinderbox_target.py | 4 -- |
17 |
14 files changed, 119 insertions(+), 191 deletions(-) |
18 |
create mode 100644 catalyst/targets/snapshot.py |
19 |
delete mode 100644 catalyst/targets/snapshot_target.py |
20 |
|
21 |
diff --git a/catalyst/main.py b/catalyst/main.py |
22 |
index 15664de..1446cf9 100644 |
23 |
--- a/catalyst/main.py |
24 |
+++ b/catalyst/main.py |
25 |
@@ -16,21 +16,20 @@ import os.path |
26 |
|
27 |
__selfpath__ = os.path.abspath(os.path.dirname(__file__)) |
28 |
|
29 |
-sys.path.append(__selfpath__ + "/modules") |
30 |
|
31 |
from . import __version__ |
32 |
import catalyst.config |
33 |
import catalyst.util |
34 |
+from catalyst.contents import ContentsMap, CONTENTS_DEFINITIONS |
35 |
+from catalyst.defaults import confdefaults, option_messages |
36 |
+from catalyst.hash_utils import HashMap, HASH_DEFINITIONS |
37 |
from catalyst.lock import LockInUse |
38 |
from catalyst.support import CatalystError, find_binary |
39 |
-from catalyst.defaults import (confdefaults, option_messages, |
40 |
- required_build_targets, valid_build_targets) |
41 |
-from hash_utils import HashMap, HASH_DEFINITIONS |
42 |
-from contents import ContentsMap, CONTENTS_DEFINITIONS |
43 |
|
44 |
|
45 |
conf_values={} |
46 |
|
47 |
+ |
48 |
def usage(): |
49 |
print """Usage catalyst [options] [-C variable=value...] [ -s identifier] |
50 |
-a --clear-autoresume clear autoresume flags |
51 |
@@ -135,59 +134,40 @@ def parse_config(myconfig): |
52 |
print "Envscript support enabled." |
53 |
|
54 |
|
55 |
-def import_modules(): |
56 |
- # import catalyst's own modules |
57 |
- # (i.e. stage and the arch modules) |
58 |
- targetmap={} |
59 |
- |
60 |
+def import_module(target): |
61 |
+ """ |
62 |
+ import catalyst's own modules |
63 |
+ (i.e. targets and the arch modules) |
64 |
+ """ |
65 |
try: |
66 |
- module_dir = __selfpath__ + "/targets/" |
67 |
- for x in required_build_targets: |
68 |
- try: |
69 |
- fh=open(module_dir + x + ".py") |
70 |
- module=imp.load_module(x, fh,"targets/" + x + ".py", |
71 |
- (".py", "r", imp.PY_SOURCE)) |
72 |
- fh.close() |
73 |
- |
74 |
- except IOError: |
75 |
- raise CatalystError, "Can't find " + x + ".py plugin in " + \ |
76 |
- module_dir |
77 |
- for x in valid_build_targets: |
78 |
- try: |
79 |
- fh=open(module_dir + x + ".py") |
80 |
- module=imp.load_module(x, fh, "targets/" + x + ".py", |
81 |
- (".py", "r", imp.PY_SOURCE)) |
82 |
- module.register(targetmap) |
83 |
- fh.close() |
84 |
- |
85 |
- except IOError: |
86 |
- raise CatalystError,"Can't find " + x + ".py plugin in " + \ |
87 |
- module_dir |
88 |
- |
89 |
+ mod_name = "catalyst.targets." + target |
90 |
+ module = __import__(mod_name, [],[], ["not empty"]) |
91 |
except ImportError as e: |
92 |
- print "!!! catalyst: Python modules not found in "+\ |
93 |
- module_dir + "; exiting." |
94 |
- print e |
95 |
+ print "!!! catalyst: Python module import error: %s " % target + \ |
96 |
+ "in catalyst/targets/ ... exiting." |
97 |
+ print "ERROR was: ", e |
98 |
sys.exit(1) |
99 |
+ return module |
100 |
|
101 |
- return targetmap |
102 |
|
103 |
-def build_target(addlargs, targetmap): |
104 |
+def build_target(addlargs): |
105 |
try: |
106 |
- if addlargs["target"] not in targetmap: |
107 |
- raise CatalystError,"Target \""+addlargs["target"]+"\" not available." |
108 |
- |
109 |
- mytarget=targetmap[addlargs["target"]](conf_values, addlargs) |
110 |
- |
111 |
- mytarget.run() |
112 |
+ module = import_module(addlargs["target"]) |
113 |
+ target = getattr(module, addlargs["target"])(conf_values, addlargs) |
114 |
+ except AttributeError: |
115 |
+ raise CatalystError( |
116 |
+ "Target \"%s\" not available." % addlargs["target"], |
117 |
+ print_traceback=True) |
118 |
|
119 |
+ try: |
120 |
+ target.run() |
121 |
except: |
122 |
+ print "Target run() exception: Python traceback output follows:" |
123 |
catalyst.util.print_traceback() |
124 |
print "!!! catalyst: Error encountered during run of target " + addlargs["target"] |
125 |
sys.exit(1) |
126 |
|
127 |
def main(): |
128 |
- targetmap={} |
129 |
|
130 |
version() |
131 |
if os.getuid() != 0: |
132 |
@@ -341,9 +321,6 @@ def main(): |
133 |
print "Catalyst aborting...." |
134 |
sys.exit(2) |
135 |
|
136 |
- # import the rest of the catalyst modules |
137 |
- targetmap=import_modules() |
138 |
- |
139 |
addlargs={} |
140 |
|
141 |
if myspecfile: |
142 |
@@ -364,7 +341,7 @@ def main(): |
143 |
|
144 |
# everything is setup, so the build is a go |
145 |
try: |
146 |
- build_target(addlargs, targetmap) |
147 |
+ build_target(addlargs) |
148 |
|
149 |
except CatalystError: |
150 |
print |
151 |
diff --git a/catalyst/targets/embedded_target.py b/catalyst/targets/embedded_target.py |
152 |
index 528d545..aee0f00 100644 |
153 |
--- a/catalyst/targets/embedded_target.py |
154 |
+++ b/catalyst/targets/embedded_target.py |
155 |
@@ -45,7 +45,3 @@ class embedded_target(StageBase): |
156 |
def set_root_path(self): |
157 |
self.settings["root_path"]=normpath("/tmp/mergeroot") |
158 |
print "embedded root path is "+self.settings["root_path"] |
159 |
- |
160 |
-def register(foo): |
161 |
- foo.update({"embedded":embedded_target}) |
162 |
- return foo |
163 |
diff --git a/catalyst/targets/grp_target.py b/catalyst/targets/grp_target.py |
164 |
index deba80a..e3f08a2 100644 |
165 |
--- a/catalyst/targets/grp_target.py |
166 |
+++ b/catalyst/targets/grp_target.py |
167 |
@@ -118,7 +118,3 @@ class grp_target(StageBase): |
168 |
"config_profile_link","setup_confdir","portage_overlay","bind","chroot_setup",\ |
169 |
"setup_environment","run_local","unbind",\ |
170 |
"generate_digests","clear_autoresume"] |
171 |
- |
172 |
-def register(foo): |
173 |
- foo.update({"grp":grp_target}) |
174 |
- return foo |
175 |
diff --git a/catalyst/targets/livecd_stage1_target.py b/catalyst/targets/livecd_stage1_target.py |
176 |
index a19f4ac..9c74253 100644 |
177 |
--- a/catalyst/targets/livecd_stage1_target.py |
178 |
+++ b/catalyst/targets/livecd_stage1_target.py |
179 |
@@ -76,7 +76,3 @@ class livecd_stage1_target(StageBase): |
180 |
self.settings["pkgcache_path"]=normpath(string.join(self.settings["pkgcache_path"])) |
181 |
else: |
182 |
StageBase.set_pkgcache_path(self) |
183 |
- |
184 |
-def register(foo): |
185 |
- foo.update({"livecd-stage1":livecd_stage1_target}) |
186 |
- return foo |
187 |
diff --git a/catalyst/targets/livecd_stage2_target.py b/catalyst/targets/livecd_stage2_target.py |
188 |
index e7ae212..a4630e6 100644 |
189 |
--- a/catalyst/targets/livecd_stage2_target.py |
190 |
+++ b/catalyst/targets/livecd_stage2_target.py |
191 |
@@ -145,7 +145,3 @@ class livecd_stage2_target(StageBase): |
192 |
"unbind","remove","empty","target_setup",\ |
193 |
"setup_overlay","create_iso"] |
194 |
self.settings["action_sequence"].append("clear_autoresume") |
195 |
- |
196 |
-def register(foo): |
197 |
- foo.update({"livecd-stage2":livecd_stage2_target}) |
198 |
- return foo |
199 |
diff --git a/catalyst/targets/netboot2_target.py b/catalyst/targets/netboot2_target.py |
200 |
index 987afd8..130e2b6 100644 |
201 |
--- a/catalyst/targets/netboot2_target.py |
202 |
+++ b/catalyst/targets/netboot2_target.py |
203 |
@@ -167,7 +167,3 @@ class netboot2_target(StageBase): |
204 |
"setup_environment","build_packages","root_overlay",\ |
205 |
"copy_files_to_image","setup_overlay","build_kernel","move_kernels",\ |
206 |
"remove","empty","unbind","clean","clear_autoresume"] |
207 |
- |
208 |
-def register(foo): |
209 |
- foo.update({"netboot2":netboot2_target}) |
210 |
- return foo |
211 |
diff --git a/catalyst/targets/netboot_target.py b/catalyst/targets/netboot_target.py |
212 |
index c880289..9d92ef2 100644 |
213 |
--- a/catalyst/targets/netboot_target.py |
214 |
+++ b/catalyst/targets/netboot_target.py |
215 |
@@ -127,7 +127,3 @@ class netboot_target(StageBase): |
216 |
"setup_environment","build_packages","build_busybox",\ |
217 |
"build_kernel","copy_files_to_image",\ |
218 |
"clean","create_netboot_files","unbind","clear_autoresume"] |
219 |
- |
220 |
-def register(foo): |
221 |
- foo.update({"netboot":netboot_target}) |
222 |
- return foo |
223 |
diff --git a/catalyst/targets/snapshot.py b/catalyst/targets/snapshot.py |
224 |
new file mode 100644 |
225 |
index 0000000..6c2396e |
226 |
--- /dev/null |
227 |
+++ b/catalyst/targets/snapshot.py |
228 |
@@ -0,0 +1,93 @@ |
229 |
+""" |
230 |
+Snapshot target |
231 |
+""" |
232 |
+ |
233 |
+import os |
234 |
+import shutil |
235 |
+from stat import ST_UID, ST_GID, ST_MODE |
236 |
+ |
237 |
+ |
238 |
+from catalyst.support import normpath, cmd |
239 |
+from catalyst.base.targetbase import TargetBase |
240 |
+from catalyst.base.genbase import GenBase |
241 |
+ |
242 |
+class snapshot(TargetBase, GenBase): |
243 |
+ """ |
244 |
+ Builder class for snapshots. |
245 |
+ """ |
246 |
+ def __init__(self,myspec,addlargs): |
247 |
+ self.required_values=["version_stamp","target"] |
248 |
+ self.valid_values=["version_stamp","target"] |
249 |
+ |
250 |
+ TargetBase.__init__(self, myspec, addlargs) |
251 |
+ GenBase.__init__(self,myspec) |
252 |
+ #self.settings=myspec |
253 |
+ self.settings["target_subpath"]="portage" |
254 |
+ st=self.settings["storedir"] |
255 |
+ self.settings["snapshot_path"] = normpath(st + "/snapshots/" |
256 |
+ + self.settings["snapshot_name"] |
257 |
+ + self.settings["version_stamp"] + ".tar.bz2") |
258 |
+ self.settings["tmp_path"]=normpath(st+"/tmp/"+self.settings["target_subpath"]) |
259 |
+ |
260 |
+ def setup(self): |
261 |
+ x=normpath(self.settings["storedir"]+"/snapshots") |
262 |
+ if not os.path.exists(x): |
263 |
+ os.makedirs(x) |
264 |
+ |
265 |
+ def mount_safety_check(self): |
266 |
+ pass |
267 |
+ |
268 |
+ def run(self): |
269 |
+ if "purgeonly" in self.settings["options"]: |
270 |
+ self.purge() |
271 |
+ return |
272 |
+ |
273 |
+ if "purge" in self.settings["options"]: |
274 |
+ self.purge() |
275 |
+ |
276 |
+ self.setup() |
277 |
+ print "Creating Portage tree snapshot "+self.settings["version_stamp"]+\ |
278 |
+ " from "+self.settings["portdir"]+"..." |
279 |
+ |
280 |
+ mytmp=self.settings["tmp_path"] |
281 |
+ if not os.path.exists(mytmp): |
282 |
+ os.makedirs(mytmp) |
283 |
+ |
284 |
+ cmd("rsync -a --delete --exclude /packages/ --exclude /distfiles/ " + |
285 |
+ "--exclude /local/ --exclude CVS/ --exclude .svn --filter=H_**/files/digest-* " + |
286 |
+ self.settings["portdir"] + "/ " + mytmp + "/%s/" % self.settings["repo_name"], |
287 |
+ "Snapshot failure", env=self.env) |
288 |
+ |
289 |
+ print "Compressing Portage snapshot tarball..." |
290 |
+ cmd("tar -I lbzip2 -cf " + self.settings["snapshot_path"] + " -C " + |
291 |
+ mytmp + " " + self.settings["repo_name"], |
292 |
+ "Snapshot creation failure",env=self.env) |
293 |
+ |
294 |
+ self.gen_contents_file(self.settings["snapshot_path"]) |
295 |
+ self.gen_digest_file(self.settings["snapshot_path"]) |
296 |
+ |
297 |
+ self.cleanup() |
298 |
+ print "snapshot: complete!" |
299 |
+ |
300 |
+ def kill_chroot_pids(self): |
301 |
+ pass |
302 |
+ |
303 |
+ def cleanup(self): |
304 |
+ print "Cleaning up..." |
305 |
+ |
306 |
+ def purge(self): |
307 |
+ myemp=self.settings["tmp_path"] |
308 |
+ if os.path.isdir(myemp): |
309 |
+ print "Emptying directory",myemp |
310 |
+ """ |
311 |
+ stat the dir, delete the dir, recreate the dir and set |
312 |
+ the proper perms and ownership |
313 |
+ """ |
314 |
+ mystat=os.stat(myemp) |
315 |
+ """ There's no easy way to change flags recursively in python """ |
316 |
+ if os.uname()[0] == "FreeBSD": |
317 |
+ os.system("chflags -R noschg "+myemp) |
318 |
+ shutil.rmtree(myemp) |
319 |
+ os.makedirs(myemp,0755) |
320 |
+ os.chown(myemp,mystat[ST_UID],mystat[ST_GID]) |
321 |
+ os.chmod(myemp,mystat[ST_MODE]) |
322 |
diff --git a/catalyst/targets/snapshot_target.py b/catalyst/targets/snapshot_target.py |
323 |
deleted file mode 100644 |
324 |
index 337ff1d..0000000 |
325 |
--- a/catalyst/targets/snapshot_target.py |
326 |
+++ /dev/null |
327 |
@@ -1,97 +0,0 @@ |
328 |
-""" |
329 |
-Snapshot target |
330 |
-""" |
331 |
- |
332 |
-import os |
333 |
-import shutil |
334 |
-from stat import ST_UID, ST_GID, ST_MODE |
335 |
- |
336 |
- |
337 |
-from catalyst.support import normpath, cmd |
338 |
-from catalyst.base.targetbase import TargetBase |
339 |
-from catalyst.base.genbase import GenBase |
340 |
- |
341 |
-class snapshot_target(TargetBase, GenBase): |
342 |
- """ |
343 |
- Builder class for snapshots. |
344 |
- """ |
345 |
- def __init__(self,myspec,addlargs): |
346 |
- self.required_values=["version_stamp","target"] |
347 |
- self.valid_values=["version_stamp","target"] |
348 |
- |
349 |
- TargetBase.__init__(self, myspec, addlargs) |
350 |
- GenBase.__init__(self,myspec) |
351 |
- #self.settings=myspec |
352 |
- self.settings["target_subpath"]="portage" |
353 |
- st=self.settings["storedir"] |
354 |
- self.settings["snapshot_path"] = normpath(st + "/snapshots/" |
355 |
- + self.settings["snapshot_name"] |
356 |
- + self.settings["version_stamp"] + ".tar.bz2") |
357 |
- self.settings["tmp_path"]=normpath(st+"/tmp/"+self.settings["target_subpath"]) |
358 |
- |
359 |
- def setup(self): |
360 |
- x=normpath(self.settings["storedir"]+"/snapshots") |
361 |
- if not os.path.exists(x): |
362 |
- os.makedirs(x) |
363 |
- |
364 |
- def mount_safety_check(self): |
365 |
- pass |
366 |
- |
367 |
- def run(self): |
368 |
- if "purgeonly" in self.settings["options"]: |
369 |
- self.purge() |
370 |
- return |
371 |
- |
372 |
- if "purge" in self.settings["options"]: |
373 |
- self.purge() |
374 |
- |
375 |
- self.setup() |
376 |
- print "Creating Portage tree snapshot "+self.settings["version_stamp"]+\ |
377 |
- " from "+self.settings["portdir"]+"..." |
378 |
- |
379 |
- mytmp=self.settings["tmp_path"] |
380 |
- if not os.path.exists(mytmp): |
381 |
- os.makedirs(mytmp) |
382 |
- |
383 |
- cmd("rsync -a --delete --exclude /packages/ --exclude /distfiles/ " + |
384 |
- "--exclude /local/ --exclude CVS/ --exclude .svn --filter=H_**/files/digest-* " + |
385 |
- self.settings["portdir"] + "/ " + mytmp + "/%s/" % self.settings["repo_name"], |
386 |
- "Snapshot failure", env=self.env) |
387 |
- |
388 |
- print "Compressing Portage snapshot tarball..." |
389 |
- cmd("tar -I lbzip2 -cf " + self.settings["snapshot_path"] + " -C " + |
390 |
- mytmp + " " + self.settings["repo_name"], |
391 |
- "Snapshot creation failure",env=self.env) |
392 |
- |
393 |
- self.gen_contents_file(self.settings["snapshot_path"]) |
394 |
- self.gen_digest_file(self.settings["snapshot_path"]) |
395 |
- |
396 |
- self.cleanup() |
397 |
- print "snapshot: complete!" |
398 |
- |
399 |
- def kill_chroot_pids(self): |
400 |
- pass |
401 |
- |
402 |
- def cleanup(self): |
403 |
- print "Cleaning up..." |
404 |
- |
405 |
- def purge(self): |
406 |
- myemp=self.settings["tmp_path"] |
407 |
- if os.path.isdir(myemp): |
408 |
- print "Emptying directory",myemp |
409 |
- """ |
410 |
- stat the dir, delete the dir, recreate the dir and set |
411 |
- the proper perms and ownership |
412 |
- """ |
413 |
- mystat=os.stat(myemp) |
414 |
- """ There's no easy way to change flags recursively in python """ |
415 |
- if os.uname()[0] == "FreeBSD": |
416 |
- os.system("chflags -R noschg "+myemp) |
417 |
- shutil.rmtree(myemp) |
418 |
- os.makedirs(myemp,0755) |
419 |
- os.chown(myemp,mystat[ST_UID],mystat[ST_GID]) |
420 |
- os.chmod(myemp,mystat[ST_MODE]) |
421 |
- |
422 |
-def register(foo): |
423 |
- foo.update({"snapshot":snapshot_target}) |
424 |
- return foo |
425 |
diff --git a/catalyst/targets/stage1_target.py b/catalyst/targets/stage1_target.py |
426 |
index 0a36432..2329b58 100644 |
427 |
--- a/catalyst/targets/stage1_target.py |
428 |
+++ b/catalyst/targets/stage1_target.py |
429 |
@@ -94,7 +94,3 @@ class stage1_target(StageBase): |
430 |
self.mounts.append("stage1root/proc") |
431 |
self.target_mounts["stage1root/proc"] = "/tmp/stage1root/proc" |
432 |
self.mountmap["stage1root/proc"] = "/proc" |
433 |
- |
434 |
-def register(foo): |
435 |
- foo.update({"stage1":stage1_target}) |
436 |
- return foo |
437 |
diff --git a/catalyst/targets/stage2_target.py b/catalyst/targets/stage2_target.py |
438 |
index 783d42e..ec6d78d 100644 |
439 |
--- a/catalyst/targets/stage2_target.py |
440 |
+++ b/catalyst/targets/stage2_target.py |
441 |
@@ -62,7 +62,3 @@ class stage2_target(StageBase): |
442 |
print "\tUsing an portage overlay for earlier stages could cause build issues." |
443 |
print "\tIf you break it, you buy it. Don't complain to us about it." |
444 |
print "\tDont say we did not warn you\n" |
445 |
- |
446 |
-def register(foo): |
447 |
- foo.update({"stage2":stage2_target}) |
448 |
- return foo |
449 |
diff --git a/catalyst/targets/stage3_target.py b/catalyst/targets/stage3_target.py |
450 |
index 28021b1..103242d 100644 |
451 |
--- a/catalyst/targets/stage3_target.py |
452 |
+++ b/catalyst/targets/stage3_target.py |
453 |
@@ -25,7 +25,3 @@ class stage3_target(StageBase): |
454 |
|
455 |
def set_cleanables(self): |
456 |
StageBase.set_cleanables(self) |
457 |
- |
458 |
-def register(foo): |
459 |
- foo.update({"stage3":stage3_target}) |
460 |
- return foo |
461 |
diff --git a/catalyst/targets/stage4_target.py b/catalyst/targets/stage4_target.py |
462 |
index 0d725c7..4dbdb45 100644 |
463 |
--- a/catalyst/targets/stage4_target.py |
464 |
+++ b/catalyst/targets/stage4_target.py |
465 |
@@ -36,8 +36,3 @@ class stage4_target(StageBase): |
466 |
if "fetch" not in self.settings['options']: |
467 |
self.settings["action_sequence"].append("capture") |
468 |
self.settings["action_sequence"].append("clear_autoresume") |
469 |
- |
470 |
-def register(foo): |
471 |
- foo.update({"stage4":stage4_target}) |
472 |
- return foo |
473 |
- |
474 |
diff --git a/catalyst/targets/tinderbox_target.py b/catalyst/targets/tinderbox_target.py |
475 |
index 1e245f2..0c389e6 100644 |
476 |
--- a/catalyst/targets/tinderbox_target.py |
477 |
+++ b/catalyst/targets/tinderbox_target.py |
478 |
@@ -45,7 +45,3 @@ class tinderbox_target(StageBase): |
479 |
"config_profile_link","setup_confdir","bind","chroot_setup",\ |
480 |
"setup_environment","run_local","preclean","unbind","clean",\ |
481 |
"clear_autoresume"] |
482 |
- |
483 |
-def register(foo): |
484 |
- foo.update({"tinderbox":tinderbox_target}) |
485 |
- return foo |
486 |
-- |
487 |
2.1.0 |