32
32
name ='Post install plugin'
34
34
def register_options(self):
35
group = self.vm.setting_group('Post install actions')
35
group = self.context.setting_group('Post install actions')
36
36
group.add_option('--copy', metavar='FILE', help="Read 'source dest' lines from FILE, copying source files from host to dest in the guest's file system.")
37
37
group.add_option('--execscript', '--exec', metavar='SCRIPT', help="Run SCRIPT after distro installation finishes. Script will be called with the guest's chroot as first argument, so you can use 'chroot $1 <cmd>' to run code in the virtual machine.")
38
self.vm.register_setting_group(group)
38
self.context.register_setting_group(group)
40
40
def preflight_check(self):
42
logging.debug("Checking if --copy PATH exists: %s" % self.vm.copy)
43
if not(os.path.isfile(self.vm.copy)):
44
raise VMBuilderUserError('The path to the --copy directives is invalid: %s. Make sure you are providing a full path.' % self.vm.copy)
42
logging.debug("Checking if --copy PATH exists: %s" % self.context.copy)
43
if not(os.path.isfile(self.context.copy)):
44
raise VMBuilderUserError('The path to the --copy directives is invalid: %s. Make sure you are providing a full path.' % self.context.copy)
46
if self.vm.execscript:
47
logging.debug("Checking if --exec PATH exists: %s" % self.vm.execscript)
48
if not(os.path.isfile(self.vm.execscript)):
49
raise VMBuilderUserError('The path to the --execscript file is invalid: %s. Make sure you are providing a full path.' % self.vm.execscript)
46
if self.context.execscript:
47
logging.debug("Checking if --exec PATH exists: %s" % self.context.execscript)
48
if not(os.path.isfile(self.context.execscript)):
49
raise VMBuilderUserError('The path to the --execscript file is invalid: %s. Make sure you are providing a full path.' % self.context.execscript)
51
logging.debug("Checking permissions of --exec PATH: %s" % self.vm.execscript)
52
if not os.access(self.vm.execscript, os.X_OK|os.R_OK):
53
raise VMBuilderUserError('The path to the --execscript file has invalid permissions: %s. Make sure the path is readable and executable.' % self.vm.execscript)
51
logging.debug("Checking permissions of --exec PATH: %s" % self.context.execscript)
52
if not os.access(self.context.execscript, os.X_OK|os.R_OK):
53
raise VMBuilderUserError('The path to the --execscript file has invalid permissions: %s. Make sure the path is readable and executable.' % self.context.execscript)
55
55
def post_install(self):
57
logging.info("Copying files specified by --copy in: %s" % self.vm.copy)
57
logging.info("Copying files specified by --copy in: %s" % self.context.copy)
59
for line in file(self.vm.copy):
59
for line in file(self.context.copy):
60
60
pair = line.strip().split(' ')
61
61
if len(pair) < 2: # skip blank and incomplete lines
63
util.run_cmd('cp', '-LpR', pair[0], '%s%s' % (self.vm.installdir, pair[1]))
63
util.run_cmd('cp', '-LpR', pair[0], '%s%s' % (self.context.installdir, pair[1]))
65
65
except IOError, (errno, strerror):
66
66
raise VMBuilderUserError("%s executing --copy directives: %s" % (errno, strerror))
68
if self.vm.execscript:
69
logging.info("Executing script: %s" % self.vm.execscript)
70
util.run_cmd(self.vm.execscript, self.vm.installdir)
68
if self.context.execscript:
69
logging.info("Executing script: %s" % self.context.execscript)
70
util.run_cmd(self.context.execscript, self.vm.installdir)
74
register_plugin(postinst)
74
#register_plugin(postinst)