一个包,用于以面向对象的方式反思和管理基于构建的集群配置
collective.buildout.cluster的Python项目详细描述
内容
- 代码库:http://svn.plone.org/svn/collective/buildout/collective.buildout.cluster
- 向plone developers[at]lists.sourceforge.net提出的问题和评论
- 在https://bugs.launchpad.net/collective.buildout.cluster 报告错误
Detailed Documentation
示例用法
我们将首先创建一个buildout,它包含一个基本的zeo客户端 “群集”Zeo客户端和两个Zeo服务器:
>>> 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 ... """)
从这些文件中读取集群配置应该列出两个 服务器和两个客户端实例:
>>> 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>
现在,让我们添加第三个客户机并确保buildout.cfg文件 相应更改:
>>> 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'
尝试以相同名称添加另一个客户端应失败:
>>> cluster.addNewClient('instance-3', settings=settings) Traceback (most recent call last): ... ValueError: A section named 'instance-3' already exists!
可以更改端口号,甚至启用端口:
>>> 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 ...
所以应该禁用端口(通过将其设置为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'
最后,还可以删除客户端:
>>> 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,作者
Change history
0.6 (2010-07-30)
- Windows服务的服务名现在与内部函数一致 在zope2.startup.zopectl.zopecmd.do_start()中获取服务_name(), 那是“zope19906508”,而不是“zope_”。 [克莱斯特]
- windows服务不再以调试模式启动zope。 [克莱斯特]
0.5 (2010-04-05)
- 修正愚蠢的打字错误。
0.4 (2010-04-05)
- 支持最新的Zope2Instance配方,但未安装 ZopeService.py了。[西德内]
0.3 (2009-07-11)
- 已实现对在Windows上选择启动类型的支持(可用 选项为“手动”或“自动”)[sidnei]
0.2 (2009-04-03)
- 实现对所有可能的安装/删除/启动/停止的支持 在配置文件中找到的服务,特别是针对Windows的服务。[西德内]
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]