跳转到主要内容

FABRIC信息模型库和工具

项目描述

PyPI

信息模型

基本图抽象

FABRIC信息模型库,包含操作不同类型信息模型表示(细粒度和切片)的类定义和方法。

实现涵盖了以下模型和模型转换:

  • ARM(聚合资源模型)- 由聚合所有者生成,可能包含多个针对不同代理的资源委派
  • ADM(聚合委派模型)- 一个ARM可以被划分为一个或多个针对不同代理的ADM
  • CBM(组合代理模型)- 从不同聚合发送给代理的多个ADM合并为单个CBM。如果需要,可以从CBM中'取消合并' ADM(例如,当聚合离线时)
  • BQM(代理查询模型)- 代理可以针对包含在CBM中的信息和存储在代理中的实时分配信息生成多种类型的BQM。返回的模型可以包含不同级别的资源详细信息。BQM可用于用户工具、门户或其他需要检查可用测试平台资源的实体
  • ASM(抽象切片模式)- 由用户工具生成的模型,传递给编排器,描述切片拓扑。该模型可以被编排器和聚合管理器用已配置的(与请求的)基础设施的详细信息进行注解,并返回给用户。ASM包括通常所说的切片请求和切片清单。

这些模型基于一个通用的抽象属性图类框架 fim.graph.abc_property_graph.py,然后被子类化为基于NetworkX的实现和基于Neo4j的抽象功能实现。在上述两种实现之上,构建了更多类型的模型,从而允许轻松地交换底层的图形实现 - 内存中(通过NetworkX)或持久化(通过Neo4j)。

内置了一个通用的图形验证框架 - 当操作基于Neo4j的实现时,由于Neo4j Cypher查询语言的强大表达能力,验证更强/更彻底。图形验证规则可以在fim.graph.data下找到。

ARM、ADM、CBM的定义和实现可以在fim.graph.resources下找到,ASM在fim.graph.slices下。BQM的抽象定义在fim.graph.resources下,但是有多个BQM的子类型(向请求者提供不同级别的拓扑详细信息)。不同类型BQM的生成是通过旨在位于FIM外部(可能在控制框架内部)的代理插件完成的。有关插件更详细的信息,请参阅fim.pluggable.py

高级抽象

在上述基本属性图模型之上,FIM提供了更多方便的抽象,这些抽象可以互换地使用底层的属性图实现(NetworkX或Neo4j),以便更容易地操作和检查数据。

主要的抽象集在fim.user包中实现,该包提供了附加文档

支持中间模型的实现位于fim.sliver下,然而这些模型在FIM和控制框架中主要是内部的,通常不会暴露给最终用户。

代码结构

此图反映了代码的整体结构

Code structure

通过以下链接进入fim/README.md进行探索。

开发环境

推荐的设置方法是检查代码后使用virtualenvwrapper设置开发环境

$ git clone git@github.com:fabric-testbed/InformationModel.git
$ cd InformationModel
$ mkvirtualenv -r requirements.txt infomodel
$ workon infomodel
(infomodel) $

您也可以使用Python新版本内置的venv工具,如下所示

$ git clone git@github.com:fabric-testbed/InformationModel.git
$ cd InformationModel
$ python3 -m venv venv
$ source ./venv/bin/activate
$ pip install --upgrade pip setuptools
(venv) $

根据您正在开发FIM的哪些部分,您可能需要运行Neo4j-APOC Docker容器。处理以Neo4j开头命名的任何模型通常需要使用Neo4j Docker。

NetworkX开头的模型使用NetworkX工具包在内存中操作模型,不需要Neo4j Docker。在fim.user下,所有高级抽象都可以使用内存中的NetworkX模型进行调试和测试,尽管它们根据情况操作这两种类型的模型。

按照容器的说明启动它。

安装

有多种安装选项。对于CF开发,推荐的方法是从GitHub MASTER分支安装

$ pip install git+https://github.com/fabric-testbed/InformationModel.git

用于开发和测试FIM代码本身,请使用可编辑安装(从顶级目录)并安装flit和pytest

(infomodel) $ pip install -e .
(infomodel) $ pip install flit
(infomodel) $ pip install pytest

用于包含在工具中,等,请使用PyPi

$ pip install fabric-fim

与Neo4j的兼容性

以下兼容性矩阵显示了FIM的哪个主要版本支持Neo4j的哪个版本(与相应版本的Neo4j-APOC Docker容器进行了测试)

FIM主要版本 Neo4j-APOC Docker版本
1.0-1.2 4.0.3
1.3-1.4 4.1.6
1.5 5.3.0

