// Copyright (c) 2009 DMTF.  All rights reserved.
   [Version ( "2.22.0" ), 
    UMLPackagePath ( "CIM::Core::Resource" ), 
    Description ( 
       "This service provides for active management of Resource Pools. "
       "It allows jobs to be started for the creation and deletion of "
       "ResourcePools as well as addition and subtraction of host "
       "resources from ResourcePools" )]
class CIM_ResourcePoolConfigurationService : CIM_Service {


      [Description ( 
          "Starts a job to create a root ResourcePool. The "
          "ResourcePool will be scoped to the same System as this "
          "Service. 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. The resulting pool will be "
          "a root pool with no parent pool." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "..", 
          "4096", "4097", "4098..32767", "32768..65535" }, 
       Values { "Job Completed with No Error", "Not Supported", 
          "Unknown", "Timeout", "Failed", "Invalid Parameter", 
          "In Use", "Incorrect ResourceType for the Pool", 
          "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Size Not Supported", "Method Reserved", "Vendor Specific" }]
   uint32 CreateResourcePool(
         [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." )]
      string ElementName, 
         [IN, Description ( 
             "Array of zero or more devices that are used to "
             "create the Pool or modify the source extents. All "
             "elements in the array must be of the same type." )]
      CIM_LogicalDevice REF HostResources[], 
         [IN, Description ( 
             "The type of resources the created poolwill manage. "
             "If HostResources contains elements, this property "
             "must mach their type." )]
      string ResourceType, 
         [IN ( false ), OUT, Description ( 
             "On success, a reference to the resulting "
             "ResourcePool is returned. When a Job is returned, "
             "this may be NULL, in which case, the client must "
             "use the Job to find the resulting ResourcePool "
             "once the Job completes." )]
      CIM_ResourcePool REF Pool, 
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if job completed)."
              )]
      CIM_ConcreteJob REF Job);

      [Description ( 
          "Start a job to create a sub-pool from a parent pool "
          "using the specified allocation settings 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 "
          "sub-pool. The Job\'s reference will be returned in the "
          "output parameter Job." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", "..", 
          "4096", "4097", "4098..32767", "32768..65535" }, 
       Values { "Job Completed with No Error", "Not Supported", 
          "Unknown", "Timeout", "Failed", "Invalid Parameter", 
          "In Use", "Incorrect ResourceType for the Pool", 
          "Insufficient Resources", "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Size Not Supported", "Method Reserved", "Vendor Specific" }]
   uint32 CreateChildResourcePool(
         [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 element." )]
      string ElementName, 
         [IN, Description ( 
             "String containing a representation of a "
             "CIM_SettingData instance that is used to specify "
             "the settings for the child Pool." ), 
          EmbeddedInstance ( "CIM_ResourceAllocationSettingData" ), 
          ModelCorrespondence { 
             "CIM_ResourcePoolConfigurationService.CreateChildResourcePool.ParentPool" }]
      string Settings[], 
         [IN, Description ( 
             "The Pool(s) from which to create the new Pool." ), 
          ModelCorrespondence { 
             "CIM_ResourcePoolConfigurationService.CreateChildResourcePool.Settings" }]
      CIM_ResourcePool REF ParentPool[], 
         [IN ( false ), OUT, Description ( 
             "A reference to the resulting pool." )]
      CIM_ResourcePool REF Pool, 
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if job completed)."
              )]
      CIM_ConcreteJob REF Job);

      [Description ( 
          "Start a job to delete a ResourcePool. No allocations may "
          "be outstanding or the delete will fail with \"In Use.\" "
          "If the resource pool is a root resource pool, any host "
          "resources are returned back to the underlying system. 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 "
          "ResourcePool. A reference to the Job is returned in the "
          "Job parameter." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "..", 
          "4096", "4097..32767", "32768..65535" }, 
       Values { "Job Completed with No Error", "Not Supported", 
          "Unknown", "Timeout", "Failed", "Invalid Parameter", 
          "In Use", "Incorrect ResourceType for the Pool", 
          "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Method Reserved", "Vendor Specific" }]
   uint32 DeleteResourcePool(
         [IN, Description ( "Reference to the pool to delete." )]
      CIM_ResourcePool REF Pool, 
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if job completed)."
              )]
      CIM_ConcreteJob REF Job);

      [Description ( 
          "Starts a job to add resources to a ResourcePool. 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. The resulting pool will be a root pool "
          "with no parent pool." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "..", 
          "4096", "4097", "4098..32767", "32768..65535" }, 
       Values { "Job Completed with No Error", "Not Supported", 
          "Unknown", "Timeout", "Failed", "Invalid Parameter", 
          "In Use", "Incorrect ResourceType for the Pool", 
          "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Size Not Supported", "Method Reserved", "Vendor Specific" }]
   uint32 AddResourcesToResourcePool(
         [IN, Description ( 
             "Array of CIM_LogicalDevice instances to add to the Pool."
              )]
      CIM_LogicalDevice REF HostResources[], 
         [IN, Description ( "The pool to add the resources to." )]
      CIM_ResourcePool REF Pool, 
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if job completed)."
              )]
      CIM_ConcreteJob REF Job);

      [Description ( 
          "Starts a job to remove resources from a ResourcePool. 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. The resulting pool will be a root pool "
          "with no parent pool." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "..", 
          "4096", "4097", "4098..32767", "32768..65535" }, 
       Values { "Job Completed with No Error", "Not Supported", 
          "Unknown", "Timeout", "Failed", "Invalid Parameter", 
          "In Use", "Incorrect ResourceType for the Pool", 
          "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Size Not Supported", "Method Reserved", "Vendor Specific" }]
   uint32 RemoveResourcesFromResourcePool(
         [IN, Description ( 
             "Array of CIM_LogicalDevice instances to remove from the Pool."
              )]
      CIM_LogicalDevice REF HostResources[], 
         [IN, Description ( 
             "The pool to remove the resources from." )]
      CIM_ResourcePool REF Pool, 
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if job completed)."
              )]
      CIM_ConcreteJob REF Job);

      [Description ( 
          "Start a job to change a parent pool using the specified "
          "allocation settings 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 change the parent pool. The Job\'s "
          "reference will be returned in the output parameter Job." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", "..", 
          "4096", "4097", "4098..32767", "32768..65535" }, 
       Values { "Job Completed with No Error", "Not Supported", 
          "Unknown", "Timeout", "Failed", "Invalid Parameter", 
          "In Use", "Incorrect ResourceType for the Pool", 
          "Insufficient Resources", "DMTF Reserved", 
          "Method Parameters Checked - Job Started", 
          "Size Not Supported", "Method Reserved", "Vendor Specific" }]
   uint32 ChangeParentResourcePool(
         [IN, Description ( "Reference to the child pool." )]
      CIM_ResourcePool REF ChildPool, 
         [IN, Description ( "Reference to the parent pool(s)." )]
      CIM_ResourcePool REF ParentPool[], 
         [IN, Description ( 
             "Optional string containing a representation of a "
             "CIM_SettingData instance that is used to specify "
             "the settings for the Parent Pool." ), 
          EmbeddedInstance ( "CIM_ResourceAllocationSettingData" ), 
          ModelCorrespondence { 
             "CIM_ResourcePoolConfigurationService.ChangeParentResourcePool.Settings" }]
      string Settings[], 
         [IN ( false ), OUT, Description ( 
             "Reference to the job (may be null if job completed)."
              ), 
          ModelCorrespondence { 
             "CIM_ResourcePoolConfigurationService.ChangeParentResourcePool.ParentPool" }]
      CIM_ConcreteJob REF Job);

};
