前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用JClouds在Java中获取和发布云服务器

使用JClouds在Java中获取和发布云服务器

作者头像
小芬达
修改2018-01-16 11:04:41
6.3K1
修改2018-01-16 11:04:41
举报

本文中,我们举例来说明如何使用JClouds API 获取和发布云服务器。JClouds API 可以和大量云服务提供商(包括Amazon EC2和Rackspace)协同工作并且允许使用Java代码执行大量操作。换句话说,JClouds API不是针对某些提供商所特定接口去进行交互。下面我们以Rackspace所提供的云服务为例进行说明。

首先为JClouds获取jar。如果您使用的是Maven,依赖关系如下所示。在操作之前,请先检查版本是否需要更新。

<dependency>
     <groupId>org.jclouds</groupId>
     <artifactId>jclouds-allcompute</artifactId>
     <version>1.5.2</version>
</dependency>
<dependency>
     <groupId>org.jclouds.driver</groupId>
     <artifactId>jclouds-sshj</artifactId>
     <version>1.5.1</version>
</dependency>
<dependency>
     <groupId>org.jclouds.driver</groupId>
     <artifactId>jclouds-log4j</artifactId>
     <version>1.5.1</version>
</dependency

创建计算服务

创建一个名为“CloudService”的类。在它的在构造函数中,设置好接口信息,如用户名、API秘钥等信息,最后将这个类实例化。

package co.syntx.examples.jclouds;

import static org.jclouds.compute.predicates.NodePredicates.inGroup;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.log4j.Logger;
import org.jclouds.ContextBuilder;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.compute.domain.ComputeMetadata;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.domain.Template;
import org.jclouds.compute.domain.TemplateBuilder;

public class CloudService {

    private ComputeService compute;
    private String location;
    public static final Logger logger = Logger.getLogger(CloudService.class);

    /**
     * CloudService类构造器
     * 需要明确云服务供应商提供的字符串,数据库位置,用户名,API秘钥。
     * @param provider
     * @param location
     * @param username
     * @param apiKey
     */

     public CloudService(String provider, String location, String username, String apiKey) {
        this.location = location;  
         ComputeServiceContext context = ContextBuilder.newBuilder(provider).credentials(username, apiKey)
					.buildView(ComputeServiceContext.class);
         compute = context.getComputeService();
         logger.info("Cloud Compute Service Context Created");
     }

获取云服务

接下来写一个获取云服务的功能,其中主要的参数如下:

groupName:如果要获取多个服务器,则所有服务器都需要以groupName作为前缀,以便识别和分类。

OS:操作系统的名称

osVersion:操作系统的版本

RAM:RAM的大小

count:所需的云服务器数量

/**
* 通过指定参数获取服务器
* @param groupName
* @param os
* @param osVersion
* @param ram
* @param count
* @throws Exception
*/
public void aquireServer(String groupName, String os, String osVersion, Integer ram, Integer count) throws Exception {

     TemplateBuilder templateBuilder = compute.templateBuilder();
     Template template = templateBuilder
                         .locationId(this.location)
                         .os64Bit(true)
                         .osDescriptionMatches(os)
                         .osVersionMatches(osVersion)
                         .minRam(ram)
                         .build();

      logger.info("Acquiring "+ count+ " server(s).");
      Set<? extends NodeMetadata> nodes = compute.createNodesInGroup(groupName,count, template);
      logger.info(nodes.size() + " server(s) acquired!");
}

发布服务器组中的服务器

我们可以一次发布一个或一组服务器。下面代码可以发布服务器组:

public void releaseGroup(String groupName) throws Exception {
    logger.info("Releasing server(s) from group " + groupName);
    Set<? extends NodeMetadata> servers = compute.destroyNodesMatching(inGroup(groupName));		
    logger.info(servers.size() + " released from group " + groupName);
}

实现

最后,我们对类进行实例化并传入一组参数,调用获取云服务的功能。在调用之前,rackspace控制面板如下:

rackspace 控制面板

CloudService cloudService = new CloudService("rackspace-cloudservers-us","DFW", "yourUsername", "yourAPIKey");
cloudService.aquireServer("my-test-servers","Ubuntu","12.04",512,2);

在成功获取服务器之前,再调用这个功能都会被阻塞。阻塞过程中,控制面板会像图中所示:

图片.png

最后,调用服务器发布功能进行发布。

cloudService.releaseGroup("my-test-servers");

这就是JClouds使用的简例。JClouds库提供了很多强大的功能。最重要的就是JClouds将您选择的云服务进行了抽象,如果更换其他提供商的云服务,基本上不需要去修改代码。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建计算服务
  • 获取云服务
  • 发布服务器组中的服务器
  • 实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档