|
Post by Venkatesh Periyasamy on May 11, 2017 5:15:28 GMT
I am trying to prepare sample input mockups which are required for the resources that can be created(POST Commands) specific to Swordfish specification 1.0.3.
1. For Storage Pool creation, the client should specify the Name, Class Of Service and required capacity. Here I am not able to get how to pass required capacity? Since Capacity Property of schema talks about the usage and allocated space from the underlying DataStore. How to specify the drives/pools/Volumes that should to be used to create storage pool.
2. For Storage Group, the client may need to specify the volumes, client point groups and server endpoint groups. But as per storage group schema, those properties are defined as reference to volume collection,ServerEndpointCollection,ClientEndPointCollection as follows
<NavigationProperty Name="ClientEndpointGroups" Type="EndpointGroupCollection.EndpointGroupCollection" ContainsTarget="true"> <NavigationProperty Name="ServerEndpointGroups" Type="EndpointGroupCollection.EndpointGroupCollection" ContainsTarget="true"> <NavigationProperty Name="Volumes" Type="VolumeCollection.VolumeCollection" ContainsTarget="true">
Now how do i need to specify these properties to create new storage group? Do i need to create endpoint group collection and then pass it to the schema or ?
Thanks in advance,
|
|
|
Post by gericson on May 11, 2017 18:41:52 GMT
1) At it's simplest, you don't need to specify source volumes/disks/pools. The service implementation should be capable of finding suitable resources simply based on the requested ClassesOfService. However, if you may specify volumes/disks/pools via CapacitySources. If so, and if ClassesOfService are also specified, then only those that meet the requirements of the listed Classes of Service should actually be used. If not enough, I expect the allocation should fail.
To create a StoragePool, 1) Identify the StorageService. For example /StorageServices(1) 2) Identify the ClassOfService. For example /StorageServices(1)/ClassesOfService(SSD) 3) Identify a set of candidate volumes as source. For example /StorageServices(1)/Volumes(223) and /StorageServices(1)/Volumes(537) 4) POST to /StorageServices(1)/StoragePools with a request body (example follows): { "Name": "BasePool", "Description": "Base storage pool", "BlockSizeBytes": 512, "Capacity": { "Data": { "ProvisionedBytes": 10995116277760 }, "CapacitySources": [{ "ProvidingVolumes": [ {"@odata.id": /redfish/v1/StorageServices(1)/Volumes(223)}, {"@odata.id": /redfish/v1/StorageServices(1)/Volumes(537)}] }], "ClassesOfService": [{"@odata.id": "StorageServices(1)/ClassesOfService(SSD)"}] }
2) For StorageGroups, the assumption is that especially the various endpoint groups would be have a longer lifecycle and would be managed separately, especially for enterprise class storage servers.
So, the process is something like.
a) Identify client endpoints for the applications that will have access
b) In StorageServices(1), Create client endpoint groups based on redundancy and access characteristics
c) Similar to a,b for server endpoints. Note that the choice of server side endpoints can alternatively be deferred to the implementation, as influenced by a ClassOfService for the StorageGroup.
d) Select the volumes required by the application into a VolumeCollection.
e) Assuming the above StorageService(), POST to StorageServices(1)/StorageGroups
{
"Name": "SG_abc_005",
"Description": "System SATA",
"VolumesAreExposed": false,
"MembersAreConsistent": true,
"AccessState": "Active/Optimized",
"ClientEndpointGroups": {
"Members": [
{"@odata.id": "/redfish/v1/StorageServices(1/ClientEndpointGroups(Path1)"},
{"@odata.id": "/redfish/v1/StorageServices(1/ClientEndpointGroups(Path2)"}
]
},
"ServerEndpointGroups": {
"Members": [
{"@odata.id": "/redfish/v1/StorageServices(1/ServerEndpointGroups(PathA)"},
{"@odata.id": "/redfish/v1/StorageServices(1/ServerEndpointGroups(PathB)"}
]
},
"Volumes": {
"Members": [
{"@odata.id": /redfish/v1/StorageServices(1)/Volumes(223)},
{"@odata.id": /redfish/v1/StorageServices(1)/Volumes(537)} ]
},
"Links": {
"ClassOfService": {"@odata.id": "/redfish/v1/StorageServices(1/ClassesOfService(SSD)"}
}
}
|
|
|
Post by Venkatesh Periyasamy on May 12, 2017 6:56:37 GMT
Thanks a lot. Now i got clear picture for Storage Pool creation.
But for StorageGroup, I am seeing the discrepancy between the schema and above mentioned input mockup. For example, As per schema, Volumes part of storage group will be represented in Navigation Property to collection of Volumes i.e. as like below (https://swordfish.mockable.io/redfish/v1/StorageServices/1/StorageGroups/3)
"Volumes": { "@odata.id": "/redfish/v1/StorageServices/1/StorageGroups/3/Volumes" }
But in your input mockup , it is a collection of reference to volumes. So which means, for only create, do we need follow this convention?
"Volumes": [ { "@odata.id": "/redfish/v1/StorageServices/1/Volumes/3" } ]
|
|
|
Post by Richelle Ahlvers on May 17, 2017 22:47:14 GMT
Yes, this should be pointing to the instance of the volume and not to the collection.
|
|
|
Post by Venkatesh Periyasamy on May 19, 2017 9:53:40 GMT
Thank You..
So , For GET requests, volumes property to points to collection and for POST(i.e Create) request,It will point to the instances.
|
|