Esempio n. 1
0
    def order_snapshot_space(self, volume_id, capacity, tier, upgrade,
                             **kwargs):
        """Orders snapshot space for the given file volume.

        :param integer volume_id: The id of the volume
        :param integer capacity: The capacity to order, in GB
        :param float tier: The tier level of the file volume, in IOPS per GB
        :param boolean upgrade: Flag to indicate if this order is an upgrade
        :return: Returns a SoftLayer_Container_Product_Order_Receipt
        """

        package = storage_utils.get_package(self, 'storage_service_enterprise')
        file_mask = 'serviceResource.datacenter[id],'\
            'storageTierLevel,billingItem'
        file_volume = self.get_file_volume_details(volume_id,
                                                   mask=file_mask,
                                                   **kwargs)

        storage_type = file_volume['billingItem']['categoryCode']
        if storage_type != 'storage_service_enterprise':
            raise exceptions.SoftLayerError(
                "File volume storage_type must be Endurance")

        if tier is None:
            tier = storage_utils.find_endurance_tier_iops_per_gb(file_volume)
        prices = [
            storage_utils.find_snapshot_space_price(package, capacity, tier)
        ]

        if upgrade:
            complex_type = 'SoftLayer_Container_Product_Order_'\
                           'Network_Storage_Enterprise_SnapshotSpace_Upgrade'
        else:
            complex_type = 'SoftLayer_Container_Product_Order_'\
                           'Network_Storage_Enterprise_SnapshotSpace'

        snapshot_space_order = {
            'complexType': complex_type,
            'packageId': package['id'],
            'prices': prices,
            'quantity': 1,
            'location': file_volume['serviceResource']['datacenter']['id'],
            'volumeId': volume_id,
        }

        return self.client.call('Product_Order', 'placeOrder',
                                snapshot_space_order)
Esempio n. 2
0
    def order_snapshot_space(self, volume_id, capacity, tier,
                             upgrade, **kwargs):
        """Orders snapshot space for the given file volume.

        :param integer volume_id: The id of the volume
        :param integer capacity: The capacity to order, in GB
        :param float tier: The tier level of the file volume, in IOPS per GB
        :param boolean upgrade: Flag to indicate if this order is an upgrade
        :return: Returns a SoftLayer_Container_Product_Order_Receipt
        """

        package = storage_utils.get_package(self, 'storage_service_enterprise')
        file_mask = 'serviceResource.datacenter[id],'\
            'storageTierLevel,billingItem'
        file_volume = self.get_file_volume_details(volume_id,
                                                   mask=file_mask,
                                                   **kwargs)

        storage_type = file_volume['billingItem']['categoryCode']
        if storage_type != 'storage_service_enterprise':
            raise exceptions.SoftLayerError(
                "File volume storage_type must be Endurance")

        if tier is None:
            tier = storage_utils.find_endurance_tier_iops_per_gb(file_volume)
        prices = [storage_utils.find_snapshot_space_price(
            package, capacity, tier)]

        if upgrade:
            complex_type = 'SoftLayer_Container_Product_Order_'\
                           'Network_Storage_Enterprise_SnapshotSpace_Upgrade'
        else:
            complex_type = 'SoftLayer_Container_Product_Order_'\
                           'Network_Storage_Enterprise_SnapshotSpace'

        snapshot_space_order = {
            'complexType': complex_type,
            'packageId': package['id'],
            'prices': prices,
            'quantity': 1,
            'location': file_volume['serviceResource']['datacenter']['id'],
            'volumeId': volume_id,
        }

        return self.client.call('Product_Order', 'placeOrder',
                                snapshot_space_order)
