source: opsi/server/dass-opsi-tools/usr/bin/opsi-bacula-server-conf.py@ 1107

Last change on this file since 1107 was 1105, checked in by joergs, on Sep 21, 2012 at 5:54:40 PM

improvements

  • Property svn:executable set to *
File size: 4.2 KB
Line 
1#!/usr/bin/env python
2
3# get client properties for bacula
4
5import logging
6import subprocess
7import time
8import json
9from pprint import pprint
10
11opsi={
12 'server': "https://opsi.joergs.dass-it:4447/rpc",
13 'username': "joergs",
14 'password': "linuxlinux",
15 }
16
17catalog="MyCatalog"
18
19# "-d"
20opsiCallPrefix=[ "opsi-admin", "-a", opsi['server'], "-u", opsi['username'], "-p", opsi['password'] ]
21
22opsiCallClientsWithBacula=[ "method", "productOnClient_getObjects", "[]", '{"productId":"bacula", "installationStatus": "installed"}']
23
24opsiCallClientBaculaProperties=[ "method", "getProductProperties_hash", "bacula" ]
25
26
27def write_client_conf( fd, client, properties ):
28 #Client {
29 #Name = ting-fd
30 #Address = ting.dass-it
31 #FDPort = 9102
32 #Catalog = MyCatalog
33 #Password = "D5w2V5w6B8a9H5Z"
34 #File Retention = 6 months
35 #Job Retention = 6 months
36 #AutoPrune = yes
37 #}
38 params = [ "FDPort", "FileRetention", "JobRetention", "AutoPrune" ]
39 fd.write( "Client {\n" )
40 fd.write( ' Name = "' + properties['filedaemon_full_name'] + '"' + "\n" )
41 fd.write( ' Address = "' + client['clientId'] + '"' + "\n" )
42 # ipAddress: method host_getObjects [] '{"id":client['clientId']}'
43 #print " # Address =", ipAddress
44 fd.write( ' Password = "' + properties['filedaemon_full_password'] + '"' + "\n" )
45 fd.write( ' Catalog = "' + properties['catalog'] + '"' + "\n" )
46 for i in params:
47 try:
48 fd.write( ' ' + i + ' = "' + properties[i.lower()] + '"' + "\n" )
49 except KeyError:
50 fd.write( ' # ' + i + " = \n" )
51 fd.write( "}\n")
52 fd.write( "\n" )
53
54
55
56
57def write_job_conf( fd, client, properties ):
58 #Job {
59 #FileSet = "tingfileset"
60 #Name = "ting"
61 #Client = ting-fd
62 #JobDefs = "LaptopJob"
63 ## Write Bootstrap = "/var/lib/bacula/ting.bsr"
64 #}
65 params = [ "Fileset", "JobDefs" ]
66 fd.write( "Job {" + "\n" )
67 fd.write( ' Name = "' + client['clientId'] + '-job"' + "\n" )
68 fd.write( ' Client = "' + properties['filedaemon_full_name'] + '"' + "\n" )
69 for i in params:
70 fd.write( " " )
71 try:
72 if not properties[i.lower()]:
73 fd.write( "# " )
74 fd.write( i + ' = "' + properties[i.lower()] + '"' + "\n" )
75 except KeyError:
76 fd.write( "# " + i + " = " + "\n" )
77 fd.write( "}" + "\n" )
78 fd.write( "\n" )
79
80#
81# main
82#
83
84#logging.basicConfig(format='%(asctime)s %(levelname)8s %(message)s')
85logging.basicConfig(format='%(message)s')
86logger = logging.getLogger(__name__)
87#logger.setLevel(logging.INFO)
88logger.setLevel(logging.DEBUG)
89
90logger.debug( "start" )
91
92try:
93 clientsWithBacula=json.loads( subprocess.check_output( opsiCallPrefix + opsiCallClientsWithBacula ) )
94#except subprocess.CalledProcessError as e:
95except BaseException as e:
96 logger.exception( "failed: %s" %(e) )
97 exit(1)
98
99#pprint( clientsWithBacula )
100
101if clientsWithBacula:
102 try:
103 file_opsi_clients = open('opsi-clients-generated.conf', 'w')
104 file_opsi_clients.write( "#\n" )
105 file_opsi_clients.write( "# automatically generated at {}\n".format( time.asctime() ) )
106 file_opsi_clients.write( "#\n\n" )
107
108 file_opsi_jobs = open('opsi-jobs-generated.conf', 'w')
109 file_opsi_jobs.write( "#\n" )
110 file_opsi_jobs.write( "# automatically generated at {}\n".format( time.asctime() ) )
111 file_opsi_jobs.write( "#\n\n" )
112 except BaseException as e:
113 logger.exception( "failed to create files" )
114 exit(1)
115
116for client in clientsWithBacula:
117 clientId = client['clientId']
118
119 try:
120 clientBaculaProperties=json.loads( subprocess.check_output( opsiCallPrefix + opsiCallClientBaculaProperties + [ client['clientId'] ] ) )
121 except ValueError as e:
122 logger.warn( "%s: no valid information found: %s" %(clientId, e) )
123 except subprocess.CalledProcessError as e:
124 logger.exception( "%s: failed:" %(clientId) )
125 #exit( 1 )
126 else:
127 #pprint( clientBaculaProperties )
128 write_client_conf( file_opsi_clients, client, clientBaculaProperties )
129 write_job_conf( file_opsi_jobs, client, clientBaculaProperties )
130 logger.info( "%s: OK" % clientId )
131
132logger.debug( "finished" )
Note: See TracBrowser for help on using the repository browser.