2 # Bacula Python interface script for the Director
5 # You must import both sys and bacula
8 # This is the list of Bacula daemon events that you
10 class BaculaEvents(object):
12 # Called here when a new Bacula Events class is
13 # is created. Normally not used
16 def JobStart(self, job):
18 Called here when a new job is started. If you want
19 to do anything with the Job, you must register
20 events you want to receive.
22 events = JobEvents() # create instance of Job class
23 events.job = job # save Bacula's job pointer
24 job.set_events(events) # register events desired
25 sys.stderr = events # send error output to Bacula
26 sys.stdout = events # send stdout to Bacula
27 jobid = job.JobId; client = job.Client
29 job.JobReport="Python Dir JobStart: JobId=%d Client=%s NumVols=%d\n" % (jobid,client,numvols)
31 # Bacula Job is going to terminate
32 def JobEnd(self, job):
35 job.JobReport="Python Dir JobEnd output: JobId=%d Status=%s Client=%s.\n" % (jobid, job.JobStatus, client)
37 # Called here when the Bacula daemon is going to exit
39 print "Daemon exiting."
41 bacula.set_events(BaculaEvents()) # register daemon events desired
44 There are the Job events that you can receive.
46 class JobEvents(object):
48 # Called here when you instantiate the Job. Not
52 def JobInit(self, job):
55 startid = job.run("run kernsave")
56 job.JobReport = "Python started new Job: jobid=%d\n" % startid
57 print "name=%s version=%s conf=%s working=%s" % (bacula.Name, bacula.Version, bacula.ConfigFile, bacula.WorkingDir)
59 def JobRun(self, job):
62 def NewVolume(self, job):
67 job.JobReport = "JobId=%d Client=%s NumVols=%d" % (jobid, client, numvol)
68 job.JobReport="Python before New Volume set for Job.\n"
69 Vol = "TestA-%d" % numvol
70 job.JobReport = "Exists=%d TestA-%d" % (job.DoesVolumeExist(Vol), numvol)
71 job.VolumeName="TestA-%d" % numvol
72 job.JobReport="Python after New Volume set for Job.\n"
75 def VolumePurged(self, job):
78 # Pass output back to Bacula
79 def write(self, text):
82 # Open file to be backed up. file is the filename
85 print "Open %s called" % file
86 self.fd = open('m.py', 'rb')
87 jobid = self.job.JobId
88 print "Open: JobId=%d" % jobid
90 # Read file data into Bacula memory buffer (mem)
91 # return length read. 0 => EOF, -1 => error
95 len = self.fd.readinto(mem)
96 print "Read %s bytes into mem.\n" % len
100 # NOT YET IMPLEMENTED