I'm still becoming familiar with the schema so I am sorry if I ask something painfully obvious or am a bit unclear at times. I'm having a bit of trouble understanding the final flow of the schema when it comes to specific operations. I see many of the pieces and how they could come together but the final integration is not apparent to me. For instance, the allocation/creation of a volume by an api user. I see the way that a volume will be configured with the ClassOfService and RaidType properties (Though raidtype doesn't seem to be used just yet) but I don't see where the Post should take place to actually create the volume. Should I be posting with the configuration args on the AllocatedVolumes property of a storagepool (I believe that is allowed with contains target) or some kind of global volume collection? Also, it doesn't look like volumes are insertable on swordfish volume collections anyways though they are on redfish which makes me think I am further off base.
Any help would be greatly appreciated. Thanks! Paul Greco
The clarification: When ContainsTarget="true" is specified on an entitytype named xxxCollection, where xxx is the entitytype being collected, the containment is on the instance of xxxCollection and not on the collected entitytypes. Thus the list of collected elements is contained in the entity that declares the contained property and nothing is said about the collected elements (i.e. the corresponding Members collection).
On volume: The model supports three, possibly related collections of volumes. 1) In Storage: The Volumes collection lists volumes created by the storage subsystem represented by the Storage entity. A POST to this collection is a directive to the storage subsystem to create a volume.
If a StorageService manages the Storage entity, I would expect that the implementation would additionally add the new volume to the StorageService Volumes collection. If the implementation allocates the new volume from a StoragePool, then it should also be added to the StoragePool's AllocatedVolumes collection.
2) In StoragePool: The AllocatedVolumes collection lists volumes allocated from that storage pool. A POST to this collection is a directive to the storage service to create a volume from that StoragePool. Note: that a Volume may be created using space from more than one storage pool, but in this use the CapacitySources property should be null in the POST payload. This allows the StoragePool implementation to provide the needed capacity.
If the new volume is managed directly by a storage subsystem as in 1, it should also be added to that entities Volumes collection. The new volume should also be added to the StorageService that manages the StoragePool.
3) In StorageService: The Volumes collection lists volumes created by the storage service represented by the StorageService entity. A POST to this collection is a directive to the storage service to create a volume.
If the new volume is managed directly by a storage subsystem as in 1, it should also be added to that entities Volumes collection. If the implementation allocates the new volume from a StoragePool, then it should also be added to the StoragePool's AllocatedVolumes collection.
In all of these cases, the Volume payload in the POST must specify choices that are not left to the implementation.
On Insertability: Use of the OData InsertRestrictions and related annotations is still a work in progress. Currently these OData annotations only apply to EntitySets. Redfish schema is specifying this annotation on EntityTypes.
Post by Richelle Ahlvers on Nov 20, 2018 15:42:07 GMT
To specifically address your question about RAIDType: RAIDType has been added as a property in the 1.0.7a release, which has just been approved for release, and should be available on the websites this week. It is available as a property in volume.
If the implementation is such that the selected class of service specification can automatically select the RAID type of the volume for you, the property does not need to be used. Otherwise, this property should be sent by the client on a POST request when creating a volume.
(Or, if you want to ask the implementation to specifically set a specific RAID type - which may or may not be supported by the implementation.)