测试图形

原始测试图形

原始测试图形位于tests/models下。所有图形都是使用yEd桌面图形编辑器创建的(请注意,在线版本在创建自定义节点和链接属性方面不提供相同的灵活性)。

生成新的测试图形

根据图表类型,可以使用高级抽象库生成许多测试图表。

例如,可以从fim.user.topology.ExperimentTopology对象生成ASM,而ARM可以使用fim.user.topology.SubstrateTopology生成。其他模型通常从这些类型模型派生,如概述中所述。

测试图表由单元测试生成

  • ASM在test/slice_topology_test.py中生成
  • ARM在test/substrate_topology_test.py中生成
  • test/substrate_topology_test.py生成的序列化基础上,在test/zz_neo4j_pg_test.py中测试ARM-ADM-CBM操作。

测试和构建

为了运行测试,您需要使用pytest。此外,为了支持Neo4j实现模型的测试,Neo4j-APOC应在Docker容器中运行。

$ docker run -p7474:7474 -p7687:7687 -e NEO4J_AUTH=neo4j/password \
    -v $(pwd)/neo4j/data:/data -v $(pwd)/neo4j/imports:/imports \
    fabrictestbed/neo4j-apoc

请注意,目录neo4j/dataneo4j/imports必须存在,上述命令才能按预期工作。

等待neo4j-apoc Docker容器启动,然后运行pytest

$ pytest [-s] test

这将生成底物ARM模型,并将它们保存到项目根目录中的文件中。

要构建和发布,运行

$ flit build
$ flit publish

或者(假设您的.pypirc已设置访问PyPi的令牌)

$ flit publish

图表验证

所有加载到Neo4j中的图表(无论来自文件还是作为查询或委派的一部分传递)都必须遵守由Cypher查询表示的规则集。所有类型图表的基本规则集位于fim/graph/graph_validation_rules.json

在摄取之前,也会测试JSON格式字段的通用语法有效性。

可能还可能有针对特定模型类型的特定规则文件来管理特定模型的验证。

基于NetworkX的图表也进行验证,但由于工具不足,范围更有限。

使用fim_util实用程序

该实用程序支持对GraphML文件进行多种操作 - 列举节点(对于图)、加载到Neo4j实例、从Neo4j中删除图表。

启动相应的Neo4j-APOC docker容器

util/下创建具有以下结构的fim_config.yaml

# default fim_config configuration file for FIM utilities
neo4j:
  url: neo4j://0.0.0.0:7687
  user: neo4j
  pass: password
  import_host_dir: /host/directory/seen/by/neo4j/docker/as/imports
  import_dir: /imports

参数passwordimport_host_dir取决于如何启动上述过程中的Docker容器。其他参数应保持不变。

运行实用程序以获取各种操作的详细帮助

(infomodel) $ fim_util -h

通常,实用程序很好用,例如,加载图表文件:fim_util -l -f -r <graphml文件>或合并多个广告:fim_util -m -f <文件1> -f <文件2>。大多数选项都接受多个-f和相关选项,因此可以一次加载多个文件。

在测试大型图表时,请注意,默认情况下,Neo4j在浏览器中可视化前300个节点。如果您想查看完整图表,请增加此限制(在neo4j提示符下)

:config initialNodeDisplay: 5000

Neo4j性能考虑

出于性能原因,每个Neo4j实例都必须创建适当的索引。Neo4j标签GraphNode在FIM中是硬编码的 - 每个图节点都有此标签,并从类属性创建另一个标签,这对FIM有意义。这样做是为了性能原因,以便更容易创建索引并使用这些索引查询模型。

需要以下索引(每当使用Neo4jGraphImporter时都会自动创建索引)

CREATE INDEX graphid FOR (n:GraphNode) ON (n.GraphID)
CREATE INDEX graphid_nodeid FOR (n:GraphNode) ON (n.GraphID, n.NodeID)
CREATE INDEX graphid_nodeid_type FOR (n:GraphNode) ON (n.GraphID, n.NodeID, n.Type)
CREATE INDEX graphid_type FOR (n:GraphNode) ON (n.GraphID, n.Type)

可以通过使用:schema命令在控制台中检查可用的索引。

可以使用以下命令删除索引(替换适当的索引名称)

DROP INDEX graphid

请参阅其他文档

项目详情


发布历史 发布通知 | RSS源

下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

fabric_fim-1.7.2.tar.gz (218.8 kB 查看哈希值)

上传时间

构建分发

fabric_fim-1.7.2-py3-none-any.whl (195.6 kB 查看哈希值)

上传时间 Python 3

支持