Ceph Object Gateway Admin api介紹

說明: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

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中獲取。

六、修改subuser

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一致。

七、刪除subuser

DELETE /admin/user?subuser&format=json&uid=<uid>&subuser=<subuser>

返回狀態碼:200

八、建立key

# 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。

九、刪除key

DELETE /admin/user?key&format=json&access-key=<key>

返回狀態碼:200

十、獲取bucket信息

# 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"]

十一、檢查bucket index

GET /admin/bucket?index&format=json&bucket=<bucket>

可選參數:check-objects=True(檢查multipart-part對象數量),fix=False(是否進行修復)。若是設置了check-objects=True,也必須同時設置fix=True。

TODO:目前不清楚實際檢查的部分。

十二、移除bucket

DELETE /admin/bucket?format=json&bucket=<bucket>

若是bucket中還有對象,移除時會提示409(BucketNotEmpty)。能夠加入purge-objects=True進行移除。

1三、移除bucket與用戶的關係

默認狀況下,bucket屬於某個用戶,用該方法能夠移除bucket所屬的用戶關係。移除後,該用戶不可訪問bucket.

POST /admin/bucket?format=json&bucket=<bucket>&uid=<uid>

返回響應嗎:200

備註:在實際測試中,若是bucket的owner沒有發生變化,unlink雖然返回200,可是bucket信息仍舊有owner。執行成功無效。

1四、link bucket

PUT /admin/bucket?format=json&bucket=<bucket>&uid=<uid>&bucket-id=<bucket-id>

將一個bucket link給一個新的uid,owner改成新的uid。注意,該參數須要bucket id,能夠經過查詢bucket信息獲取到。

返回狀態碼:200

1五、移除object

DELETE /admin/bucket?object&fromat=json&bucket=<bucket>&object=<key>

正常響應碼:200

異常:404(NoSuchObject) 409(ObjectRemovalFailed)

1六、獲取bucket獲取對象policy

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"}}

1七、添加user管理權限

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"}]

1八、移除用戶管理權限

DELETE /admin/user?caps&format=json&uid=<uid>&user-caps=<caps>

返回示範:

[{"type":"usage","perm":"*"}]

備註:若是被移除的用戶沒有改caps,仍舊會返回成功。

1九、配額相關

# Set user quota
PUT /admin/user?quota&uid=<uid>&quota-type=user

data:
{"max_objects": -1, "enabled": true, "max_size_kb": 102400}

返回狀態碼:200

# Get user quota
GET /admin/user?quota&uid=<uid>&quota-type=user

返回:
{"enabled":true,"max_size_kb":102400,"max_objects":-1}

# Put bucket quota
PUT /admin/user?quota&uid=<uid>&quota-type=user
data:
{"max_objects": -1, "enabled": true, "max_size_kb": 102400}

返回狀態碼: 200

# Get bucket quota
GET /admin/user?quota&uid=<uid>&quota-type=user
相關文章
相關標籤/搜索