
# 列举桶清单
#### 功能说明
桶清单功能可以定期生成桶内对象的元数据信息，通过查看这些信息，可以帮助您更好地了解桶内对象的状态。调用本接口可以获取桶的所有清单配置，获取到的清单配置一次性返回，不分页。
要正确执行此操作，需要确保执行者有GetBucketInventoryConfiguration权限。缺省情况下只有桶的所有者可以执行此操作，也可以通过设置桶策略或用户策略授权给其他用户。
有关权限控制的更多信息请参考《对象存储服务权限配置指南》的[OBS权限控制概述](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)章节。
融合桶场景，主桶支持配置桶清单，备桶不支持配置桶清单。
#### 接口约束
- OBS支持的Region与Endpoint的对应关系，详细信息请参见[地区与终端节点](https://developer.huaweicloud.com/endpoint?OBS)。

- 须知：调用桶清单相关接口前，需在初始化obsClient时调用obs.WithSignature(obs.SignatureObs)指定协议类型。
 
#### 方法定义
func (obsClient ObsClient) ListBucketInventory(bucketName string, extensions ...extensionOptions) (output \*ListBucketInventoryOutput, err error)
#### 请求参数说明
表1请求参数说明 
| 参数         | 类型     | 是否必选 | 说明  |
|:---|:---|:---|:---|
| bucketName | string | 是    | 桶名。 |
   
#### 响应参数说明
表2ListBucketInventoryOutput参数说明 
| 参数                      | 类型                         | 说明      |   |
|:---|:---|:---|:--|
| BaseModel               | BaseModel                  | 基础模型。   |   |
| InventoryConfigurations | \[\]InventoryConfiguration | 清单配置列表。 |   |
   
表3BaseModel 
| **参数名称**        | **参数类型**                | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|:---|
| StatusCode      | int                     | **参数解释：** HTTP状态码。 **约束限制：** 无 **取值范围：** 状态码是一组从2xx（成功）到4xx或5xx（错误）的数字代码，状态码表示了请求响应的状态。完整的状态码列表请参见[状态码](https://support.huaweicloud.com/api-obs/obs_04_0114.html)。 **默认取值：** 无 |
| RequestId       | string                  | **参数解释：** OBS服务端返回的请求ID。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                      |
| ResponseHeaders | map\[string\]\[\]string | **参数解释：** HTTP响应头信息。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                      |
   
表4InventoryConfiguration参数说明 
| 字段                     | 类型                        | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|:---|
| Id                     | string                    | **参数解释：** 清单配置 ID。 **取值范围：** 无。                                                                                                                                                                                                                                                                                                                                                                           |
| IsEnabled              | bool                      | **参数解释：** 规则是否启用，如果设置为true，则生成清单，反之不生成。 **取值范围：** - true：生成桶清单。  - false：不生成桶清单                                                                                                     |
| Destination            | InventoryDestination      | **参数解释：** 清单的目标配置。 **取值范围：** 无。                                                                                                                                                                                                                                                                                                                                                                      |
| Schedule               | InventorySchedule         | **参数解释：** 清单文件的生成周期。 **取值范围：** 无。                                                                                                                                                                                                                                                                                                                                                                    |
| Filter                 | \*InventoryFilter         | **参数解释：** 清单过滤器配置，清单只包含符合过滤器规则的对象（只支持按对象名前缀进行过滤），如果没有配置过滤器，则包含所有对象。 **取值范围：** 无。                                                                                                                                                                                                                                                                                                                      |
| IncludedObjectVersions | string                    | **参数解释：** 清单文件中包含对象的多版本配置。 **取值范围：** - All：清单会包含对象所有的版本，清单中会增加版本相关的字段：VersionId、IsLatest、和DeleteMarker。  - Current：清单文件中只会列出当前版本信息，不会出现与多版本相关的VersionId、IsLatest、DeleteMarker字段。   |
| OptionalFields         | \*InventoryOptionalFields | **参数解释：** 在此选项中可以添加一些额外的对象元数据字段，生成的清单文件中会包含OptionalFields中配置的字段。 **取值范围：** 无。                                                                                                                                                                                                                                                                                                                        |
   
表5InventoryDestination参数说明 
| 参数     | 类型     | 是否必选 | 说明                                                         |
|:---|:---|:---|:---|
| Format | string | 是    | 生成的清单文件的格式，现只支持CSV格式。                                      |
| Bucket | string | 是    | 存放清单文件的目标桶的桶名。                                             |
| Prefix | string | 是    | 生成的清单文件对象名会以此前缀开头，如果不配置前缀，则生成的清单文件对象名默认以BucketInventory开头。 |
   
表6InventorySchedule参数说明 
| 参数        | 类型     | 是否必选 | 说明                                                                                                                      |
|:---|:---|:---|:---|
| Frequency | string | 是    | 清单文件的生成周期，只支持按天和按周生成清单，第一次配置完桶清单，任务会在一个小时内启动，之后每隔一个周期启动一次。 有效值：Daily、Weekly |
   
表7InventoryFilter参数说明 
| 参数     | 类型     | 是否必选 | 说明                          |
|:---|:---|:---|:---|
| Prefix | string | 否    | 前缀过滤条件，清单文件中只生成以此前缀开头的对象列表。 |
   
表8InventoryOptionalFields参数说明 
| 参数     | 类型         | 是否必选 | 说明                                                                                                                                                  |
|:---|:---|:---|:---|
| Fields | \[\]string | 否    | 可选字段列表，有效值 Size、LastModifiedDate、StorageClass、ETag、IsMultipartUploaded、ReplicationStatus、EncryptionStatus |
   
#### 代码示例
本示例用于列举桶examplebucket上所有的桶清单配置。
```
package main
import (
    "fmt"
    obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs"
    "log"
    "os"
)
func main() {
    // 推荐通过环境变量获取AKSK，这里也可以使用其他外部引入方式传入，如果使用硬编码可能会存在泄露风险。
    // 您可以登录访问管理控制台获取访问密钥AK/SK。
    ak := os.Getenv("AccessKeyID")
    sk := os.Getenv("SecretAccessKey")
    // 【可选】如果使用临时AK/SK和SecurityToken访问OBS，同样建议您尽量避免使用硬编码，以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK，也可以使用其他外部引入方式传入。
    securityToken := os.Getenv("SecurityToken")
    // endpoint填写Bucket对应的Endpoint，这里以华北-北京四为例，其他地区请按实际情况填写。
    endPoint := "https://obs.cn-north-4.myhuaweicloud.com"
    // 创建客户端
    obsClient, err := obs.New(ak, sk, endPoint, obs.WithSignature(obs.SignatureObs), obs.WithSecurityToken(securityToken))
    if err != nil {
        fmt.Printf("Create obsClient error, errMsg: %s", err.Error())
    }
    // 列举所有清单配置
    output, err := obsClient.ListBucketInventory("examplebucket")
    if err != nil {
        log.Fatalf("Failed to list bucket inventory: %v", err)
    }
    fmt.Printf("Request ID: %s\n", output.RequestId)
    fmt.Printf("Total configurations: %d\n", len(output.InventoryConfigurations))
    for i, config := range output.InventoryConfigurations {
        fmt.Printf("\n[%d] Inventory Configuration:\n", i+1)
        fmt.Printf("  ID: %s\n", config.Id)
        fmt.Printf("  Enabled: %v\n", config.IsEnabled)
        fmt.Printf("  Frequency: %s\n", config.Schedule.Frequency)
        fmt.Printf("  Format: %s\n", config.Destination.Format)
        fmt.Printf("  Destination: %s/%s\n", config.Destination.Bucket, config.Destination.Prefix)
        if config.Filter != nil {
            fmt.Printf("  Filter Prefix: %s\n", config.Filter.Prefix)
        }
        fmt.Printf("  Included Versions: %s\n", config.IncludedObjectVersions)
        if config.OptionalFields != nil {
            fmt.Printf("  Optional Fields: %v\n", config.OptionalFields.Fields)
        }
    }
}
```
#### 相关链接
- 更多关于桶清单的示例代码，请参见[Github示例](https://github.com/huaweicloud/huaweicloud-sdk-go-obs/blob/master/examples/object_operations_sample.go)。
- 桶清单接口返回的错误码含义、问题原因及处理措施可参考[OBS错误码](https://support.huaweicloud.com/api-obs/obs_04_0115.html#section1)。
 
