def storage(cartridge)
cartridges = Array(cartridge)
rest_client(:min_api => 1.3).api
rest_app = find_app(:include => :cartridges)
actions = options.__hash__.keys & [:show, :add, :remove, :set]
raise RHC::AdditionalStorageArgumentsException if actions.length > 1
operation = actions.first || :show
amount = options.__hash__[operation]
if operation == :show
results do
if cartridges.length == 0
display_cart_storage_list rest_app.cartridges
else
check_cartridges(cartridge, :from => rest_app.cartridges).each do |cart|
display_cart_storage_info cart, cart.display_name
end
end
end
else
raise RHC::MultipleCartridgesException,
'Exactly one cartridge must be specified for this operation' if cartridges.length != 1
rest_cartridge = check_cartridges(cartridge, :from => rest_app.cartridges).first
amount = amount.match(/^(\d+)(GB)?$/i)
raise RHC::AdditionalStorageValueException if amount.nil?
amount = amount[1].to_i
total_amount = rest_cartridge.additional_gear_storage
if operation == :add
total_amount += amount
elsif operation == :remove
if amount > total_amount && !options.force
raise RHC::AdditionalStorageRemoveException
else
total_amount = [total_amount - amount, 0].max
end
else
total_amount = amount
end
say "Set storage on cartridge ... "
cart = rest_cartridge.set_storage(:additional_gear_storage => total_amount)
success "set to #{total_amount}GB"
paragraph{ display_cart_storage_info cart }
end
0
end