[英]jclouds create tenant in openstack
我正在使用jclouds 1.8.0在openstack中創建租戶。 “ TenantAdminApi”用於創建租戶。
以下是我的代碼段:
Optional<? extends TenantAdminApi> tennantAdminApiList =
keystoneApi.getTenantAdminApi();
if (tennantAdminApiList.isPresent()){
System.out.println("tennantAdminApi is present");
TenantAdminApi tennantAdminApi = tennantAdminApiList.get();
CreateTenantOptions tenantOptions =
CreateTenantOptions.Builder.enabled(false);
tennantAdminApi.create(name);
}else{
System.out.println("tennantAdminApi not present");
}
但是我無法創建租戶,因為“ isPresent”標志為假。 如何將此標志設置為true
問候,阿基爾
如果我沒看錯,則需要啟用OS-KSADM擴展,並且在創建上下文時需要提供管理端點(仔細檢查您正在使用的端口)。
使用此代碼創建一個租戶(在DevStack上經過OpenStack Icehouse測試)。
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableSet;
import com.google.common.io.Closeables;
import com.google.inject.Module;
import org.jclouds.ContextBuilder;
import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
import org.jclouds.openstack.keystone.v2_0.KeystoneApi;
import org.jclouds.openstack.keystone.v2_0.extensions.TenantAdminApi;
import org.jclouds.openstack.keystone.v2_0.options.CreateTenantOptions;
import java.io.Closeable;
import java.io.IOException;
public class JCloudsKeystone implements Closeable {
private final KeystoneApi keystoneApi;
public static void main(String[] args) throws IOException {
JCloudsKeystone jcloudsKeystone = new JCloudsKeystone();
try {
jcloudsKeystone.createTenant();
jcloudsKeystone.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
jcloudsKeystone.close();
}
}
public JCloudsKeystone() {
Iterable<Module> modules = ImmutableSet.<Module>of(new SLF4JLoggingModule());
String provider = "openstack-keystone";
String identity = "admin:admin"; // tenantName:userName
String password = "devstack";
keystoneApi = ContextBuilder.newBuilder(provider)
.endpoint("http://my.ip.4.addr:35357/v2.0/")
.credentials(identity, password)
.modules(modules)
.buildApi(KeystoneApi.class);
}
private void createTenant() {
Optional<? extends TenantAdminApi> tenantAdminApiExtension = keystoneApi.getTenantAdminApi();
if (tenantAdminApiExtension.isPresent()) {
System.out.println("TenantAdminApi is present");
TenantAdminApi tenantAdminApi = tenantAdminApiExtension.get();
CreateTenantOptions tenantOptions = CreateTenantOptions.Builder.enabled(false);
tenantAdminApi.create("newTenant", tenantOptions);
}
else {
System.out.println("TenantAdminApi is *not* present");
}
}
public void close() throws IOException {
Closeables.close(keystoneApi, true);
}
}
如果這對您不起作用,請確認您可以以管理員身份登錄並且該擴展名存在。
TOKEN=`curl -s -X POST http://my.ip.4.addr:5000/v2.0/tokens -d '{"auth": {"passwordCredentials": {"username":"admin", "password":"devstack"}, "tenantName":"admin"}}' -H "Content-type: application/json" | jq -r .access.token.id`
curl -s -H "X-Auth-Token: $TOKEN" -H "Content-type: application/json" http://my.ip.4.addr:35357/v2.0/extensions | jq .
這是jq 。 OS-KSADM應該在輸出中
{
"description": "OpenStack extensions to Keystone v2.0 API enabling Administrative Operations.",
"alias": "OS-KSADM",
"namespace": "http://docs.openstack.org/identity/api/ext/OS-KSADM/v1.0",
"links": [
{
"rel": "describedby",
"type": "text/html",
"href": "https://github.com/openstack/identity-api"
}
],
"name": "OpenStack Keystone Admin",
"updated": "2013-07-11T17:14:00-00:00"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.