我使用jclouds作为Rackspace Cloud文件的api。Rackspace Cloud文件(使用jclouds) - 如何获取容器位置
API允许我使用BlobStore.createContainerInLocation
现在,有一个已经存在的容器创建在不同地点的容器,我怎么得到它的位置?
我使用jclouds作为Rackspace Cloud文件的api。Rackspace Cloud文件(使用jclouds) - 如何获取容器位置
API允许我使用BlobStore.createContainerInLocation
现在,有一个已经存在的容器创建在不同地点的容器,我怎么得到它的位置?
jclouds没有为此提供直接机制。相反,你可以打电话BlobStore.list
,比较容器名称,然后消耗StorageMetadata.getLocation
:
for (StorageMetadata resourceMd : blobStore.list()) {
if (containerName.equals(resourceMd.getName())) {
System.out.println(resourceMd.getLocation().getId());
}
}
您可以遍历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。 –