Exportation d'un dossier Zope avec python
Question
Nous avons deux serveurs Zope en cours d'exécution site interne de l'entreprise. L'un est le site en direct et on est le site dev. Je travaille sur l'écriture d'un script python qui se déplace tout à partir du serveur dev au serveur en direct. En ce moment, le processus implique un tas d'étapes qui sont faites dans l'interface de gestion de Zope. Je dois faire tout ce que automatique pour qui gère l'exécution d'un scénario tout. Une chose que je dois faire est d'exporter un dossier à partir du serveur en direct afin que je puisse réimporter de nouveau dans le site en direct après la mise à jour. Comment puis-je faire à partir d'un script python?
Nous utilisons Zope 2.8 et Python 2.3.4
La solution
Vous pouvez essayer d'utiliser les fonctions manage_exportObject
et manage_importObject
situé dans le fichier $ZOPE_HOME/lib/python/OFS/ObjectManager.py
Disons que nous installons deux Zope 2.8 cas situés à:
-
/tmp/instance/dev
pour le serveur de développement (port 8080) -
/tmp/instance/prod
pour le serveur de production (port 9090)
Dans le ZMI du serveur de développement, je l'ai créé deux dossiers /MyFolder1
et /MyFolder2
contenant des modèles de page. Le script Python suivant exporte chaque dossier dans les fichiers .zexp, et les importe dans la ZMI de l'instance de production:
#!/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')
Autres conseils
Pour le rendre plus général et permettre de copier des dossiers pas dans le répertoire racine que je ferais quelque chose comme ceci:
#!/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))
Si je devais le représentant j'ajouter à l'autre réponse, mais hélas ... Si quelqu'un veut les fusionner, s'il vous plaît allez-y.
Si vous déplacez vraiment tout , vous pouvez probablement déplacer les Data.fs à la place. Mais sinon, l'import / export ci-dessus est une bonne façon.