@@ -3269,17 +3269,20 @@ protected ServiceOfferingVO createServiceOffering(final long userId, final boole
32693269
32703270 DiskOfferingVO diskOffering = null ;
32713271 if (diskOfferingId == null ) {
3272- diskOffering = createDiskOfferingInternal (userId , isSystem , vmType ,
3273- name , cpu , ramSize , speed , displayText , typedProvisioningType , localStorageRequired ,
3274- offerHA , limitResourceUse , volatileVm , tags , domainIds , zoneIds , hostTag ,
3275- networkRate , deploymentPlanner , details , rootDiskSizeInGiB , isCustomizedIops , minIops , maxIops ,
3272+ diskOffering = createDiskOfferingInternal (
3273+ name , displayText , typedProvisioningType , localStorageRequired ,
3274+ tags , details , rootDiskSizeInGiB , isCustomizedIops , minIops , maxIops ,
32763275 bytesReadRate , bytesReadRateMax , bytesReadRateMaxLength ,
32773276 bytesWriteRate , bytesWriteRateMax , bytesWriteRateMaxLength ,
32783277 iopsReadRate , iopsReadRateMax , iopsReadRateMaxLength ,
32793278 iopsWriteRate , iopsWriteRateMax , iopsWriteRateMaxLength ,
32803279 hypervisorSnapshotReserve , cacheMode , storagePolicyID , encryptRoot );
32813280 } else {
32823281 diskOffering = _diskOfferingDao .findById (diskOfferingId );
3282+ String diskStoragePolicyId = diskOfferingDetailsDao .getDetail (diskOfferingId , ApiConstants .STORAGE_POLICY );
3283+ if (storagePolicyID != null && diskStoragePolicyId != null ) {
3284+ throw new InvalidParameterValueException ("Storage policy cannot be defined on both compute and disk offering" );
3285+ }
32833286 }
32843287 if (diskOffering != null ) {
32853288 serviceOffering .setDiskOfferingId (diskOffering .getId ());
@@ -3319,10 +3322,8 @@ public void validateExtraConfigInServiceOfferingDetail(String detailName) {
33193322 }
33203323 }
33213324
3322- private DiskOfferingVO createDiskOfferingInternal (final long userId , final boolean isSystem , final VirtualMachine .Type vmType ,
3323- final String name , final Integer cpu , final Integer ramSize , final Integer speed , final String displayText , final ProvisioningType typedProvisioningType , final boolean localStorageRequired ,
3324- final boolean offerHA , final boolean limitResourceUse , final boolean volatileVm , String tags , final List <Long > domainIds , List <Long > zoneIds , final String hostTag ,
3325- final Integer networkRate , final String deploymentPlanner , final Map <String , String > details , Long rootDiskSizeInGiB , final Boolean isCustomizedIops , Long minIops , Long maxIops ,
3325+ private DiskOfferingVO createDiskOfferingInternal (final String name , final String displayText , final ProvisioningType typedProvisioningType , final boolean localStorageRequired ,
3326+ String tags , final Map <String , String > details , Long rootDiskSizeInGiB , final Boolean isCustomizedIops , Long minIops , Long maxIops ,
33263327 Long bytesReadRate , Long bytesReadRateMax , Long bytesReadRateMaxLength ,
33273328 Long bytesWriteRate , Long bytesWriteRateMax , Long bytesWriteRateMaxLength ,
33283329 Long iopsReadRate , Long iopsReadRateMax , Long iopsReadRateMaxLength ,
@@ -3383,15 +3384,20 @@ private DiskOfferingVO createDiskOfferingInternal(final long userId, final boole
33833384 diskOffering .setHypervisorSnapshotReserve (hypervisorSnapshotReserve );
33843385
33853386 if ((diskOffering = _diskOfferingDao .persist (diskOffering )) != null ) {
3386- if (details != null && !details .isEmpty ()) {
3387- List <DiskOfferingDetailVO > diskDetailsVO = new ArrayList <DiskOfferingDetailVO >();
3387+ if (( details != null && !details .isEmpty ()) || ( storagePolicyID != null )) {
3388+ List <DiskOfferingDetailVO > diskDetailsVO = new ArrayList <>();
33883389 // Support disk offering details for below parameters
33893390 if (details .containsKey (Volume .BANDWIDTH_LIMIT_IN_MBPS )) {
33903391 diskDetailsVO .add (new DiskOfferingDetailVO (diskOffering .getId (), Volume .BANDWIDTH_LIMIT_IN_MBPS , details .get (Volume .BANDWIDTH_LIMIT_IN_MBPS ), false ));
33913392 }
33923393 if (details .containsKey (Volume .IOPS_LIMIT )) {
33933394 diskDetailsVO .add (new DiskOfferingDetailVO (diskOffering .getId (), Volume .IOPS_LIMIT , details .get (Volume .IOPS_LIMIT ), false ));
33943395 }
3396+
3397+ if (storagePolicyID != null ) {
3398+ diskDetailsVO .add (new DiskOfferingDetailVO (diskOffering .getId (), ApiConstants .STORAGE_POLICY , String .valueOf (storagePolicyID ), false ));
3399+ }
3400+
33953401 if (!diskDetailsVO .isEmpty ()) {
33963402 diskOfferingDetailsDao .saveDetails (diskDetailsVO );
33973403 }
0 commit comments