#1.修改[pipeline:main]
[pipeline:main]pipeline = catch_errors healthcheck cache ratelimit authtoken keystoneauth account-quotas container-quotas proxy-logging proxy-server
添加reseller用户之后就可以设置相关的配额了:
Container_Quotas:
1. X-Container-Meta-Quota-Bytes -- 目标container可上传的最大字节数
2. X-Container-Meta-Quota-Count -- 目标container可上传的最大文件个数
Account_Quotas:
1. X-Account-Meta-Quota-Bytes -- 单个上传最大字节数
2. Quota-Byes -- 1必须配合2才能有效果
设置方法:
swift -V 2 -A http://192.168.65.203:5000/v2.0 -U test:reseller -K reseller post -m quota-bytes:5000
注:reseller用户必须在ResellerAdmin角色中,这个限额只针对test tenant有效
取消设置
swift -V 2 -A http://192.168.65.203:5000/v2.0 -U test:reseller -K reseller post -m quota-bytes:
Bug fix:
使用keystone做认证时,针对Quota-Byes设置可能会出现 [403 Forbidden] 错误
修改swift/common/middleware/account_quotas.py 文件
new_quota = request.headers.get('X-Account-Meta-Quota-Bytes') #Add by kevin start eccp_roles = request.environ.get('HTTP_X_ROLES', '') if isinstance(eccp_roles, basestring): if (set(eccp_roles.split(',')) & set({'reseller','reseller_admin','ResellerAdmin'})): request.environ['reseller_request'] = True #Add by kevin end if request.environ.get('reseller_request') is True: if new_quota and not new_quota.isdigit(): return HTTPBadRequest() return self.app
使得当用户加入ResellerAdmin角色之后能够通过验证。
另外需要注意的是在实验过程中不断发生swift与keystone验证401 Unauthorized的问题,经调试发现是keystone中关于swift的endpoint的注册IP地址使用的是虚拟机分配的地址(本人是在虚拟机的环境下再安装虚拟机实验,所以第一层虚拟机的地址是由openstack自动分配的fixed ip10.0.0.x类型,这样其他几台机器如果通过这个地址进行权限验证就可能出现问题,解决方法是将endpoint的地址修改为浮动ip),使用winpdb( http://winpdb.org/ )进行调试是非常不错的。
Good luck