1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/openstack/examples/storage/set-account-quota.rb

66 lines
2.2 KiB
Ruby

require 'fog'
require 'pp'
#
# This example sets the account quota (in bytes) for the tenant demo@test.lan
# using an admin account (admin has the reseller user role).
#
# Uses the account impersonation feature recently added to the
# OpenStack Storage service in Fog (See https://github.com/fog/fog/pull/1632).
#
# Should be available in Fog 1.10.0+1.
#
# Setting account quotas is only supported in Swift 1.8.0+
# using the brand new account_quota middleware introduced in
# OpenStack Grizzly (currently unreleased as of 2013/04/03).
#
# https://github.com/openstack/swift/blob/master/swift/common/middleware/account_quotas.py
#
auth_url = 'https://identity.test.lan/v2.0/tokens'
user = 'admin@test.lan'
password = 'secret'
Excon.defaults[:ssl_verify_peer] = false
#
# We are going to use the Identity (Keystone) service
# to retrieve the list of tenants available and find
# the tenant we want to set the quotas for.
#
id = Fog::Identity.new :provider => 'OpenStack',
:openstack_auth_url => auth_url,
:openstack_username => user,
:openstack_api_key => password
#
# Storage service (Swift)
#
st = Fog::Storage.new :provider => 'OpenStack',
:openstack_auth_url => auth_url,
:openstack_username => user,
:openstack_api_key => password
id.tenants.each do |t|
# We want to set the account quota for tenant demo@test.lan
next unless t.name == 'demo@test.lan'
# We've found the tenant, impersonate the account
# (the account prefix AUTH_ may be different for you, double check it).
puts "Changing account to #{t.name}"
st.change_account "AUTH_#{t.id}"
# Now we're adding the required header to the demo@test.lan
# tenant account, limiting the account bytes to 1048576 (1MB)
#
# Uploading more than 1MB will return 413: Request Entity Too Large
st.request :method => 'POST',
:headers => { 'X-Account-Meta-Quota-Bytes' => '1048576' }
# We can list the account details to verify the new
# header has been added
pp st.request :method => 'HEAD'
end
# Restore the account we were using initially (admin@test.lan)
st.reset_account_name