Esempio n. 3
0
    def order_file_volume(self,
                          storage_type,
                          location,
                          size,
                          os_type,
                          iops=None,
                          tier_level=None,
                          snapshot_size=None):
        """Places an order for a file volume.

        :param storage_type: "performance_storage_iscsi" (performance)
                             or "storage_service_enterprise" (endurance)
        :param location: Datacenter in which to order iSCSI volume
        :param size: Size of the desired volume, in GB
        :param os_type: OS Type to use for volume alignment, see help for list
        :param iops: Number of IOPs for a "Performance" order
        :param tier_level: Tier level to use for an "Endurance" order
        :param snapshot_size: The size of optional snapshot space,
        if snapshot space should also be ordered (None if not ordered)
        """

        try:
            location_id = storage_utils.get_location_id(self, location)
        except ValueError:
            raise exceptions.SoftLayerError(
                "Invalid datacenter name specified. "
                "Please provide the lower case short name (e.g.: dal09)")

        base_type_name = 'SoftLayer_Container_Product_Order_Network_'
        package = storage_utils.get_package(self, storage_type)
        if storage_type == 'performance_storage_nfs':
            complex_type = base_type_name + 'PerformanceStorage_Nfs'
            prices = [
                storage_utils.find_performance_price(
                    package, 'performance_storage_nfs'),
                storage_utils.find_performance_space_price(package, iops),
                storage_utils.find_performance_iops_price(package, size, iops),
            ]
        elif storage_type == 'storage_service_enterprise':
            complex_type = base_type_name + 'Storage_Enterprise'
            prices = [
                storage_utils.find_endurance_price(package, 'storage_file'),
                storage_utils.find_endurance_price(
                    package, 'storage_service_enterprise'),
                storage_utils.find_endurance_space_price(
                    package, size, tier_level),
                storage_utils.find_endurance_tier_price(package, tier_level),
            ]
            if snapshot_size is not None:
                prices.append(
                    storage_utils.find_snapshot_space_price(
                        package, snapshot_size, tier_level))
        else:
            raise exceptions.SoftLayerError(
                "File volume storage_type must be either "
                "Performance or Endurance")

        order = {
            'complexType': complex_type,
            'packageId': package['id'],
            'osFormatType': {
                'keyName': os_type
            },
            'prices': prices,
            'quantity': 1,
            'location': location_id,
        }

        return self.client.call('Product_Order', 'placeOrder', order)
Esempio n. 4
0
    def order_block_volume(self, storage_type, location, size, os_type,
                           iops=None, tier_level=None, snapshot_size=None):
        """Places an order for a block volume.

        :param storage_type: "performance_storage_iscsi" (performance)
                             or "storage_service_enterprise" (endurance)
        :param location: Datacenter in which to order iSCSI volume
        :param size: Size of the desired volume, in GB
        :param os_type: OS Type to use for volume alignment, see help for list
        :param iops: Number of IOPs for a "Performance" order
        :param tier_level: Tier level to use for an "Endurance" order
        :param snapshot_size: The size of optional snapshot space,
        if snapshot space should also be ordered (None if not ordered)
        """

        try:
            location_id = storage_utils.get_location_id(self, location)
        except ValueError:
            raise exceptions.SoftLayerError(
                "Invalid datacenter name specified. "
                "Please provide the lower case short name (e.g.: dal09)")

        base_type_name = 'SoftLayer_Container_Product_Order_Network_'
        package = storage_utils.get_package(self, storage_type)
        if storage_type == 'performance_storage_iscsi':
            complex_type = base_type_name + 'PerformanceStorage_Iscsi'
            prices = [
                storage_utils.find_performance_price(
                    package,
                    'performance_storage_iscsi'
                    ),
                storage_utils.find_performance_space_price(package, iops),
                storage_utils.find_performance_iops_price(package, size, iops),
            ]
        elif storage_type == 'storage_service_enterprise':
            complex_type = base_type_name + 'Storage_Enterprise'
            prices = [
                storage_utils.find_endurance_price(package, 'storage_block'),
                storage_utils.find_endurance_price(
                    package,
                    'storage_service_enterprise'
                    ),
                storage_utils.find_endurance_space_price(
                    package,
                    size,
                    tier_level
                    ),
                storage_utils.find_endurance_tier_price(package, tier_level),
            ]
            if snapshot_size is not None:
                prices.append(storage_utils.find_snapshot_space_price(
                    package, snapshot_size, tier_level))
        else:
            raise exceptions.SoftLayerError(
                "Block volume storage_type must be either "
                "Performance or Endurance")

        order = {
            'complexType': complex_type,
            'packageId': package['id'],
            'osFormatType': {'keyName': os_type},
            'prices': prices,
            'quantity': 1,
            'location': location_id,
        }

        return self.client.call('Product_Order', 'placeOrder', order)