Package Products :: Package ZenUtils :: Module EggifyZenPack
[hide private]
[frames] | no frames]

Source Code for Module Products.ZenUtils.EggifyZenPack

 1  ############################################################################## 
 2  #  
 3  # Copyright (C) Zenoss, Inc. 2008, all rights reserved. 
 4  #  
 5  # This content is made available according to terms specified in 
 6  # License.zenoss under the directory where your Zenoss product is installed. 
 7  #  
 8  ############################################################################## 
 9   
10   
11  __doc__ = "Convert old-style zenpacks to zenpack eggs" 
12   
13  import Globals 
14  from Products.ZenUtils.ZenScriptBase import ZenScriptBase 
15  from Products.ZenModel.ZenPack import ZenPackException 
16  from Utils import zenPath 
17  import ZenPackCmd 
18  import os, sys 
19  import shutil 
20   
21   
22 -class Eggify(ZenScriptBase):
23 "Eggify ZenPacks" 24
25 - def run(self):
26 if not self.options.newid: 27 raise ZenPackException('You must specify a new id with the' 28 ' --newid option.') 29 zpName = self.args[0] 30 if not os.path.isdir(zenPath('Products', zpName)): 31 raise ZenPackException('Can not locate %s.' % zpName + 32 ' This command only operates on installed ZenPacks.') 33 (possible, msgOrId) = ZenPackCmd.CanCreateZenPack( 34 None, self.options.newid) 35 if possible: 36 newId = msgOrId 37 else: 38 raise ZenPackException('Unable to eggify %s: %s' % ( 39 zpName, msgOrId)) 40 41 self.connect() 42 43 # Create new zenpack 44 eggDir = ZenPackCmd.CreateZenPack(newId, prevZenPackName=zpName) 45 46 # Copy old one into new one 47 parts = newId.split('.') 48 zpDir = os.path.join(eggDir, *parts) 49 os.system('rm -rf %s' % zpDir) 50 shutil.copytree(zenPath('Products', zpName), zpDir, symlinks=False) 51 52 # Create a skins directory if there isn't one 53 skinsDir = os.path.join(zpDir, 'skins', zpName) 54 if not os.path.isdir(skinsDir): 55 os.makedirs(skinsDir) 56 57 # Install it 58 ZenPackCmd.InstallEggAndZenPack(self.dmd, eggDir, link=True) 59 60 # Confirm pack is eggified 61 pack = self.dmd.ZenPackManager.packs._getOb(zpName, None) 62 success = pack and pack.isEggPack() 63 64 if success: 65 print('%s successfully converted to %s.' % (zpName, newId)) 66 print('The code for %s is located at $ZENHOME/ZenPacks/%s' % 67 (newId, newId)) 68 print('NOTE: If your ZenPack provides DataSource classes ' 69 'or any other python class for objects that are stored ' 70 'in the object database then further steps are ' 71 'required. Please see the Zenoss Developer Guide for ' 72 'more instructions.')
73
74 - def buildOptions(self):
75 self.parser.add_option('--newid', 76 dest='newid', 77 default=None, 78 help='Specify a new name for this ZenPack. ' 79 'It must contain at least three package names ' 80 'separated by periods, the first one being ' 81 '"ZenPacks"') 82 ZenScriptBase.buildOptions(self)
83 84 85 if __name__ == '__main__': 86 e = Eggify() 87 try: 88 e.run() 89 except ZenPackException, e: 90 import sys 91 sys.stderr.write('%s\n' % str(e)) 92 sys.exit(-1) 93