mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
d96365c6fd
See also #1632
66 lines
2.2 KiB
Ruby
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
|