4.4. Swift 容器操作
作为开发者,您可以通过 Ceph 对象网关通过 Swift 应用编程接口(API)执行容器操作。您可以列出、创建、更新和删除容器。您还可以添加或更新容器的元数据。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
 - RESTful 客户端。
 
4.4.1. Swift 容器操作 复制链接链接已复制到粘贴板!
容器是用于存储数据对象的机制。帐户可以有许多容器,但容器名称必须是唯一的。此 API 允许客户端创建容器,设置访问控制和元数据,检索容器的内容,以及删除容器。由于此 API 对特定用户帐户中的信息发出与请求相关的请求,因此此 API 中的所有请求都必须进行身份验证,除非容器访问控制被有意公开访问,即允许匿名请求。
Amazon S3 API 使用术语"bucket"来描述数据容器。当您听到在 Swift API 中提到术语 'bucket' 时,这个术语 'bucket' 可能被认为与 "container" 这一术语相当。
					对象存储的一个方面是它不支持分层路径或目录。相反,它支持由一个或多个容器组成的一个级别,每个容器可能具有对象。RADOS 网关的 Swift API 支持 'pseudo-hierarchical 容器' 的概念,这是一种使用对象命名来模拟容器或目录层次结构,而无需实际在存储系统中实施。您可以使用伪层次结构名称来命名对象,例如 photos/buildings/empire-state.jpg,但容器名称不能包含正斜杠(/)字符。
				
						将大型对象上传到版本的 Swift 容器时,在 python-swiftclient 程序中使用 --leave-segments 选项。不要使用 --leave-segments 覆盖清单文件。因此,现有对象会被覆盖,这会导致数据丢失。
					
4.4.2. Swift 更新容器的访问控制列表(ACL) 复制链接链接已复制到粘贴板!
					当用户创建容器时,用户默认对容器具有读写权限。要允许其他用户读取容器的内容或写入容器,您必须特别启用该用户。您也可以在 X-Container-Read 或 X-Container-Write 设置中指定 *,这样可以有效地让所有用户从或写入容器。设置 * 使容器变为公共容器。这是它允许匿名用户从容器读取或写入到容器。
				
语法
POST /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN X-Container-Read: * X-Container-Write: UID1, UID2, UID3
POST /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
X-Container-Read: *
X-Container-Write: UID1, UID2, UID3
请求 Headers
x-Container-Read- 描述
 - 具有容器读取权限的用户 ID。
 - Type
 - 用户 ID 的以逗号分隔的字符串值。
 - 必填
 - 否
 
X-Container-Write- 描述
 - 具有容器写入权限的用户 ID。
 - Type
 - 用户 ID 的以逗号分隔的字符串值。
 - 必填
 - 否
 
4.4.3. Swift 列出容器 复制链接链接已复制到粘贴板!
					指定 API 版本并且帐户返回特定用户帐户的容器列表的 GET 请求。由于请求返回特定用户的容器,因此请求需要身份验证令牌。无法匿名发出请求。
				
语法
GET /API_VERSION/ACCOUNT HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN
GET /API_VERSION/ACCOUNT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
请求参数
limit- 描述
 - 将结果数量限制为指定的值。
 - Type
 - 整数
 - 有效值
 - 不适用
 - 必需
 - 是
 
格式- 描述
 - 将结果数量限制为指定的值。
 - Type
 - 整数
 - 有效值
 - 
											
json或xml - 必需
 - 否
 
marker- 描述
 - 返回大于标记值的结果列表。
 - Type
 - 字符串
 - 有效值
 - 不适用
 - 必需
 - 否
 
					响应包含容器列表,或使用 HTTP 204 响应代码返回。
				
响应实体
account- 描述
 - 帐户信息列表。
 - Type
 - Container
 
container- 描述
 - 容器列表。
 - Type
 - Container
 
名称- 描述
 - 容器的名称。
 - Type
 - 字符串
 
bytes- 描述
 - 容器的大小。
 - Type
 - 整数
 
4.4.4. Swift 列出容器的对象 复制链接链接已复制到粘贴板!
					要列出容器内的对象,请使用 API 版本、帐户和容器名称来创建一个 GET 请求。您可以指定查询参数来过滤完整列表,或用参数返回存储在容器中的前 10,000 项名称的列表。
				
