Redfish Data model (红鱼的资料模型)

9 篇文章 30 订阅

(这一篇写得不够完整,但好像不能暂时下架文章,所以有空再来修)

今天来聊个简单的概念,Redfish 的 Data model

上面是Redfish Spec的内容,提到Redfish 将 Protocol 和 Data model 的版本分开了,那这边的Data model 是指什么呢?

什么是Data model ?

在软体工程中,在系统开发前,需要先作需求的统计和分析,这时候我们会将需要处理的资料(Data requirement) 作初步的概念设计(conceptual design),产生概念模型 (Conceptual schema),这是一个high level 的Data model,以Redfish 为例子

如果我们设计一个需要处理System 和 BMC 资料的Redfish ,我们需要先将想要处理的资料作分类和分析,经过建模后资料之间的关系大略如下

 这边用到ER model,补充一下他的概念

  • Entity: 特定的Object,每个Entity 有它自己的Type (Redfish 世界称作Resource ,type 会标记在@odata.type)
  • Attribute: 用来描述Entity (Redfish 世界称作Property)
  • Key Attribute: 每个Entity 的这个Attribute都有独一无二的值,例如身份证字号/员工编号,都是key attribute (Redfish 世界常见的是@odata.id 或是 id)
  • Multivalued Attribute: 多值的attribute,例如Status object 可再分为State和 Health 

有个概念模型后,我们会进入实体模型阶段,将我们的Data model 描述得更仔细,以便后续的资料沟通,其中,一个完整的 Data model 会有三个组成元素

  • The structural part (结构): 资料在资料库中的组成与表示方式
  • The integrity part (完整性): 资料在结构与表示方式中的合法条件 (例如 UserName 不能超过几个字元、密码的长度或是Attribute的Type 要是string or int等条件)
  • The manipulation part (操作) : 如何更新、新增或是查询数据 (这个Resource 能不能被POST、DELETE 或是 Property能不能被PATCH)

经过完整的建模產生的schema 就在 redfish schema document (DSP0268),里面可以看出很完整的资料模型结构和严谨的规范

在DSP0268中有清楚描述了Redfish 的Data model,另外Redfieh 有提供 Schema definition languages 所撰写的Data model (DSP8010),供开发人员使用

最后我们来看一下很多人介绍Redfish 时会放的Resource map,是不是更有感觉

这边的"computer systems" 和 "Manager By" 就是上面提到的relationship (Resource 之间的关系),Processors 是Computer System 的Property,那他也可以和Processor Resource 产生一个关系,就像底下

如果和Redfish 熟的话,会发现有些关系是会放在"Links"的property中的 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Redfish是一种开放标准的远程管理协议,旨在简化服务器硬件的远程管理。它提供了一组RESTful API,用于与服务器进行通信和执行管理操作。 Python是一种常用的编程语言,具有广泛的应用领域。在使用Python进行Redfish管理时,可以使用form-data格式来作为HTTP请求中的数据传输方式。 form-data是一种常用的HTTP请求数据传输格式,它允许将多个键值对作为表单数据进行传输。在Python中,我们可以使用requests库来发送HTTP请求,并使用form-data格式来传输Redfish操作所需的数据。 首先,我们需要安装requests库,可以使用pip命令进行安装:``` pip install requests ``` 然后,我们可以使用以下代码示例来发送一个使用Redfish的form-data格式的POST请求:```python import requests url = "https://example.com/redfish/v1/management/ethernetinterfaces" payload = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"interfaceId\"\r\n\r\n1\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"interfaceName\"\r\n\r\nten-GigabitEthernet1/1/1\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"vlanId\"\r\n\r\n10\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"action\"\r\n\r\ncreate\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--" headers = { 'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' } response = requests.request("POST", url, headers=headers, data=payload) print(response.text) ``` 以上示例代码中,我们首先定义了Redfish服务的URL。然后,我们创建了一个payload变量,其中包含了所需的表单数据。接下来,我们定义了请求的headers,指定了Content-Type为multipart/form-data。最后,我们使用requests库的request方法发送了POST请求,并将返回的响应打印出来。 通过使用这种方式,我们可以使用Python发送Redfish的form-data请求,并获取到相应的结果。根据具体的Redfish接口和数据需求,我们可以自行调整payload来满足不同的需求。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值