使用solace semp xml api的solace provisioning助手

libsolace的Python项目详细描述


libsolace

构建状态

目录

概述

这是一组python帮助程序,用于管理和设置消息传递设备和vmr。设计要灵活 旨在管理多个环境中的多个群集。

安装

  1. 安装lxmlpyyaml
  2. 所需的库
  3. 使用pip安装:
    pip install libsolace
    

API文档

API文档

XML生成器

这个供应系统的核心是solacexmlbuilder类,它可以通过类字典对象的递归实例化生成xml。例子:

>>>document=SolaceXMLBuilder(version="soltr/6_2")>>>document.create.client_username.username="myUserName">>>document.create.client_username.vpn_name="dev_MyVPN">>>str(document)'<rpc semp-version="soltr/6_2"><create><client-username><username>myUserName</username><vpn-name>dev_MyVPN</vpn-name></client-username></create></rpc>'

插件创建semp请求对象,然后需要通过solaceapi.rpc将其发送到设备。 编写插件来创建一个或多个semp命令,并在根据xsd验证xml后返回它们。

>>>fromlibsolace.SolaceAPIimportSolaceAPI>>>connection=SolaceAPI("dev")>>># VMR: connection = SolaceAPI("dev", detect_status=False, version="soltr/7_1_1")>>># create the command for creating a new user via the "SolaceUser" plugin>>>plugin_request=connection.manage("SolaceUser").create_user(client_username="foo",vpn_name="bar")>>>plugin_request.xml'<rpc semp-version="soltr/7_1_1"><create><client-username><username>foo</username><vpn-name>bar</vpn-name></client-username></create></rpc>'>>>plugin_request.kwargs{'vpn_name':'bar','primaryOnly':True,'backupOnly':True,'client_username':'foo'}

solacexmlbuilder通常通过solacapi使用,它会注意为您检测设备操作系统版本。例如

>>>fromlibsolace.SolaceAPIimportSolaceAPI>>>conn=SolaceAPI("dev")>>>conn.manage("SolaceUser").get(client_username="dev_testvpn",vpn_name="dev_testvpn")[{'HOST':'http://solace1/SEMP',u'rpc-reply':{u'rpc':{u'show':{u'client-username':{u'client-usernames':{u'num-total-client-usernames':u'763',u'max-num-total-client-usernames':u'9002',u'num-dynamic-client-usernames':u'0',u'num-configured-client-usernames':u'763',u'client-username':{u'profile':u'glassfish',u'dynamically-configured':u'false',u'acl-profile':u'dev_testvpn',u'max-endpoints':u'16000',u'client-username':u'dev_testvpn',u'max-connections-service-smf':u'9000',u'enabled':u'true',u'message-vpn':u'dev_testvpn',u'password-configured':u'true',u'num-clients':u'0',u'max-connections-service-web':u'9000',u'num-endpoints':u'3',u'subscription-manager':u'false',u'authorization-group':None,u'max-connections':u'500',u'num-clients-service-web':u'0',u'guaranteed-endpoint-permission-override':u'false',u'num-clients-service-smf':u'0'}}}}},u'execute-result':{u'@code':u'ok'},u'@semp-version':u'soltr/7_1_1'}},{'HOST':'http://solace2/SEMP',u'rpc-reply':{u'rpc':{u'show':{u'client-username':{u'client-usernames':{u'num-total-client-usernames':u'755',u'max-num-total-client-usernames':u'9002',u'num-dynamic-client-usernames':u'0',u'num-configured-client-usernames':u'755',u'client-username':{u'profile':u'glassfish',u'dynamically-configured':u'false',u'acl-profile':u'dev_testvpn',u'max-endpoints':u'16000',u'client-username':u'dev_testvpn',u'max-connections-service-smf':u'9000',u'enabled':u'true',u'message-vpn':u'dev_testvpn',u'password-configured':u'true',u'num-clients':u'0',u'max-connections-service-web':u'9000',u'num-endpoints':u'4',u'subscription-manager':u'false',u'authorization-group':None,u'max-connections':u'500',u'num-clients-service-web':u'0',u'guaranteed-endpoint-permission-override':u'false',u'num-clients-service-smf':u'0'}}}}},u'execute-result':{u'@code':u'ok'},u'@semp-version':u'soltr/7_1_1'}}]

vmr需要使用以下命令进行初始化:

