当前位置: 首页 > 文档资料 > Ceph 中文文档 >

容器操作

优质
小牛编辑
128浏览
2023-12-01

一个容器是一种用来存储数据对象的机制。一个帐户可 以有很多容器,但容器名称必须是唯一的。这个API允 许客户端创建一个容器,设置访问控制和元数据,检索 一个容器的内容,和删除一个容器。因为这个 API 的 请求涉及到一个特定用户的帐户相关信息,因此在这个 API 中的所有请求都必须经过身份验证,除非一个容器 的访问控制故意设置为公开访问。(即允许匿名的请求)。

Note

Amazon S3 API 使用 ‘bucket’ 这个词来描述一个 数据容器。当你听到有人在 Swift API 中提到一个 ‘bucket’ 时,’bucket’ 这个词可以被理解为相当于术语 ‘container‘ 。

对象存储的一个特点就是它不支持分层路径或目录。相反,它支持由一个或者多个容器组成一个层级,其中每个容器包 含若干对象。RADOS 网关的 兼容 Swift API支持 ‘pseudo-hierarchical containers’ 的概念,就是一个使用对象的命名方式来模拟一个容器(或目录)实际 上没有实现一个存储系统层次。你可以使用 pseudo-hierarchical 名字来给对象命名。 (比如:photos/buildings/empire-state.jpg),但容 器的名字不能包含一个正斜杠 (/) 字符。

新建一个容器

要创建一个新容器,需要构建一个 PUT 请求,带上 API 版本、账户和新容器的名称。容器名称必须是唯一的,不能包含斜杠 (/)字符,且应该小于256字节。在请求头信 息中你也可以包括访问控制和元数据等头信息。这个操作是 幂等的,也就是说,如果你构建一个请求来创建一个已经存在 的容器,它将返回一个 HTTP 202 返回代码,但不会创建另 一个容器。

语法

PUT /{api version}/{account}/{container} HTTP/1.1
Host: {fqdn}
X-Auth-Token: {auth-token}
X-Container-Read: {comma-separated-uids}
X-Container-Write: {comma-separated-uids}
X-Container-Meta-{key}: {value}

头信息

X-Container-Read

描述:有该容器的读权限的用户的 IDs
类型:逗号分隔的用户 ID 字符串值.
是否必需:No

X-Container-Write

描述:有该容器的写权限的用户的 IDs
类型:逗号分隔的用户 ID 字符串值.
是否必需:No

X-Container-Meta-{key}

描述:用户定义元数据的 key,一个任意的字符串值。
类型:String
是否必需:No

HTTP 响应

如果具有相同名称的容器已经存在,并且该用户是 该容器的所有者,则这个操作会成功。否则操作将 会失败。

409

描述:容器已经存在,且归一个不同的用户的所有
状态码:BucketAlreadyExists

列出容器内的对象

要列出一个容器内的所有对象,构建一个 GET 请求,带有 API 版本、帐户和容器的名称。您可以指定查询参数来过滤完整 列表,或置空该参数以返回该容器内存储的前10000个对象的名称 的列表。

语法

GET /{api version}/{container} HTTP/1.1
     Host: {fqdn}
     X-Auth-Token: {auth-token}

参数

format

描述:定义结果的格式
类型:String
有效值:json | xml
是否必需:No

prefix

描述:限制所有结果的对象名以这个指定的前缀开始
类型:String
是否必需:No

marker

描述:返回的结果的列表大于 marker 的值
类型:String
是否必需:No

limit

描述:限制返回的结果的列表为这个指定的值
类型:Integer
有效范围:0 - 10,000
是否必需:No

delimiter

描述:前缀和剩余对象名之间的分隔符
类型:String
是否必需:No

path

描述:对象的 pseudo-hierarchical 路径
类型:String
是否必需:No

响应实体

container

描述:容器.
类型:Container

object

描述:容器内的对象
类型:Container

name

描述:容器内的对象的名称
类型:String

hash

描述:对象内容的 hash 代码
类型:String

last_modified

描述:T对象内容的最近修改时间
类型:Date

content_type

描述:对象内容的类型
类型:String

更新一个容器的 ACLs

当用户创建一个容器的时候,默认情况下用户有读和写这个容器 的权限。要允许其他用户读一个容器的内容或者写如对象到一个 容器,必须专门为该用户启用相关权限。你也可以在 X-Container-Read 或者 X-Container-Write 设置中指定他们的值为 * 。这样可以有效地使所有用户都可以读或写这个容器。设置 * 使得容器变为公开。也就是说允许匿名用户从容器中读取或想容器 写入到数据。

语法

POST /{api version}/{account}/{container} HTTP/1.1
Host: {fqdn}
     X-Auth-Token: {auth-token}
     X-Container-Read: *
     X-Container-Write: {uid1}, {uid2}, {uid3}

请求头

X-Container-Read

描述:有该容器的读权限的用户的 IDs
类型:逗号分隔的用户 ID 字符串值.
是否必需:No

X-Container-Write

描述:有该容器的写权限的用户的 IDs
类型:逗号分隔的用户 ID 字符串值.
是否必需:No

添加/更新容器元数据

要向容器添加元数据,需要构建一个 POST 请求,带上 API 版本、账户和容器的名字。你必须有对你想 添加或者更新元数据的容器的写权限。

语法

POST /{api version}/{account}/{container} HTTP/1.1
Host: {fqdn}
     X-Auth-Token: {auth-token}
     X-Container-Meta-Color: red
     X-Container-Meta-Taste: salty

请求头

X-Container-Meta-{key}

描述:用户定义的元数据的 key,一个任意的字符串值。
类型:String
是否必需:No

删除一个容器

要删除一个容器,构建一个使 DELETE 请求,带上 API 版本、账户和容器的名称。容器必须是空的。如果你 想检查容器是否为空,对容器执行一个 HEAD 请求。一旦你确认成功删除了容器,就可以重用容器的名字。

语法

DELETE /{api version}/{account}/{container} HTTP/1.1
Host: {fqdn}
X-Auth-Token: {auth-token}

HTTP 响应

204

描述:容器已经被删除
状态码:NoContent