Esportazione di una cartella zope con Python
Domanda
Abbiamo due server Zope in esecuzione sito interno della nostra azienda. Uno è il sito dal vivo e uno è il sito dev. Sto lavorando su scrivendo uno script python che muove tutto dal server dev per il server di vivere. In questo momento il processo coinvolge una serie di passi che si fanno nell'interfaccia di gestione Zope. Ho bisogno di fare tutto ciò che automatico in modo che l'esecuzione di uno script di gestire tutto. Una cosa che ho bisogno di fare è esportare una cartella dal server di vivere in modo che possa reimportare di nuovo nel luogo in tensione dopo l'aggiornamento. Come posso fare questo da uno script Python?
Stiamo usando Zope 2.8 e Python 2.3.4
Soluzione
Si può provare a utilizzare il manage_exportObject
funzioni e manage_importObject
trova nel file $ZOPE_HOME/lib/python/OFS/ObjectManager.py
diciamo installiamo due 2.8 istanze Zope situati a:
-
/tmp/instance/dev
per il server di sviluppo (8080) -
/tmp/instance/prod
per il server di produzione (porta 9090)
Nella ZMI del server di sviluppo, ho creato due cartelle /MyFolder1
e /MyFolder2
contenente alcuni modelli di pagina. Il seguente script Python esporta ogni cartella in file .zexp, e li importa nel ZMI dell'istanza di produzione:
#!/usr/bin/python
import urllib
import shutil
ids_to_transfer = ['MyFolder1', 'MyFolder2']
for id in ids_to_transfer:
urllib.urlopen('http://admin:password_dev@localhost:8080/manage_exportObject?id=' + id)
shutil.move('/tmp/instance/dev/var/' + id + '.zexp', '/tmp/instance/prod/import/' + id + '.zexp')
urllib.urlopen('http://admin:password_prod@localhost:9090/manage_delObjects?ids=' + id)
urllib.urlopen('http://admin:password_prod@localhost:9090/manage_importObject?file=' + id + '.zexp')
Altri suggerimenti
Per rendere questo più generale e consentire la copia di cartelle non nella directory principale che vorrei fare qualcosa di simile:
#!/usr/bin/python
import urllib
import shutil
username_dev = 'admin'
username_prod = 'admin'
password_dev = 'password_dev'
password_prod = 'password_prod'
url_dev = 'localhost:8080'
url_prod = 'localhost:9090'
paths_and_ids_to_transfer = [('level1/level2/','MyFolder1'), ('level1/','MyFolder2')]
for path, id in ids_to_transfer:
urllib.urlopen('http://%s:%s@%s/%smanage_exportObject?id=%s' % (username_dev, password_dev, url_dev, path, id))
shutil.move('/tmp/instance/dev/var/' + id + '.zexp', '/tmp/instance/prod/import/' + id + '.zexp')
urllib.urlopen('http://%s:%s@%s/%smanage_delObjects?ids=%s' % (username_prod, password_prod, url_prod, path, id))
urllib.urlopen('http://%s:%s@%s/%smanage_importObject?file=%s.zexp' % (username_prod, password_prod, url_prod, path, id))
Se avessi il rappresentante vorrei aggiungere questo per l'altra risposta, ma ahimè ... Se qualcuno vuole unirle, si prega di andare avanti.
Se davvero si sposta tutto si potrebbe probabilmente solo spostare le Data.fs invece. Ma per il resto l'import / export di cui sopra è un buon modo.