Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

A package to introspect and manage a buildout-based cluster configuration in an object-oriented way

Project Description

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]
Release History

Release History

This version
History Node

0.6

History Node

0.5

History Node

0.4

History Node

0.3

History Node

0.2

History Node

0.1

Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
collective.buildout.cluster-0.6.tar.gz (14.5 kB) Copy SHA256 Checksum SHA256 Source Jul 31, 2010

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting