說明:Ceph rgw admin ops api 是爲了經過rest方式對對象存儲進行管理的接口,能夠經過該接口管理和獲取對象存儲相關信息。json
認證:與S3使用一樣的認證方式。swift
版本:基於Ceph 10.2。api
準備工做:測試
須要建立一個新的管理用戶,授予用戶權限:大數據
radosgw-admin caps add --uid=admin --caps="users=*" radosgw-admin caps add --uid=admin --caps="buckets=*" radosgw-admin caps add --uid=admin --caps="metadata=*" radosgw-admin caps add --uid=admin --caps="usage=*"
GET /admin/user?format=json&uid=<uid>
正常響應200:ui
{"tenant":"","user_id":"test5","display_name":"test5","email":"","suspended":0,"max_buckets":1000,"subusers":[],"keys":[{"user":"test5","access_key":"2EQJ8SOOKWYOQHRV4R2U","secret_key":"ApN5WaWAbrWQzL6Fr4yeMxYcwZbkhrVMKy6JOUpL"},{"user":"test5","access_key":"I2ZBDJFFKR66Z4FM0R7C","secret_key":"KHEZioCjhmw1T2JlTWGUbWg8Pb75QwHH5qRJ3MqC"}],"swift_keys":[],"caps":[]}
異常:rest
返回403:認證問題code
返回404:無該用戶UID({"Code":"NoSuchKey","RequestId":"tx000000000000000006e3a-00591434b1-c4808-cn-bj-1","HostId":"c4808-cn-bj-1-cn"})orm
PUT /admin/user?format=json&uid=<uid>&display-name=<name>
可選參數:email、key-type(默認s3)、access_key(指定access_key)、secret_key(指定)、user_caps(管理權限,默認不須要)、generate-key(生成key,默認True)、max_buckets(最大buckets數量,默認1000)、suspended(是否暫停使用,默認False)。
這裏只使用uid和display-name對象
返回(200):
{"tenant":"","user_id":"test9","display_name":"test9","email":"","suspended":0,"max_buckets":1000,"subusers":[],"keys":[{"user":"test9","access_key":"2Y1705SATJC7L50T48SW","secret_key":"LRmTVFxWCqqpYTuYY5QLTrJXCZ9fQThB0285drNs"}],"swift_keys":[],"caps":[]}
異常:
403:認證錯誤
409 Conflict:建立同一個uid,可是display-name不同。(若是uid和display-name與以前都一致,會生成一個新的key,返回用戶信息key-list。屢次執行會建立多個key)
POST /admin/user?format=json&uid=<uid>
後面接須要修改的參數,與PUT時一致(display-name)也能夠修改。
返回200:用戶最新信息
DELETE /admin/user?format=json&uid=<uid>&purge-data=True|False
刪除用戶,同時刪除用戶全部的數據。注意:刪除對象操做爲同步操做,須要測試大數據量時的狀況
subuser是swift接口使用的用戶.
PUT /admin/user?subuser&format=json&uid=<uid>&subuser=<subuser>
返回值:
[{"id":"test6:test6_sub1","permissions":"<none>"}]
異常:
409 subuserid已經存在
注意:若是未在建立時指定key,建立subuser後,並不返回subuser的id和key。須要獲取用戶uid信息中,在swift-key中獲取。
POST /admin/user?subuser&format=json&uid=<uid>&subuser=<subuser>
可修改參數 generate-secret=True(生成一個新的key代替現有key,不建立新key)、secret=xxxxx(指定新Key)、access(設置權限,access,write,readwrite,full)
返回:與建立subuser一致。
DELETE /admin/user?subuser&format=json&uid=<uid>&subuser=<subuser>
返回狀態碼:200
# Add s3 key PUT /admin/user?key&format=json&uid=<uid> # Add swift key PUT /admin/user?key&format=json&uid=<uid>&subuser=<subuser>
返回示範:
# s3 key [{"user":"test6","access_key":"96TUEBQ5V4FNJJCA9D4T","secret_key":"vpzqdWHLmarjiRACqFYVJ1Smf5xr41rzxFuc82Ab"}] # swift key [{"user":"test6:test","secret_key":"4NOQWFCyvrHSP8UHyEIT0Sn0Yhqr7D2VI4czI48M"}]
注意:建立swift key時,若是subuser並不存在,仍舊能夠建立成果,可是產生的key沒法使用,在使用時會提示403。若是subuser存在,會替換原有的key。所以,請勿使用該接口建立swift key。
DELETE /admin/user?key&format=json&access-key=<key>
返回狀態碼:200
# Get single bucket info GET /admin/bucket?format=json&bucket=<bucket> # Get user bucket list(Only list) GET /admin/bucket?format=json&uid=<uid> # Get user bucket list include usage info GET /admin/bucket?format=json&uid=<uid>&stats=True
返回示範:
# Get single bucket info {"bucket":"13c8f65a-fff4-11e6-af79-9ce374424eb5","pool":"cn-bj-1.rgw.buckets.data","index_pool":"cn-bj-1.rgw.buckets.index","id":"fa251bb9-e7a0-46da-9599-90ab1546155b.684240.8","marker":"fa251bb9-e7a0-46da-9599-90ab1546155b.684240.8","owner":"yuanchao.li","ver":"0#1,1#1,2#1,3#1,4#1,5#1,6#1,7#1,8#1,9#1,10#1,11#1,12#1,13#1,14#1,15#1,16#1,17#1,18#1,19#1,20#1,21#1,22#1,23#1,24#1,25#1,26#1,27#1,28#1,29#1,30#1,31#1,32#1,33#1,34#1,35#1,36#1,37#1,38#1,39#1,40#1,41#1,42#1,43#1,44#1,45#1,46#1,47#1,48#1,49#1,50#1,51#1,52#1,53#1,54#1,55#1,56#1,57#1,58#1,59#1,60#1,61#1,62#1,63#1,64#1,65#1,66#1,67#1,68#1,69#1,70#11,71#1,72#1,73#1,74#1,75#1,76#1,77#1,78#1,79#1,80#1,81#1,82#1,83#1,84#1,85#1,86#1,87#1,88#1,89#1,90#1,91#1,92#1,93#1,94#1,95#1,96#1,97#1,98#1,99#1","master_ver":"0#0,1#0,2#0,3#0,4#0,5#0,6#0,7#0,8#0,9#0,10#0,11#0,12#0,13#0,14#0,15#0,16#0,17#0,18#0,19#0,20#0,21#0,22#0,23#0,24#0,25#0,26#0,27#0,28#0,29#0,30#0,31#0,32#0,33#0,34#0,35#0,36#0,37#0,38#0,39#0,40#0,41#0,42#0,43#0,44#0,45#0,46#0,47#0,48#0,49#0,50#0,51#0,52#0,53#0,54#0,55#0,56#0,57#0,58#0,59#0,60#0,61#0,62#0,63#0,64#0,65#0,66#0,67#0,68#0,69#0,70#0,71#0,72#0,73#0,74#0,75#0,76#0,77#0,78#0,79#0,80#0,81#0,82#0,83#0,84#0,85#0,86#0,87#0,88#0,89#0,90#0,91#0,92#0,93#0,94#0,95#0,96#0,97#0,98#0,99#0","mtime":"2017-03-03 17:31:11.966259","max_marker":"0#,1#,2#,3#,4#,5#,6#,7#,8#,9#,10#,11#,12#,13#,14#,15#,16#,17#,18#,19#,20#,21#,22#,23#,24#,25#,26#,27#,28#,29#,30#,31#,32#,33#,34#,35#,36#,37#,38#,39#,40#,41#,42#,43#,44#,45#,46#,47#,48#,49#,50#,51#,52#,53#,54#,55#,56#,57#,58#,59#,60#,61#,62#,63#,64#,65#,66#,67#,68#,69#,70#00000000010.51515.3,71#,72#,73#,74#,75#,76#,77#,78#,79#,80#,81#,82#,83#,84#,85#,86#,87#,88#,89#,90#,91#,92#,93#,94#,95#,96#,97#,98#,99#","usage":{"rgw.main":{"size_kb":1,"size_kb_actual":4,"num_objects":1}},"bucket_quota":{"enabled":false,"max_size_kb":-1,"max_objects":-1}} # Get bucket list ["13c8f65a-fff4-11e6-af79-9ce374424eb5","infer_analysis_report","test22222"]
GET /admin/bucket?index&format=json&bucket=<bucket>
可選參數:check-objects=True(檢查multipart-part對象數量),fix=False(是否進行修復)。若是設置了check-objects=True,也必須同時設置fix=True。
TODO:目前不清楚實際檢查的部分。
DELETE /admin/bucket?format=json&bucket=<bucket>
若是bucket中還有對象,移除時會提示409(BucketNotEmpty)。能夠加入purge-objects=True進行移除。
默認狀況下,bucket屬於某個用戶,用該方法能夠移除bucket所屬的用戶關係。移除後,該用戶不可訪問bucket.
POST /admin/bucket?format=json&bucket=<bucket>&uid=<uid>
返回響應嗎:200
備註:在實際測試中,若是bucket的owner沒有發生變化,unlink雖然返回200,可是bucket信息仍舊有owner。執行成功無效。
PUT /admin/bucket?format=json&bucket=<bucket>&uid=<uid>&bucket-id=<bucket-id>
將一個bucket link給一個新的uid,owner改成新的uid。注意,該參數須要bucket id,能夠經過查詢bucket信息獲取到。
返回狀態碼:200
DELETE /admin/bucket?object&fromat=json&bucket=<bucket>&object=<key>
正常響應碼:200
異常:404(NoSuchObject) 409(ObjectRemovalFailed)
GET /admin/bucket?policy&format=json
返回結果示範:
{"acl":{"acl_user_map":[{"user":"test6","acl":15}],"acl_group_map":[],"grant_map":[{"id":"test6","grant":{"type":{"type":0},"id":"test6","email":"","permission":{"flags":15},"name":"None","group":0}}]},"owner":{"id":"test6","display_name":"None"}}
PUT /admin/user?caps&format=json&uid=<uid>&user-caps=<caps>
caps示範:
user-caps=usage=read,write;user=write
返回示範:
[{"type":"usage","perm":"*"},{"type":"user","perm":"write"}]
DELETE /admin/user?caps&format=json&uid=<uid>&user-caps=<caps>
返回示範:
[{"type":"usage","perm":"*"}]
備註:若是被移除的用戶沒有改caps,仍舊會返回成功。
# Set user quota PUT /admin/user?quota&uid=<uid>"a-type=user data: {"max_objects": -1, "enabled": true, "max_size_kb": 102400} 返回狀態碼:200 # Get user quota GET /admin/user?quota&uid=<uid>"a-type=user 返回: {"enabled":true,"max_size_kb":102400,"max_objects":-1} # Put bucket quota PUT /admin/user?quota&uid=<uid>"a-type=user data: {"max_objects": -1, "enabled": true, "max_size_kb": 102400} 返回狀態碼: 200 # Get bucket quota GET /admin/user?quota&uid=<uid>"a-type=user