Rackspace 云文件(使用 jclouds) - 如何获取容器位置

Posted

技术标签:

【中文标题】Rackspace 云文件(使用 jclouds) - 如何获取容器位置【英文标题】:Rackspace Cloud Files (using jclouds) - how to get container location 【发布时间】:2014-06-23 22:51:28 【问题描述】:

我使用 jclouds 作为 Rackspace Cloud Files 的 api。

Api 允许我使用 BlobStore.createContainerInLocation 在不同位置创建容器

现在,有了已经存在的容器,我该如何获取它的位置?

【问题讨论】:

【参考方案1】:

您可以遍历 Rackspace 区域以获取 Cloud Files 端点,然后您可以查询每个端点以查看容器是否存在于那里。类似于以下内容:

package org.jclouds.examples.rackspace.cloudfiles;

import static org.jclouds.examples.rackspace.cloudfiles.Constants.PROVIDER;

import java.io.IOException; import java.util.Set;

import org.jclouds.ContextBuilder; 
import org.jclouds.openstack.swift.v1.blobstore.RegionScopedBlobStoreContext; 
import org.jclouds.blobstore.BlobStore;

public class GetRegion
  private final RegionScopedBlobStoreContext ctx;
  private final String YOUR_CONTAINER = "YOUR_CONTAINER_HERE";
  public static void main(String[] args) throws IOException 
    GetRegion getRegion = new GetRegion(args[0], args[1]);
    try 
      getRegion.getRegion();
    
    catch (Exception e) 
      e.printStackTrace();
    
  

  public GetRegion(String username, String apiKey) 
    ctx = ContextBuilder.newBuilder(PROVIDER)
          .credentials(username, apiKey)
          .buildView(RegionScopedBlobStoreContext.class);
  

  private void getRegion() 
    Set<String> regions = ctx.configuredRegions();
    for(String region:regions)
      BlobStore store = ctx.blobStoreInRegion(region);
      if(store.containerExists(YOUR_CONTAINER)) 
        System.out.format("Container is in %s region\n", region);
      
    
   

要运行,请将“YOUR_CONTAINER_HERE”替换为容器的名称,并将您的 Rackspace 用户名和 API 密钥作为命令行参数传递(或者,将它们硬编码为 'args[0]' 和 'args[1] ',分别)。

【讨论】:

这种方法需要每个区域调用一次 BlobStore.containerExists。【参考方案2】:

jclouds 没有为此提供直接机制。相反,您可以调用BlobStore.list,比较容器名称,然后使用StorageMetadata.getLocation

for (StorageMetadata resourceMd : blobStore.list()) 
    if (containerName.equals(resourceMd.getName())) 
        System.out.println(resourceMd.getLocation().getId());
    

【讨论】:

以上是关于Rackspace 云文件(使用 jclouds) - 如何获取容器位置的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Clojure 使用 JClouds 和 Rackspace 启用 CDN?

在 Spring Boot 应用程序中使用 Rackspace 时出现 Apache jclouds java.lang.NoSuchMethodError

jclouds:如何更新现有 blob 的元数据?

从 jclouds 1.5 迁移到 1.7 后 rackspace cloudfiles 抛出 ContainerNotFoundException

在 Rackspace 云文件 API 中获取对象的链接

播放 Rackspace 云文件中的视频时 Chrome 冻结