简体   繁体   English

jclouds在openstack中创建租户

[英]jclouds create tenant in openstack

I am using jclouds 1.8.0 for creating tenant in openstack. 我正在使用jclouds 1.8.0在openstack中创建租户。 "TenantAdminApi" is used for creating tenant. “ TenantAdminApi”用于创建租户。

Following is my code snippet : 以下是我的代码段:

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");
}

But I couldn't create the tenant as the "isPresent" flag is false. 但是我无法创建租户,因为“ isPresent”标志为假。 How can this Flag be set true 如何将此标志设置为true

Regards, Akhil 问候,阿基尔

如果我没看错,则需要启用OS-KSADM扩展,并且在创建上下文时需要提供管理端点(仔细检查您正在使用的端口)。

Use this code to create a tenant (tested with OpenStack Icehouse on DevStack). 使用此代码创建一个租户(在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);
    }
}

If that doesn't work for you, confirm that you can login as an admin and that the extension is there. 如果这对您不起作用,请确认您可以以管理员身份登录并且该扩展名存在。

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 .

Here's jq . 这是jq OS-KSADM should be in the output 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM