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

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

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

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

【问题讨论】:

    标签: java rackspace-cloud rackspace jclouds rackspace-cloudfiles


    【解决方案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());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 2011-01-13
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 2011-09-23
      相关资源
      最近更新 更多