1
2
3
4
5
6
7
8
9
10
11
12
13
14 __doc__="""ExportRM
15
16 Export RelationshipManager objects from a Zope database
17 """
18
19 import sys
20 import datetime
21
22 import Globals
23
24 from Products.ZenUtils.ZCmdBase import ZCmdBase
25
27 """
28 Wrapper class around exportXml() to create XML exports of relations.
29 """
30
32 """
33 Initializer that creates an output file, or if nothing is specified
34 with the command-line option --outfile, sends to stdout.
35 """
36 ZCmdBase.__init__(self)
37 if not self.options.outfile:
38 self.outfile = sys.stdout
39 else:
40 self.outfile = open(self.options.outfile, 'w')
41
42
43
45 """
46 Command-line options setup
47 """
48 ZCmdBase.buildOptions(self)
49
50 self.parser.add_option('-o', '--outfile',
51 dest="outfile",
52 help="Output file for exporting XML objects. Default is stdout")
53
54 self.parser.add_option('--ignore', action="append",
55 dest="ignorerels", default=[],
56 help="Relations that should be ignored. Every relation to" + \
57 " ignore must be specified with a separate --ignorerels option." )
58
59
70
71
73 """
74 Gather our Zenoss server name
75
76 @return: Zenoss server name
77 @rtype: string
78 """
79 import socket
80 return socket.gethostname()
81
82
84 """
85 Create XML header and then call exportXml() for all objects starting at root.
86
87 @param root: DMD object root
88 @type root: object
89 """
90
91 if not root:
92 root = self.dataroot
93
94 if not hasattr(root, "exportXml"):
95 print "ERROR: Root object for %s is not exportable (exportXml not found)" % root
96 sys.exit(1)
97
98 export_date = datetime.datetime.now()
99 version = self.getVersion()
100 server = self.getServerName()
101
102
103 self.outfile.write( """<?xml version="1.0" encoding="ISO-8859-1" ?>
104
105 <!--
106 Zenoss RelationshipManager export completed on %s
107
108 Use ImportRM to import this file.
109
110 For more information about Zenoss, go to http://www.zenoss.com
111 -->
112
113 <objects version="%s" export_date="%s" zenoss_server="%s" >\n""" % \
114 ( export_date, version, export_date, server ))
115
116
117
118 root.exportXml(self.outfile, self.options.ignorerels, True)
119
120
121 self.outfile.write( "</objects>\n" )
122
123
124 if __name__ == '__main__':
125 ex = ExportRM()
126 ex.export()
127