>>>fromlibsolace.SolaceAPIimportSolaceAPI>>>conn=SolaceAPI("dev",detect_status=False,version="soltr/7_1_1)>>>conn.manage("SolaceUser").get(client_username="dev_testvpn",vpn_name="dev_testvpn")[{'HOST':'http://solace3:8080/SEMP',u'rpc-reply':{u'rpc':{u'show':{u'client-username':{u'client-usernames':{u'num-total-client-usernames':u'10',u'max-num-total-client-usernames':u'1002',u'num-dynamic-client-usernames':u'0',u'num-configured-client-usernames':u'10'}}}},u'execute-result':{u'@code':u'ok'},u'@semp-version':u'soltr/7_1_1'}},None]

CMDB配置数据和命名模式

在我的用例中,每个solace集群可能承载多个"环境",因此所有对象都是用 允许多主机的特定于环境的名称。

<:< /P>
* dev_MyVPN
* qa1_productA
* dev_productA

这意味着任何集群都可以承载任意数量的环境,而不需要冲突的资源。CMDBClient 合同规定,它必须通过将环境名称替换为字符串来解析最终项名称。

例如,'%s\u myvpn'%env\u name.

这可以通过命名插件来实现。参见命名标准zoinksnamingstandard

参见ns/cmdbclient.py" rel="nofollow">cmdbclient用于CMDB插件示例。

限制

  • 只有当XML在SolacCommandQueue实例中排队时,才能验证它。
  • 设备响应很难验证,因为"从属"设备在不"活动"时几乎总是返回错误,并且现有的CI将在创建事件和错误状态时抛出错误。看见 用于针对特定设备和状态的decorators
  • 由于python字典不能包含-use\u,因此solacenode类将用-替换\u 反之亦然,视需要而定。

供应

libsolace可以从yaml文件或您使用的任何一个cmdb(如果您为此实现了客户端)中提供solace设备。

脚本./bin/solace-provision.py是配置任务的入口点。

示例

# single VMR "au_dev3"
./bin/solace-provision.py -e au_dev3 --no-detect-status -p MySolaceEcosystem --soltr_version="soltr/7_1_1"# 2 appliance cluster "dev"
./bin/solace-provision.py -e dev -p MySolaceEcosystem

配置

libsolace需要一个libsolace.yaml文件,以便知道哪些环境存在,哪些设备是这些环境的一部分 环境。单个设备可以是多个环境的一部分。

libsolace.yaml文件在中搜索:

  • os.environ['libsolace_config']
  • 'libsolace.yaml'
  • '/etc/libsolace/libsolace.yaml'
  • '/opt/libsolace/libsolace.yaml'

配置加载器还负责加载插件键中指定的所有插件。

有关详细信息,请参见libsolace.yaml.template。

插件

libsolace是可插入的,您可以注册自己的类来定制设备管理。您需要实现自己的cmdbclient,它应该与您希望填充solace的任何配置系统集成。

  • 请参见CMDBclient
  • 请参见所有插件
  • 请参见项目插件

bin

有关各种活动的示例,请参见bin

课程

运行make html生成所有sphinx文档。 使doctest-d测试docstrings

站点管理/资源调配

您可以使用solace provision.pybin在多个数据中心或环境中管理一组简单的配置项, 它可以提供整个VPN、队列、配置文件和用户。

 ./bin/solace-provision.py -e dev --no-detect-status -p MySolaceEcosystem --soltr_version="soltr/7_1_1"

yamlclient

yaml客户端是指定环境的最简单方法。通过将"libsolace.plugins.yamlclient"添加到 libsolace.yaml中的插件列表,以及设置"solace_cmdb_plugin:yamlclient"

---VPNS:MySolaceEcosystem:-vpn_config:spool_size:1024password:d0nt_u5e_th1sid:au_testvpnname:au_testvpn-vpn_config:spool_size:1024password:d0nt_u5e_th1sid:au_testvpn2name:au_testvpn2QUEUES:au_testvpn:-name:testqueue1queue_config:exclusive:"true"queue_size:4096retries:0max_bind_count:1000owner:au_testproductAconsume:allUSERS:au_testvpn:-username:au_testproductApassword:somepasswordau_testvpn2:-username:au_testproductApassword:somepassword

与自定义CMDB集成

你应该实现你自己与你使用的任何CMDB的集成。请参阅CMDBclient plugin和相关联的 插件结构的libpipeline.yaml属性以及如何配置libsolace以使用它。

任何CMDB实现都必须实现在cmdbclient.py示例中定义的方法。

运行资源调配任务

请参见./bin/solace-provision.py——帮助

测试

在配置中定义一个"dev"环境,如libsolace-tests.yaml所示。然后您可以按如下方式运行测试:

单个插件

nosetests-d tests.unittests.test\u solace\u用户:test solace user--logging level=info--nologcapture-v

单次试验

nosetests-d tests.unittests.test_solace_user:testsolaceuser.test_create_user--logging level=info--nologcapture-v

全部覆盖

libsolace_config=libsolace-tests.yaml nosetests--with coverage--cover package=libsolace

文档

博士学位

做doctest

HTML

制作HTML

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

推荐PyPI第三方库


热门话题
java使用Robolectric测试启动活动的代码   java TableModelListener   java以什么顺序为JDBC操作返回生成的ID。执行带有返回\u生成的\u键标记的语句?   java在JDBC for PostgreSQL中,我可以执行psql的命令吗?   java Spring引导类NotFoundException,但主类存在   java在itextpdf中应用位置提取策略后,我们可以使用文本提取策略吗?   java TestNG在类级别的@Test注释也将执行groovy合成方法   在java中,不需要继承就可以将变量的值从一个类移动到另一个类吗?   关于basicLTI java实现(basicltiutiljava)的jsp文档?   java查找部分重复值并保留特定   java@PathVariable和@RequestParam不在一起工作   多线程是不是没有办法迭代或复制Java ThreadLocal的所有值?   java泛型的C++等价   LDAPS从Java绑定性能   调用。来自Java的netwebservice   如果在30秒内未返回值,则多线程退出函数   java多线程未按预期工作   java创建对象的循环输出无效   Java从静态类外部创建类内的类数组   java Docx to HTML:使用DOCX4J时标题的字体样式不正确