从文件创建 Bare Metal 服务资源¶
可以使用 JSON 或 YAML 格式的描述创建一组资源。可以通过以下两种方式实现
使用 OpenStackClient bare metal 插件 CLI 的命令
openstack baremetal create$ openstack -h baremetal create usage: openstack baremetal create [-h] <file> [<file> ...] Create resources from files positional arguments: <file> File (.yaml or .json) containing descriptions of the resources to create. Can be specified multiple times.通过 Python API 以编程方式
- ironicclient.v1.create_resources.create_resources(client, filenames)[source]
使用它们的 JSON 或 YAML 描述创建资源。
- 参数:
client – ironic 客户端的一个实例;
filenames – 包含 JSON 或 YAML 资源定义的的文件名列表。
- 引发:
如果在文件处理/资源创建过程中发生任何错误,则会引发 ClientException。
包含资源描述的文件¶
要创建的资源可以描述为 JSON 或 YAML 格式。以 .json 结尾的文件被假定包含有效的 JSON,以 .yaml 结尾的文件被假定包含有效的 YAML。指定具有任何其他扩展名的文件会导致错误。
可以创建的资源包括机箱 (chassis)、节点 (nodes)、端口组 (port groups) 和端口 (ports)。机箱可以包含嵌套在 "nodes" 键下的节点(以及节点的资源)定义。节点可以在 "portgroups" 下嵌套端口组定义,在 "ports" 键下嵌套端口定义。端口也可以嵌套在端口组的 "ports" 键下。
用于验证所提供数据的模式如下
{
"$schema": "https://schema.json.js.cn/draft-04/schema#",
"description": "Schema for ironic resources file",
"type": "object",
"properties": {
"chassis": {
"type": "array",
"items": {
"type": "object"
}
},
"nodes": {
"type": "array",
"items": {
"type": "object"
}
}
},
"additionalProperties": False
}
有关创建过程的更详细描述,请参见以下部分。
示例¶
以下是可传递给 create 命令的 JSON 文件的示例
{
"chassis": [
{
"description": "chassis 3 in row 23",
"nodes": [
{
"name": "node-3",
"driver": "ipmi",
"portgroups": [
{
"name": "switch.cz7882.ports.1-2",
"ports": [
{
"address": "ff:00:00:00:00:00"
},
{
"address": "ff:00:00:00:00:01"
}
]
}
],
"ports": [
{
"address": "00:00:00:00:00:02"
},
{
"address": "00:00:00:00:00:03"
}
],
"driver_info": {
"ipmi_address": "192.168.1.23",
"ipmi_username": "BmcUsername",
"ipmi_password": "BmcPassword",
}
},
{
"name": "node-4",
"driver": "ipmi",
"ports": [
{
"address": "00:00:00:00:00:04"
},
{
"address": "00:00:00:00:00:01"
}
]
}
]
}
],
"nodes": [
{
"name": "node-5",
"driver": "ipmi",
"chassis_uuid": "74d93e6e-7384-4994-a614-fd7b399b0785",
"ports": [
{
"address": "00:00:00:00:00:00"
}
]
},
{
"name": "node-6",
"driver": "ipmi"
}
]
}
创建过程¶
客户端会反序列化文件的内容,并验证每个文件中的顶级字典是否仅包含“chassis”和/或“nodes”键,以及它们的值是列表。如果在这一阶段遇到任何故障,创建过程将被中止。其余的验证由 ironic-api 服务完成。
通过向 ironic-api 服务发出 POST 请求(在请求体中包含资源的字典表示形式)来创建每个资源。对于嵌套资源(
"nodes"键位于机箱内部,"portgroups"键位于节点内部,"ports"键位于节点或端口组内部),首先创建顶级资源,然后创建子资源。例如,如果机箱包含一个节点列表,则首先创建机箱,然后创建每个节点。端口和端口组在节点中描述的情况也是如此。如果无法创建资源,则不会停止整个过程。失败资源的任何子资源将不会被创建,但否则,如果可能,其余资源将被创建。任何失败的资源都将在响应中提及。