一个包,用于以面向对象的方式反思和管理基于构建的集群配置

collective.buildout.cluster的Python项目详细描述


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]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android HttpClient cookies   如何使用Java在远程系统上运行SSH命令?   java从字符串数组中的字符串末尾删除“,”   在One plus 3t手机上,当应用程序被终止或从最近的应用程序中刷出时,java Android FCM推送通知不起作用   java如何使垂直滚动条始终位于jtable的末尾   在java中解析迄今为止“未知”的字符串   javascript在Java中获取Nashorn JsonObject   java windows 10和ubuntu可以使用相同的JDK吗?   java在不同的文件中记录不同的日志。但所有日志都放在同一个文件中   具有特定jdk的java Gradle构建项目   xml Java web服务生成错误响应   javascript Jaggery文件更改不显示   java输出二进制搜索树数组   将BufferedReader解析为JSON对象时,java在位置处意外标记文件结尾