Bacula-users

[Bacula-users] Bacula's python interface

2011-06-21 18:39:12
Subject: [Bacula-users] Bacula's python interface
From: Stuart McGraw <smcg4191 AT frii DOT com>
To: bacula-users AT lists.sourceforge DOT net
Date: Tue, 21 Jun 2011 16:35:50 -0600
Hello All,

I am trying to use the Python scripting facility in Bacula.

An initial test (in the JobEvents class per the DirStartup.py
example file distributed with Bacula)...

  def NewVolume(self, job):
     job.JobReport = "Python: in NewLabel method (1)"
     job.JobReport = "Python: in NewLabel method (2)"
     print "Python: in NewLabel method (3)"
     job.VolumeName = str(job.JobId) + ".bac"
     return 1

produces the log output:

  21-Jun 14:53 soga-dir JobId 1397: Start Backup JobId 1397, 
Job=SogaBkup.2011-06-21_14.53.12_03
  21-Jun 14:53 soga-dir JobId 1397: Python: in NewLabel method (1)
  21-Jun 14:53 soga-dir JobId 1397: Using Device "FileStorage"
  21-Jun 14:53 soga-sd JobId 1397: Labeled new Volume "1397.bac" on device 
"FileStorage" (/d2/bacula/new).
  ...

1. What happened to the "Python: in NewLabel method (2)" message?!

The examples file clearly shows multiple uses of job.JobReport.
(And secondarily, I presume .JobReport is a Python property, yes?
Otherwise, were it an ordinary Python attribute, multiple assignments
would not only be ineffective, but the last assignment, not the 
first, would win.) 

What is wrong with either: a) my code, or b) my understanding,
or c) Bacula?

2. What happened to the "Python: in NewLabel method (3)" message?

Again, the examples show print statements being used but the
documentation is silent on what effect they have.  One could
guess looking at the 
      sys.stdout = events          # send stdout to Bacula
line in the example BaculaEvents.JobStart method that they also 
go to the log, but then what is the difference between "print"
and JobReport?

If anyone has used the Python interface and can shine some
enlightenment on me, I will be very grateful.

~~~~
Using Bacula 5.0.3, Python 2.7.1, both as packaged by Fedora-15.
Here is my entire DirStartup.py file for reference:

import sys, bacula

class BaculaEvents(object):
  def __init__(self): pass
  def JobEnd(self, job): pass
  def Exit(self, job): pass
  def JobStart(self, job):
     events = JobEvents()         # create instance of Job class
     events.job = job             # save Bacula's job pointer
     job.set_events(events)       # register events desired
     sys.stderr = events          # send error output to Bacula
     sys.stdout = events          # send stdout to Bacula
     
bacula.set_events(BaculaEvents()) # register daemon events desired

class JobEvents(object):
  def __init__(self): pass
  def JobInit(self, job): pass
  def JobRun(self, job): pass
  def VolumePurged(self, job): pass
  def write(self, text): pass  [*]
  def open(self, file): pass
  def read(self, mem): pass
  def close(self): pass
  def NewVolume(self, job):
     job.JobReport = "Python: in NewLabel method (1)"
     job.JobReport = "Python: in NewLabel method (2)"
     print "Python: in NewLabel method (3)"
     job.VolumeName = str(job.JobId) + ".bac"
     return 1

[*] I tried this as "pass" as shown and also as defined in
the examples file, "self.job.write(text)", but it made no
difference in the results above.

------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
Bacula-users mailing list
Bacula-users AT lists.sourceforge DOT net
https://lists.sourceforge.net/lists/listinfo/bacula-users

<Prev in Thread] Current Thread [Next in Thread>
  • [Bacula-users] Bacula's python interface, Stuart McGraw <=