A package to introspect and manage a buildout-based cluster configuration in an object-oriented way
Project description
Code repository: http://svn.plone.org/svn/collective/buildout/collective.buildout.cluster
Questions and comments to plone-developers [at] lists.sourceforge.net
Report bugs at https://bugs.launchpad.net/collective.buildout.cluster
Detailed Documentation
Example usage
We’ll start by creating a buildout that contains a base ZEO Client, a ‘cluster’ ZEO Client and two ZEO Servers:
>>> write('buildout.cfg', ... r""" ... [buildout] ... parts = ... instance-1 ... instance-2 ... server-1 ... server-2 ... ... [instance-1] ... http-address = 8080 ... recipe = plone.recipe.zope2instance ... zeo-address = 8100 ... zeo-client = on ... ... [instance-2] ... recipe = collective.recipe.zope2cluster ... http-address = 8081 ... instance-clone = instance-1 ... ... [server-1] ... recipe = plone.recipe.zope2zeoserver ... zeo-address = 8100 ... ... [server-2] ... recipe = plone.recipe.zope2zeoserver ... zeo-address = 8101 ... """) >>> write('.installed.cfg', ... r""" ... [instance-1] ... bin-directory = C:\src\server-buildout\5.0\bin ... http-address = 8080 ... location = C:\src\server-buildout\5.0\parts\instance-1 ... recipe = plone.recipe.zope2instance ... zeo-address = 8100 ... zeo-client = on ... zope2-location = C:\src\server-buildout\5.0\parts\zope2 ... ... [instance-2] ... http-address = 8081 ... location = C:\src\server-buildout\5.0\parts\instance-2 ... recipe = collective.recipe.zope2cluster ... instance-clone = instance-1 ... zope2-location = C:\src\server-buildout\5.0\parts\zope2 ... ... [server-1] ... location = C:\src\server-buildout\5.0\parts\server-1 ... bin-directory = C:\src\server-buildout\5.0\bin ... recipe = plone.recipe.zope2zeoserver ... zeo-address = 8100 ... zope2-location = C:\src\server-buildout\5.0\parts\zope2 ... ... [server-2] ... location = C:\src\server-buildout\5.0\parts\server-2 ... bin-directory = C:\src\server-buildout\5.0\bin ... recipe = plone.recipe.zope2zeoserver ... zeo-address = 8101 ... zope2-location = C:\src\server-buildout\5.0\parts\zope2 ... """)
Reading the cluster configuration from those files should list two servers and two client instances:
>>> import os >>> from collective.buildout.cluster.cluster import Cluster >>> cluster = Cluster(os.getcwd(), 'buildout.cfg', '.installed.cfg') cwd: ... >>> for server in cluster.getServers(): ... print server.getInstanceName() ... print server.getInstanceCtl() ... print server.getPort('zeo') ... print server-1 C:\src\server-buildout\5.0\bin\server-1 8100 <BLANKLINE> server-2 C:\src\server-buildout\5.0\bin\server-2 8101 <BLANKLINE> >>> for client in cluster.getClients(): ... print client.getInstanceName() ... print client.getInstanceCtl() ... print client.getPort('http') ... print instance-1 C:\src\server-buildout\5.0\bin\instance-1 8080 <BLANKLINE> instance-2 C:\src\server-buildout\5.0\bin\instance-2 8081 <BLANKLINE>
Now, let’s add a third client and make sure the buildout.cfg file was changed accordingly:
>>> settings = {'instance-clone': 'instance-1', ... 'http-address': '8082'} >>> client = cluster.addNewClient('instance-3', settings=settings) >>> cat('buildout.cfg') <BLANKLINE> ... parts = instance-1 instance-2 instance-3 server-1 ... [instance-3] recipe = collective.recipe.zope2cluster http-address = 8082 instance-clone = instance-1 >>> client['http-address'] '8082' >>> client['instance-clone'] 'instance-1' >>> client['name'] 'instance-3'
Trying to add another client by the same name should fail:
>>> cluster.addNewClient('instance-3', settings=settings) Traceback (most recent call last): ... ValueError: A section named 'instance-3' already exists!
Changing a port number, or even enabling a port should be possible:
>>> i2 = cluster.getClient('instance-2') >>> i2.setPort('http', '8091') >>> i2['http-address'] '8091' >>> i2.setPort('webdav', '8092') >>> i2['webdav-address'] '8092' >>> cat('buildout.cfg') <BLANKLINE> ... [instance-2] recipe = collective.recipe.zope2cluster http-address = 8091 instance-clone = instance-1 webdav-address = 8092 ...
So should disabling a port (by setting it to None):
>>> i2.setPort('webdav', None) >>> cat('buildout.cfg') <BLANKLINE> ... [instance-2] recipe = collective.recipe.zope2cluster http-address = 8091 instance-clone = instance-1 ... >>> i2['webdav-address'] Traceback (most recent call last): ... KeyError: 'webdav-address'
Finally, deleting a client should be possible as well:
>>> for client in cluster.getClients(): ... print client.getInstanceName() instance-1 instance-2 instance-3 >>> cluster.removeClient('instance-3') >>> cat('buildout.cfg') <BLANKLINE> ... parts = instance-1 instance-2 server-1 ... >>> for client in cluster.getClients(): ... print client.getInstanceName() instance-1 instance-2
Contributors
Sidnei da Silva, Author
Change history
0.6 (2010-07-30)
Service name of the Windows service now consistent with the inner function get_service_name() in Zope2.Startup.zopectl.ZopeCmd.do_start(), that is “Zope19906508” instead of “Zope_19906508”. [kleist]
The Windows Service no longer starts Zope in debug mode. [kleist]
0.5 (2010-04-05)
Fix silly typo.
0.4 (2010-04-05)
Support for latest zope2instance recipe, which doesn’t install zopeservice.py anymore. [sidnei]
0.3 (2009-07-11)
Implemented support for selecting startup type on Windows (available options are “manual” or “auto”) [sidnei]
0.2 (2009-04-03)
Implemented support for install/remove/start/stop of all possible services found in a configuration file, specially for Windows. [sidnei]
0.1 (2009-03-04)
Implemented support for reading cluster configuration from a buildout.cfg [sidnei]
Implemented support for starting/stopping instances [sidnei]
Implemented support for creating new instances [sidnei]
Created recipe with ZopeSkel [sidnei]
Download
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file collective.buildout.cluster-0.6.tar.gz
.
File metadata
- Download URL: collective.buildout.cluster-0.6.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b85fd10ee611accebb71e316262741b7f4fe893fde00bae5249d32382c3cdc64 |
|
MD5 | 0fd4d7e0df84de8ba63a906a5de08004 |
|
BLAKE2b-256 | 07c236aea9d997dc34399c07f1f8e2355d4c9a72d726c68b87e843e600a7ee92 |