openstack 不是Python写的么?要调用也只有在java里面执行Python程序。

解决方案 »

  1.   

    I know how to use  java-api connect the  openstack ,and  use  the java-api create the  server ,list instance Just look this  site 
    http://blog.csdn.net/shatelang/article/details/8254206
      

  2.   

    This is  A sample Demo package edu.hnu.lost.openstack.test;
    import java.util.List;import javax.ws.rs.client.Entity;import org.openstack.common.client.AbstractOpenStackClient;
    import org.openstack.keystone.KeystoneClient;
    import org.openstack.keystone.api.Authenticate;
    import org.openstack.keystone.api.ListTenants;
    import org.openstack.keystone.model.Access;
    import org.openstack.keystone.model.Authentication;
    import org.openstack.keystone.model.Authentication.Token;
    import org.openstack.keystone.model.Tenants;
    import org.openstack.keystone.utils.KeystoneUtils;
    import org.openstack.nova.NovaClient;
    import org.openstack.nova.api.FlavorsCore;
    import org.openstack.nova.api.ImagesCore;
    import org.openstack.nova.api.ServersCore;
    import org.openstack.nova.api.extensions.FloatingIpDnsExtension;
    import org.openstack.nova.api.extensions.FloatingIpsExtension;
    import org.openstack.nova.api.extensions.KeyPairsExtension;
    import org.openstack.nova.api.extensions.NetworksExtension;
    import org.openstack.nova.api.extensions.SecurityGroupsExtension;
    import org.openstack.nova.model.Flavor;
    import org.openstack.nova.model.Flavors;
    import org.openstack.nova.model.FloatingIp;
    import org.openstack.nova.model.FloatingIps;
    import org.openstack.nova.model.Image;
    import org.openstack.nova.model.Images;
    import org.openstack.nova.model.KeyPair;
    import org.openstack.nova.model.KeyPairs;
    import org.openstack.nova.model.Network;
    import org.openstack.nova.model.Networks;
    import org.openstack.nova.model.SecurityGroup;
    import org.openstack.nova.model.SecurityGroups;
    import org.openstack.nova.model.Server;
    import org.openstack.nova.model.ServerForCreate;
    import org.openstack.nova.model.Servers;public class TestOpenstack { private static final String KEYSTONE_AUTH_URL = "http://192.168.1.2:35357/v2.0"; private static final String KEYSTONE_USERNAME = "admin"; private static final String KEYSTONE_PASSWORD = "admin"; private static final String KEYSTONE_TOKEN = "4c57a86f453d4045a90e1b14ddfb8b81";   

    private  static Authentication authentication ;
    private static KeystoneClient keystone;
    private static Access access;
    private static NovaClient novaClient;
    private static Tenants tenants ;
    private static String tokenTemp;
     
    public static void Init() {
    keystone = new KeystoneClient(KEYSTONE_AUTH_URL);
    AbstractOpenStackClient client = new AbstractOpenStackClient(
    KEYSTONE_AUTH_URL);
    access = client
    .request("/tokens")
    .execute(
    "POST",
    Entity.json("{\"auth\":{\"passwordCredentials\":{\"username\":\""
    + KEYSTONE_USERNAME
    + "\",\"password\":\""
    + KEYSTONE_PASSWORD
    + "\"},\"tenantId\":\""
    + KEYSTONE_TOKEN + "\"}}"), Access.class);
    tokenTemp = access.getToken().getId();
    if (tokenTemp != null) {
    keystone.setToken(tokenTemp); // 获取access中 id [token=Token
    }
    tenants = keystone.execute(new ListTenants());// 这个是获取keystoen数据库表中tenant表数据
    if (tenants.getList().size() > 0) {
    authentication = new Authentication();
    Token token = new Token();
    token.setId(tokenTemp);
    authentication.setToken(token); // 就是上面获取的id:95d304ab72a14933be27ec2601355146
    //authentication.setTenantId(tenants.getList().get(0).getId());
        authentication.setTenantId(KEYSTONE_TOKEN);
    access = keystone.execute(new Authenticate(authentication));
    novaClient = new NovaClient(KeystoneUtils.findEndpointURL(
    access.getServiceCatalog(), "compute", null, "public"),
    tokenTemp);
    }else {
    System.out.println("No tenants found!");
    }
    }

    public static void main(String[] args) {
    Init();
    // ListService();//
    // ListImage();
    // ListSecurityGroup();
    ListFlavor();
    GetFlavorModel();
    ListServerDetail();
    ShowService();
    ListKeyPairs();
    GetKeyPariModel();
    ListImage();
    GetImageModel();
    ListFloatingIp();//由于系统中还没有创建floatingip 所以目前出错
    GetFloatIpModel();
    //CreateServer();// 可以创建 实例,不过在这里绑定floating ip 没有起作用
    }


    public static void printObject(Object obj){
    System.out.println(obj.getClass()+"   "+obj);
    }

    //------------查看平台-------
       //查看平台中正在运行的server
    public static void ListService(){
    Servers servers = novaClient.execute(ServersCore.listServers());
    for (Server server : servers) {
    System.out.println(server);
    }
    }
    public static void ListServerDetail(){
    Servers servers = novaClient.execute(ServersCore.listServers(true));
    for(Server server:servers){
    printObject(server);
    }
    }
    public static void ShowService(){
    Server server = novaClient.execute(ServersCore.showServer("1f70831c-503d-4375-8b31-f9042929969b"));
            printObject(server);
    }

    public static void ListImage(){
    //通过novaclient查看平台中的image
              Images images = novaClient.execute(ImagesCore.listImages());
              for(Image image :images){
               System.out.println(image);
              }
    }
    public static void ListKeyPairs(){
     //查看keypair
              KeyPairs keypairs = novaClient.execute(KeyPairsExtension.listKeyPairs());
              for(KeyPair keypair:keypairs){
                System.out.println(keypair);
              }
    }
    public static void ListSecurityGroup(){
    //查看SecurityGroup
              SecurityGroups securityGroups = novaClient.execute(SecurityGroupsExtension.listSecurityGroups());
              for(SecurityGroup sg :securityGroups){
               System.out.println(sg);
              }
    }

    public static void ListFlavor(){
    Flavors flavors = novaClient.execute(FlavorsCore.listFlavors());
    for(Flavor flavor :flavors){
        System.out.println(flavor.getId());
    }
    }
    public static void ListFloatingIp(){
      
    FloatingIps floatingIps =   novaClient.execute(FloatingIpsExtension.listFloatingIps());
    for(FloatingIp floatingIp :floatingIps){
    printObject(floatingIp);
    }
    }
    public static void ListFixIp(){
    }
    //------获得信息------
    //获得SecuritGroup model
    public static SecurityGroup GetSecurityGroup(int index){
    SecurityGroup sg = null ;
    SecurityGroups sgs = novaClient.execute(SecurityGroupsExtension.listSecurityGroups());
        List<SecurityGroup> alist =  sgs.getList();
    if(alist.size() >index-1){
     sg = (SecurityGroup)alist.get(index);
    }
    return sg;
    }
    //获得Flavor model
    public static Flavor GetFlavorModel(){
    Flavor flavor  = null;
    Flavors flavors = novaClient.execute(FlavorsCore.listFlavors());
    List<Flavor> flavorList = flavors.getList();
    if(flavorList.size()>0){
    flavor = (Flavor)flavorList.get(0);
    }
    printObject(flavor);
    return flavor;
    }
    //获得key model
    public static KeyPair GetKeyPariModel(){
    KeyPair keypair = null;
    KeyPairs keypairs = novaClient.execute(KeyPairsExtension.listKeyPairs());
    List<KeyPair> keypairList = keypairs.getList();
    if(keypairList.size()>0){
    keypair = keypairList.get(0);
    }
    printObject(keypair);
    return keypair;
    }
    //获得 image model
    public static Image GetImageModel(){
    Image image =null;
    Images images = novaClient.execute(ImagesCore.listImages());
    List<Image> imageList = images.getList();
    if(imageList.size() >0){
    image = imageList.get(0);
    }
               printObject(image);
    return image;
    }
    //获得floatp model
    public  static FloatingIp GetFloatIpModel(){
    FloatingIp floatingIp = null;
    FloatingIps floatingIps = novaClient.execute(FloatingIpsExtension.listFloatingIps());
    List<FloatingIp> floatingIpList = floatingIps.getList();
    if(floatingIpList.size() >0 ){
    floatingIp = floatingIpList.get(0);
    }
    printObject(floatingIp);
    return floatingIp;
    }
    // ---------------------创建--------------
    // create security group
    public static void CreateSecurityGroup (){
    SecurityGroup securityGroup = novaClient.execute(SecurityGroupsExtension.createSecurityGroup("GroupSecrityForLostTest", "This securityGroup is Create for lost ,just for test"));
    novaClient.execute(SecurityGroupsExtension.createSecurityGroupRule(securityGroup.getId(), "UDP", 9090, 9092, "0.0.0.0/0"));
    novaClient.execute(SecurityGroupsExtension.createSecurityGroupRule(securityGroup.getId(), "TCP", 8080, 8080, "0.0.0.0/0"));
            System.out.println(securityGroup);
    }

    //create keypair 
    public static void CreateKeyPair(){ //   创建一个keypair
            KeyPair keyPair = novaClient.execute(KeyPairsExtension.createKeyPair("mykeypair"));//keypair name 所必须唯一的
     System.out.println(keyPair.getPrivateKey());
    }
    //创建 flavor?? 貌似不可以通过api 创建 



      // 创建一个server
    public static void CreateServer(){

    ServerForCreate serverForCreate = new ServerForCreate();
    serverForCreate.setName("CreateByLost");
    serverForCreate.setFlavorRef(GetFlavorModel().getId());
    serverForCreate.setImageRef(GetImageModel().getId());
    serverForCreate.setKeyName(GetKeyPariModel().getName());
    serverForCreate.setAccessIPv4(GetFloatIpModel().getIp());
    serverForCreate.getSecurityGroups().add(new ServerForCreate.SecurityGroup("default"));
    serverForCreate.getSecurityGroups().add(new ServerForCreate.SecurityGroup(GetSecurityGroup(0).getName()));
    Server server = novaClient.execute(ServersCore.createServer(serverForCreate));
    System.out.println(server);
    }}
      

  3.   

    And if you need  The Demo project ,just  visit this page :
          http://download.csdn.net/detail/shatelang/4897372  download the  jar 
         http://download.csdn.net/detail/shatelang/4897405  download the project
      

  4.   

    https://github.com/woorea/openstack-java-sdk.git