// Copyright (c) 2005 DMTF.  All rights reserved.
   [Version ( "2.11.0" ), 
    UMLPackagePath ( "CIM::Device::StorageServices" ), 
    Description ( 
       "This service allows the active management of a Storage Server. "
       "It allows jobs to be started for the creation, modification "
       "and deletion of storage objects (StoragePools, StorageVolumes "
       "and LogicalDisks)." )]
class CIM_StorageConfigurationService : CIM_Service {


      [Description ( 
          "Starts a job to create (or modify) a StoragePool. The "
          "StoragePool will be (or must be) scoped to the same "
          "System as this Service. One of the parameters for this "
          "method is Size. As an input parameter, Size specifies "
          "the desired size of the pool. As an output parameter, it "
          "specifies the size achieved. Space is taken from either "
          "or both of the specified input StoragePools and "
          "StorageExtents (InPools and InExtents). The capability "
          "requirements that the Pool must support are defined "
          "using the Goal parameter. If the requested pool size "
          "cannot be created, no action will be taken, the Return "
          "Value will be 4097/0x1001, and the output value of Size "
          "will be set to the nearest possible size. If 0 is "
          "returned, then the task completed successfully and the "
          "use of ConcreteJob was not required. If the task will "
          "take some time to complete, a ConcreteJob will be "
          "created and its reference returned in the output "
          "parameter Job." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "..", "4096", 
          "4097", "4098..32767", "32768..65535" }, 
       Values { "Job Completed with No Error", "Not Supported", 
          "Unknown", "Timeout", "Failed", "Invalid Parameter", 
          "In Use", "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Size Not Supported", "Method Reserved", "Vendor Specific" }]
   uint32 CreateOrModifyStoragePool(
         [IN, Description ( 
             "A end user relevant name for the pool being "
             "created. If NULL, then a system supplied default "
             "name can be used. The value will be stored in the "
             "\'ElementName\' property for the created pool. If "
             "not NULL, this parameter will supply a new name "
             "when modifying an existing pool." )]
      string ElementName, 
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if job completed)."
              )]
      CIM_ConcreteJob REF Job, 
         [IN, Description ( 
             "Reference to an instance of StorageSetting that "
             "defines the desired capabilities of the "
             "StoragePool. If set to a null value, the default "
             "configuration from the source pool will be used. "
             "If not NULL, this parameter will supply a new Goal "
             "setting when modifying an existing pool." )]
      CIM_StorageSetting REF Goal, 
         [IN, OUT, Description ( 
             "As an input parameter this specifies the desired "
             "pool size in bytes. As an output parameter this "
             "specifies the size achieved." ), 
          Units ( "Bytes" )]
      uint64 Size, 
         [IN, Description ( 
             "Array of strings containing representations of "
             "references to CIM_StoragePool instances, that are "
             "used to create the Pool or modify the source "
             "pools." )]
      string InPools[], 
         [IN, Description ( 
             "Array of strings containing representations of "
             "references to CIM_StorageExtent instances, that "
             "are used to create the Pool or modify the source "
             "extents." )]
      string InExtents[], 
         [IN, OUT, Description ( 
             "As an input parameter: if null, creates a new "
             "StoragePool. If not null, modifies the referenced "
             "Pool. When returned, it is a reference to the "
             "resulting StoragePool." )]
      CIM_StoragePool REF Pool);

      [Description ( 
          "Start a job to create (or modify) a specified element "
          "(for example a StorageVolume or StorageExtent) from a "
          "StoragePool. One of the parameters for this method is "
          "Size. As an input parameter, Size specifies the desired "
          "size of the element. As an output parameter, it "
          "specifies the size achieved. Space is taken from the "
          "input StoragePool. The desired settings for the element "
          "are specified by the Goal parameter. If the requested "
          "size cannot be created, no action will be taken, and the "
          "Return Value will be 4097/0x1001. Also, the output value "
          "of Size is set to the nearest possible size. If 0 is "
          "returned, the function completed successfully and no "
          "ConcreteJob instance was required. If 4096/0x1000 is "
          "returned, a ConcreteJob will be started to create the "
          "element. The Job\'s reference will be returned in the "
          "output parameter Job." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "..", "4096", 
          "4097", "4098..32767", "32768..65535" }, 
       Values { "Job Completed with No Error", "Not Supported", 
          "Unknown", "Timeout", "Failed", "Invalid Parameter", 
          "In Use", "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Size Not Supported", "Method Reserved", "Vendor Specific" }]
   uint32 CreateOrModifyElementFromStoragePool(
         [IN, Description ( 
             "A end user relevant name for the element being "
             "created. If NULL, then a system supplied default "
             "name can be used. The value will be stored in the "
             "\'ElementName\' property for the created element. "
             "If not NULL, this parameter will supply a new name "
             "when modifying an existing element." )]
      string ElementName, 
         [IN, Description ( 
             "Enumeration indicating the type of element being "
             "created or modified. If the input parameter "
             "TheElement is specified when the operation is a "
             "\'modify\', this type value must match the type of "
             "that instance." ), 
          ValueMap { "0", "1", "2", "3", "4", "..", "32768..65535" }, 
          Values { "Unknown", "Reserved", "StorageVolume", 
             "StorageExtent", "LogicalDisk", "DMTF Reserved", 
             "Vendor Specific" }]
      uint16 ElementType, 
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if job completed)."
              )]
      CIM_ConcreteJob REF Job, 
         [IN, Description ( 
             "The requirements for the element to maintain. If "
             "set to a null value, the default configuration "
             "from the source pool will be used. This parameter "
             "should be a reference to a Setting or Profile "
             "appropriate to the element being created. If not "
             "NULL, this parameter will supply a new Goal when "
             "modifying an existing element." )]
      CIM_ManagedElement REF Goal, 
         [IN, OUT, Description ( 
             "As an input parameter Size specifies the desired "
             "size. If not NULL, this parameter will supply a "
             "new size when modifying an existing element. As an "
             "output parameter Size specifies the size achieved." ), 
          Units ( "Bytes" )]
      uint64 Size, 
         [IN, Description ( 
             "The Pool from which to create the element. This "
             "parameter must be set to null if the input "
             "parameter TheElement is specified (in the case of "
             "a \'modify\' operation)." )]
      CIM_StoragePool REF InPool, 
         [IN, OUT, Description ( 
             "As an input parameter: if null, creates a new "
             "element. If not null, then the method modifies the "
             "specified element. As an output parameter, it is a "
             "reference to the resulting element." )]
      CIM_LogicalElement REF TheElement);

      [Description ( 
          "Start a job to delete a StoragePool. The freed space is "
          "returned source StoragePools (indicated by AllocatedFrom "
          "StoragePool) or back to underlying storage extents. If 0 "
          "is returned, the function completed successfully, and no "
          "ConcreteJob was required. If 4096/0x1000 is returned, a "
          "ConcreteJob will be started to delete the StoragePool. A "
          "reference to the Job is returned in the Job parameter." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "..", "4096", 
          "4097..32767", "32768..65535" }, 
       Values { "Job Completed with No Error", "Not Supported", 
          "Unknown", "Timeout", "Failed", "Invalid Parameter", 
          "In Use", "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Method Reserved", "Vendor Specific" }]
   uint32 DeleteStoragePool(
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if job completed)."
              )]
      CIM_ConcreteJob REF Job, 
         [IN, Description ( "Reference to the pool to delete." )]
      CIM_StoragePool REF Pool);

      [Description ( 
          "Start a job to delete an element previously created from "
          "a StoragePool. The freed space is returned to the source "
          "StoragePool. If 0 is returned, the function completed "
          "successfully and no ConcreteJob was required. If "
          "4096/0x1000 is returned, a ConcreteJob will be started "
          "to delete the element. A reference to the Job is "
          "returned in the Job parameter." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "..", "4096", 
          "4097..32767", "32768..65535" }, 
       Values { "Job Completed with No Error", "Not Supported", 
          "Unknown", "Timeout", "Failed", "Invalid Parameter", 
          "In Use", "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Method Reserved", "Vendor Specific" }]
   uint32 ReturnToStoragePool(
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if job completed)."
              )]
      CIM_ConcreteJob REF Job, 
         [IN, Description ( 
             "Reference to the element to return to the StoragePool."
              )]
      CIM_LogicalElement REF TheElement);

      [Description ( 
          "Start a job to create a new storage object which is a "
          "replica of the specified source storage object. "
          "(SourceElement). Note that using the input paramter, "
          "CopyType, this function can be used to instantiate the "
          "replica, and to create an ongoing association between "
          "the source and replica. If 0 is returned, the function "
          "completed successfully and no ConcreteJob instance is "
          "created. If 4096/0x1000 is returned, a ConcreteJob is "
          "started, a reference to which is returned in the Job "
          "output parameter." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "..", "4096", 
          "4097..32767", "32768..65535" }, 
       Values { "Job Completed with No Error", "Not Supported", 
          "Unknown", "Timeout", "Failed", "Invalid Parameter", 
          "In Use", "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Method Reserved", "Vendor Specific" }]
   uint32 CreateReplica(
         [IN, Description ( 
             "A end user relevant name for the element being "
             "created. If NULL, then a system supplied default "
             "name can be used. The value will be stored in the "
             "\'ElementName\' property for the created element." )]
      string ElementName, 
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if job completed)."
              )]
      CIM_ConcreteJob REF Job, 
         [Required, IN, Description ( 
             "The source storage object which may be a "
             "StorageVolume or storage object." )]
      CIM_LogicalElement REF SourceElement, 
         [IN ( false ), OUT, Description ( 
             "Reference to the created target storage element "
             "(i.e., the replica)." )]
      CIM_LogicalElement REF TargetElement, 
         [IN, Description ( 
             "The definition for the StorageSetting to be "
             "maintained by the target storage object (the "
             "replica)." )]
      CIM_StorageSetting REF TargetSettingGoal, 
         [IN, Description ( 
             "The underlying storage for the target element (the "
             "replica) will be drawn from TargetPool if "
             "specified, otherwise the allocation is "
             "implementation specific." )]
      CIM_StoragePool REF TargetPool, 
         [IN, Description ( 
             "CopyType describes the type of copy that will be "
             "made. Values are: \n"
             "Async: Create and maintain an asynchronous copy of "
             "the source. \n"
             "Sync: Create and maintain a synchronized copy of "
             "the source. \n"
             "UnSyncAssoc: Create an unsynchronized copy and "
             "maintain an association to the source. \n"
             "UnSyncUnAssoc: Create unassociated copy of the "
             "source element." ), 
          ValueMap { "2", "3", "4", "5", "..", "32768..65535" }, 
          Values { "Async", "Sync", "UnSyncAssoc", 
             "UnSyncUnAssoc", "DMTF Reserved", "Vendor Specific" }]
      uint16 CopyType);

      [Description ( 
          "Modify (or start a job to modify) the synchronization "
          "association between two storage objects. If 0 is "
          "returned, the function completed successfully and no "
          "ConcreteJob instance was created. If 0x1000 is returned, "
          "a ConcreteJob was started and a reference to this Job is "
          "returned in the Job output parameter. A return value of "
          "1 indicates the method is not supported. All other "
          "values indicate some type of error condition." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "..", "0x1000", 
          "0x1001..0x7FFF", "0x8000..0xFFFF" }, 
       Values { "Job Completed with No Error", "Not Supported", 
          "Unspecified Error", "Timeout", "Failed", 
          "Invalid Parameter", "In Use", "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Method Reserved", "Vendor Specific" }]
   uint32 ModifySynchronization(
         [IN, Description ( 
             "Operation describes the type of modification to be "
             "made to the replica. Values are: \n"
             "Detach: \'Forget\' the synchronization between two "
             "storage objects. Start to treat the objects as "
             "independent. \n"
             "Fracture: Suspend the synchronization between two "
             "storage objects using Sync or Async replication. \n"
             "The association and (typically) changes are "
             "remembered to allow a fast resynchronization. This "
             "may be used during a backup cycle to allow one of "
             "the objects to be copied while the other remains "
             "in production. \n"
             "Resync Replica: Re-establish the synchronization "
             "of a Sync or Async replication. This will negate "
             "the action of a previous Fracture operation. "
             "Recreate a Point In Time image for an UnSyncAssoc "
             "replication. \n"
             "Restore from Replica: Renew the contents of the "
             "original storage object from a replica. \n"
             "Prepare: Get the link ready for a Resync operation "
             "to take place. Some implementations will require "
             "this operation to be invoked to keep the Resync "
             "operation as fast as possible. May start the copy "
             "engine. \n"
             "Unprepare: Clear a prepared state if a Prepare is "
             "not to be followed by a Resync operation. \n"
             "Quiesce: Some applications require notification so "
             "that they can ready the link for an operation. For "
             "example flush any cached data or buffered changes. "
             "The copy engine is stopped for UnSyncAssoc "
             "replications. \n"
             "Unquiesce: Take the link from the quiesced state "
             "(without executing the intended operation. \n"
             "Start Copy: initiate a full background copy of the "
             "source to the UnSyncAssoc replica. Replica enters "
             "Frozen state when copy operation is completed. \n"
             "Stop Copy: stop the background copy previously "
             "started. Reset To Sync: Change the CopyType of the "
             "association to Sync (e.g., from the Async "
             "CopyType). \n"
             "Reset To Async: Change the CopyType of the "
             "association to Async (e.g., from the Sync "
             "CopyType)." ), 
          ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", 
             "9", "10", "11", "12", "13", "..", "0x8000..0xFFFF" }, 
          Values { "DMTF Reserved", "DMTF Reserved", "Detach", 
             "Fracture", "Resync Replica", 
             "Restore from Replica", "Prepare", "Unprepare", 
             "Quiesce", "Unquiesce", "Reset To Sync", 
             "Reset To Async", "Start Copy", "Stop Copy", 
             "DMTF Reserved", "Vendor Specific" }]
      uint16 Operation, 
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if the task completed)."
              )]
      CIM_ConcreteJob REF Job, 
         [IN, Description ( 
             "The referenced to the StorageSynchronized "
             "association describing the storage source/replica "
             "relationship." )]
      CIM_StorageSynchronized REF Synchronization);

      [Description ( 
          "Create (or start a job to create) a StorageSynchronized "
          "relationship between two existing storage objects. Note "
          "that using the input parameter, CopyType, this function "
          "can be used to to create an ongoing association between "
          "the source and replica. If 0 is returned, the function "
          "completed successfully and no ConcreteJob instance is "
          "created. If 0x1000 is returned, a ConcreteJob is "
          "started, a reference to which is returned in the Job "
          "output parameter. A return value of 1 indicates the "
          "method is not supported. All other values indicate some "
          "type of error condition." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "..", "0x1000", 
          "0x1001..0x7FFF", "0x8000..0xFFFF" }, 
       Values { "Job Completed with No Error", "Not Supported", 
          "Unspecified Error", "Timeout", "Failed", 
          "Invalid Parameter", "In Use", "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Method Reserved", "Vendor Specific" }]
   uint32 AttachReplica(
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if the task completed)."
              )]
      CIM_ConcreteJob REF Job, 
         [Required, IN, Description ( 
             "The source storage object which may be a "
             "StorageVolume or other storage object." )]
      CIM_ManagedElement REF SourceElement, 
         [IN, Description ( 
             "Reference to the target storage element (i.e., the replica)."
              )]
      CIM_ManagedElement REF TargetElement, 
         [IN, Description ( 
             "CopyType describes the type of Synchronized "
             "relationship that will be created. Values are: \n"
             "Async: Create and maintain an asynchronous copy of "
             "the source. \n"
             "Sync: Create and maintain a synchronized copy of "
             "the source. \n"
             "UnSyncAssoc: Create an unsynchronized copy and "
             "maintain an association to the source. \n"
             "UnSyncUnAssoc: Create unassociated copy of the "
             "source element." ), 
          ValueMap { "2", "3", "4", "5", "..", "0x8000..0xFFFF" }, 
          Values { "Async", "Sync", "UnSyncAssoc", 
             "UnSyncUnAssoc", "DMTF Reserved", "Vendor Specific" }]
      uint16 CopyType);

      [Description ( 
          "Start a job to create (or modify) a specified storage "
          "element from specified input StorageExtents. The created "
          "or modified storage element can be a StorageExtent, "
          "StorageVolume, LogicalDisk, or StoragePool. An input "
          "list of InElements must be specified. The "
          "GetAvailableExtents method can be used to get a list of "
          "valid extents that can be used to achieve a desired "
          "goal. Validity of the extents is determined by the "
          "implementation. As an input parameter, Size specifies "
          "the desired size of the element. As an output parameter, "
          "it specifies the size achieved. Space is taken from the "
          "input InElements. The desired Settings for the element "
          "are specified by the Goal parameter. If the size of "
          "Extents passed is less than the size requested, then the "
          "capacity is drawn from the extents in the order, left to "
          "right, that the Extents were specified. The partial "
          "consumption of an Extent is represented by an Extent for "
          "the capacity used and an Extent for the capacity not "
          "used. If the Size is NULL, then a configuration using "
          "all Extents passed will be attempted. If the requested "
          "size cannot be created, no action will be taken, and the "
          "Return Value will be 4097/0x1001. Also, the output value "
          "of Size is set to the nearest possible size. If 0 is "
          "returned, the function completed successfully and no "
          "ConcreteJob instance was required. If 4096/0x1000 is "
          "returned, a ConcreteJob will be started to create the "
          "element. The Job\'s reference will be returned in the "
          "output parameter Job." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "..", "4096", 
          "4097", "4098..32767", "32768..65535" }, 
       Values { "Completed with No Error", "Not Supported", 
          "Unknown", "Timeout", "Failed", "Invalid Parameter", 
          "In Use", "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Size Not Supported", "Method Reserved", "Vendor Specific" }]
   uint32 CreateOrModifyElementFromElements(
         [IN, Description ( 
             "A end user relevant name for the element being "
             "created. If NULL, then a system-supplied default "
             "name can be used. The value will be stored in the "
             "\'ElementName\' property for the created element. "
             "If not NULL, this parameter will supply a new name "
             "when modifying an existing element." )]
      string ElementName, 
         [Required, IN, Description ( 
             "Enumeration indicating the type of element being "
             "created or modified. If the input parameter "
             "TheElement is specified when the operation is a "
             "\'modify\', this type value must match the type of "
             "that instance. The actual CIM class of the created "
             "TheElement can be vendor-specific, but it must be "
             "a derived class of the appropriate CIM class -- "
             "i.e., CIM_StorageVolume, CIM_StorageExtent, "
             "CIM_LogicalDisk, or CIM_StoragePool." ), 
          ValueMap { "0", "1", "2", "3", "4", "5", "..", 
             "32768..65535" }, 
          Values { "Unknown", "Reserved", "Storage Volume", 
             "Storage Extent", "Storage Pool", "Logical Disk", 
             "DMTF Reserved", "Vendor Specific" }]
      uint16 ElementType, 
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if job completed)."
              )]
      CIM_ConcreteJob REF Job, 
         [IN, Description ( 
             "The requirements for the element to maintain. If "
             "set to a null value, the default configuration "
             "associated with the Service will be used. This "
             "parameter should be a reference to a Setting, "
             "SettingData, or Profile appropriate to the element "
             "being created. If not NULL, this parameter will "
             "supply a new Goal when modifying an existing "
             "element." )]
      CIM_ManagedElement REF Goal, 
         [IN, OUT, Description ( 
             "As an input parameter Size specifies the desired "
             "size. If not NULL, this parameter will supply a "
             "new size when modifying an existing element. As an "
             "output parameter Size specifies the size achieved." ), 
          Units ( "Bytes" )]
      uint64 Size, 
         [Required, IN, Description ( 
             "Array of references to storage element instances "
             "that are used to create or modify TheElement." )]
      CIM_StorageExtent REF InElements[], 
         [IN, OUT, Description ( 
             "As an input parameter: if null, creates a new "
             "element. If not null, then the method modifies the "
             "specified element. As an output parameter, it is a "
             "reference to the resulting element." )]
      CIM_LogicalElement REF TheElement);

};