语法
GET /API_VERSION/TENANT:CONTAINER HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN
GET /API_VERSION/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
请求参数
格式- 描述
 - 将结果数量限制为指定的值。
 - Type
 - 整数
 - 有效值
 - 
											
json或xml - 必需
 - 否
 
prefix- 描述
 - 将结果设置为以指定前缀开头的对象。
 - Type
 - 字符串
 - 有效值
 - 不适用
 - 必需
 - 否
 
marker- 描述
 - 返回大于标记值的结果列表。
 - Type
 - 字符串
 - 有效值
 - 不适用
 - 必需
 - 否
 
limit- 描述
 - 将结果数量限制为指定的值。
 - Type
 - 整数
 - 有效值
 - 0 - 10,000
 - 必需
 - 否
 
delimiter- 描述
 - 前缀与其他对象名称之间的分隔符。
 - Type
 - 字符串
 - 有效值
 - 不适用
 - 必需
 - 否
 
path- 描述
 - 对象的伪层次结构路径。
 - Type
 - 字符串
 - 有效值
 - 不适用
 - 必需
 - 否
 
响应实体
container- 描述
 - 容器。
 - Type
 - Container
 
object- 描述
 - 容器内的对象。
 - Type
 - Container
 
名称- 描述
 - 容器中对象的名称。
 - Type
 - 字符串
 
hash- 描述
 - 对象内容的散列代码。
 - Type
 - 字符串
 
last_modified- 描述
 - 最后一次修改对象内容的时间。
 - Type
 - Date
 
content_type- 描述
 - 对象中的内容类型。
 - Type
 - 字符串
 
4.4.5. Swift 创建容器 复制链接链接已复制到粘贴板!
					若要创建新容器,请为 PUT 请求提供 API 版本、帐户和新容器的名称。容器名称必须是唯一的,不得包含正斜杠(/)字符,且应小于 256 字节。您可以在请求中包含访问控制标头和元数据标头。您还可以包含指定一组 PG 的密钥的存储策略。例如,执行 radosgw-admin zone get 以查看 placement_pools 下的可用键的列表。存储策略允许您为容器指定一组特殊的池,如基于 SSD 的存储。操作是幂等的。如果您请求创建已存在的容器,它会返回 HTTP 202 返回代码,但不会创建另一个容器。
				
语法
Headers
x-Container-Read- 描述
 - 具有容器读取权限的用户 ID。
 - Type
 - 用户 ID 的以逗号分隔的字符串值。
 - 必填
 - 否
 
X-Container-Write- 描述
 - 具有容器写入权限的用户 ID。
 - Type
 - 用户 ID 的以逗号分隔的字符串值。
 - 必填
 - 否
 
X-Container-Meta-KEY- 描述
 - 用户定义的元数据键,它采用任意字符串值。
 - Type
 - 字符串
 - 必填
 - 否
 
x-Storage-Policy- 描述
 - 
											在 Ceph 对象网关的 
placement_pools下标识存储策略的密钥。为可用的密钥执行radosgw-admin zone get。 - Type
 - 字符串
 - 必填
 - 否
 
如果容器已存在具有相同名称的容器,并且用户是容器所有者,则操作将成功。否则,操作将失败。
HTTP 响应
409- 状态代码
 - 
											
BucketAlreadyExists - 描述
 - 容器已存在于其他用户的所有权下。
 
4.4.6. Swift 删除容器 复制链接链接已复制到粘贴板!
					要删除容器,请使用 API 版本、帐户和容器名称进行 DELETE 请求。容器必须为空。如果您想检查容器是否为空,请对容器执行 HEAD 请求。成功移除容器后,您将能够重复利用容器名称。
				
语法
DELETE /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN
DELETE /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
HTTP 响应
204- 状态代码
 - 
											
NoContent - 描述
 - 容器已被删除。
 
4.4.7. Swift 添加或更新容器元数据 复制链接链接已复制到粘贴板!
					要向容器添加元数据,请使用 API 版本、帐户和容器名称发出 POST 请求。容器必须具有写入权限才能添加或更新元数据。
				
语法
POST /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN X-Container-Meta-Color: red X-Container-Meta-Taste: salty
POST /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
X-Container-Meta-Color: red
X-Container-Meta-Taste: salty
请求 Headers
X-Container-Meta-KEY- 描述
 - 用户定义的元数据键,它采用任意字符串值。
 - Type
 - 字符串
 - 必填
 - 否