FusionCompute esdk API(Java) 初尝试

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: FusionCompute esdk API(Java) 初尝试,尝试鉴权,获取站点,虚机信息等。

准备环境

第三方软件
Java Development Kit:7u10,推荐1.7及以上版本
idea/Eclipes 编辑器


服务器和帐户信息


使用SDK调用FusionCompute的接口之前,要先获取FusionCompute服务器的端口号和帐户信息。
这个是我本地搭建的,也可以使用华为的远程实验室。


获取软件及文档


可以在华为开发者社区资源中心获取最新的SDK和接口参考文档,以及二次开发时候需要的开源软件jar包


鉴权测试


创建Java项目,并引入SDK等相关资源包。

example code
package com.huawei.esdk.fusioncompute.demo.servlet;
import com.huawei.esdk.fusioncompute.local.ServiceFactory;
import com.huawei.esdk.fusioncompute.local.model.ClientProviderBean;
import com.huawei.esdk.fusioncompute.local.model.FCSDKResponse;
import com.huawei.esdk.fusioncompute.local.model.common.LoginResp;
import com.huawei.esdk.fusioncompute.local.resources.common.AuthenticateResource;
/**
 * Created with IntelliJ IDEA.
 * User: WangNing
 * Date: 2018/10/19
 * Time: 14:24
 * To change this template use File | Settings | File Templates.
 * Description:
 */
public class Login {
    public static void main(String[] args) {
        //设定服务器配置
        ClientProviderBean clientProvider = new ClientProviderBean();
        //设定服务器配置_设定服务器IP
        clientProvider.setServerIp("192.168.5.185");
        //设定服务器配置_设定服务器端口号
        clientProvider.setServerPort("7443");
        //初始化用户资源实例
        AuthenticateResource auth = ServiceFactory.getService(AuthenticateResource.class, clientProvider);
        //以用户名,用户密码作为传入参数,调用AuthenticateResource提供的login方法,完成用户的登录
        FCSDKResponse<LoginResp> resp = auth.login("jiekou", "Huawei@123!");
        System.out.println(resp.getResult());
    }
}

运行结果

网络异常,图片无法展示
|



服务器默认端口为74443


调用FC的eSDK接口的用户类型必须是接口用户类型。所以通过SDK鉴权时需要在FC页面中创建接口对接用户,然后用这个用户来调试相关代码。


出现 "errorCode":"10000022","errorDes":"版本号错误"
检查FC版本和SDK版本


获取站点和虚机信息

在某些场景下,有时我们需要先获取到所有的虚拟机列表。
然后根据特定条件找到我们需要的特定虚拟机,并对其进行操作。
所以这时便需要用到 FCSDKResponse<PageList> queryVMs(QueryVmsReq queryVmsReq,java.lang.String siteUri)
所以在获取虚拟机信息列表前,需要先获取站点信息,得到siteuri参数值.

1 获取站点信息

package site;
import com.huawei.esdk.fusioncompute.local.ServiceFactory;
import com.huawei.esdk.fusioncompute.local.model.ClientProviderBean;
import com.huawei.esdk.fusioncompute.local.model.FCSDKResponse;
import com.huawei.esdk.fusioncompute.local.model.SDKCommonResp;
import com.huawei.esdk.fusioncompute.local.model.common.LoginResp;
import com.huawei.esdk.fusioncompute.local.model.site.SiteBasicInfo;
import com.huawei.esdk.fusioncompute.local.resources.common.AuthenticateResource;
import com.huawei.esdk.fusioncompute.local.resources.site.SiteResource;
import org.junit.Test;
import java.util.List;
public class test_site {
    @Test
    public void querySites(){
        //设定服务器配置
        ClientProviderBean clientProvider = new ClientProviderBean();
        //设定服务器配置_设定服务器IP
        clientProvider.setServerIp("192.168.5.185");
        //设定服务器配置_设定服务器端口号
        clientProvider.setServerPort("7443");
        //初始化用户资源实例
        AuthenticateResource auth = ServiceFactory.getService(AuthenticateResource.class, clientProvider);
        //以用户名,用户密码作为传入参数,调用AuthenticateResource提供的login方法,完成用户的登录
        FCSDKResponse<LoginResp> resp = auth.login("jiekou", "Huawei@123!");
        System.out.println(resp.getResult());
        System.out.println("---------------------------------");
        //获取SiteResource接口的实现
        SiteResource site = ServiceFactory.getService(SiteResource.class,clientProvider);
        FCSDKResponse<List<SiteBasicInfo>> resps = site.querySites();
        System.out.println(resps);
        //登出FC系统
        SDKCommonResp logout = auth.logout();
    }
}


返回的结果:

/***
         * {
         *  "sites": [{
         *    "name": "site",
         *    "status": "normal",
         *    "ip": "192.168.5.185",
         *    "uri": "/service/sites/4BAD086A",
         *    "urn": "urn:sites:4BAD086A",
         *    "isSelf": true,
         *    "isDC": false         *        }]
         * }
         */



2. 获取虚拟机信息

package vm;
import com.huawei.esdk.fusioncompute.local.ServiceFactory;
import com.huawei.esdk.fusioncompute.local.model.ClientProviderBean;
import com.huawei.esdk.fusioncompute.local.model.FCSDKResponse;
import com.huawei.esdk.fusioncompute.local.model.PageList;
import com.huawei.esdk.fusioncompute.local.model.SDKCommonResp;
import com.huawei.esdk.fusioncompute.local.model.common.LoginResp;
import com.huawei.esdk.fusioncompute.local.model.vm.QueryVmsReq;
import com.huawei.esdk.fusioncompute.local.model.vm.VmInfo;
import com.huawei.esdk.fusioncompute.local.resources.common.AuthenticateResource;
import com.huawei.esdk.fusioncompute.local.resources.vm.VmResource;
import org.junit.Test;
public class queryVMs {
    // 获取虚拟机信息
    @Test
    public void queryVMs(){
        //设定服务器配置
        ClientProviderBean clientProvider = new ClientProviderBean();
        //设定服务器配置_设定服务器IP
        clientProvider.setServerIp("192.168.5.185");
        //设定服务器配置_设定服务器端口号
        clientProvider.setServerPort("7443");
        //初始化用户资源实例
        AuthenticateResource auth = ServiceFactory.getService(AuthenticateResource.class, clientProvider);
        //以用户名,用户密码作为传入参数,调用AuthenticateResource提供的login方法,完成用户的登录
        FCSDKResponse<LoginResp> resp = auth.login("jiekou", "Huawei@123!");
        System.out.println(resp.getResult());
        //之前获取的站点信息
        String siteUri ="/service/sites/4BAD086A";
        VmResource instance = ServiceFactory.getService(VmResource.class,clientProvider);
        QueryVmsReq req = new QueryVmsReq();
        req.setLimit(5);
        req.setOffset(0);
        FCSDKResponse<PageList<VmInfo>> fcsdkResponse = instance.queryVMs(req, siteUri);
        System.out.println(fcsdkResponse);
        SDKCommonResp sdkCommonResp = auth.logout();
    }
}



返回结果:

/**
     * {
     *  "total": 2,
     *  "vms": [{
     *    "name": "test-linux01",
     *    "location": "urn:sites:4BAD086A:clusters:10",
     *    "hostName": "linux-IcjKyx",
     *    "description": null,
     *    "group": null,
     *    "status": "running",
     *    "clusterName": "ManagementCluster",
     *    "hostUrn": "urn:sites:4BAD086A:hosts:62",
     *    "isBindingHost": false,
     *    "isTemplate": false,
     *    "uri": "/service/sites/4BAD086A/vms/i-00000003",
     *    "urn": "urn:sites:4BAD086A:vms:i-00000003",
     *    "uuid": "e6479704-8f5a-40e7-a376-b320d022e706",
     *    "clusterUrn": "urn:sites:4BAD086A:clusters:10",
     *    "cdRomStatus": "empty",
     *    "createTime": "2018-10-18 07:16:44",
     *    "isLinkClone": false,
     *    "locationName": "ManagementCluster",
     *    "pvDriverStatus": "notRunning",
     *    "toolInstallStatus": "empty",
     *    "imcSetting": null,
     *    "idle": 0,
     *    "toolsVersion": ""     *        }, {
     *    "name": "VRM01",
     *    "location": "urn:sites:4BAD086A:hosts:62",
     *    "hostName": "linux-IcjKyx",
     *    "description": "",
     *    "group": "VRMGroup",
     *    "status": "running",
     *    "clusterName": "ManagementCluster",
     *    "hostUrn": "urn:sites:4BAD086A:hosts:62",
     *    "isBindingHost": true,
     *    "isTemplate": false,
     *    "uri": "/service/sites/4BAD086A/vms/i-00000001",
     *    "urn": "urn:sites:4BAD086A:vms:i-00000001",
     *    "uuid": "57bf58b6-a716-4037-81ac-0d49d506460b",
     *    "clusterUrn": "urn:sites:4BAD086A:clusters:10",
     *    "cdRomStatus": "empty",
     *    "createTime": "2018-10-17 22:25:34",
     *    "isLinkClone": false,
     *    "locationName": "linux-IcjKyx",
     *    "pvDriverStatus": "running",
     *    "toolInstallStatus": "empty",
     *    "imcSetting": null,
     *    "idle": 0,
     *    "toolsVersion": "1.3.0.23"     *    }]
     * }
     */

总结

以上就是使用FusionCompute eSDK 进行的一个简单尝试,我们可以利用SDK显示更多针对虚拟机的操作。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
29天前
|
Java API Spring
打造未来电商新引擎:揭秘Java可扩展API设计,让支付与物流灵活如丝,引领电商时代潮流!
【8月更文挑战第30天】本文通过电商平台案例,探讨了如何设计可扩展的Java API。首先定义支付和物流服务的接口与抽象类,然后实现具体服务,接着引入工厂模式或依赖注入管理服务实例,最后通过配置实现灵活扩展。这种设计确保了应用架构的灵活性和长期稳定性。
43 3
|
30天前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
70 0
|
17天前
|
Java API C++
Java 8 Stream Api 中的 peek 操作
本文介绍了Java中`Stream`的`peek`操作,该操作通过`Consumer&lt;T&gt;`函数消费流中的每个元素,但不改变元素类型。文章详细解释了`Consumer&lt;T&gt;`接口及其使用场景,并通过示例代码展示了`peek`操作的应用。此外,还对比了`peek`与`map`的区别,帮助读者更好地理解这两种操作的不同用途。作者为码农小胖哥,原文发布于稀土掘金。
Java 8 Stream Api 中的 peek 操作
|
3天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的探索
【9月更文挑战第24天】本文将深入浅出地介绍Java 8中的重要新特性——Lambda表达式和Stream API,通过实例解析其语法、用法及背后的设计哲学。我们将一探究竟,看看这些新特性如何让Java代码变得更加简洁、易读且富有表现力,同时提升程序的性能和开发效率。
|
2天前
|
SQL Java Linux
Java 8 API添加了一个新的抽象称为流Stream
Java 8 API添加了一个新的抽象称为流Stream
|
4天前
|
Java
flyway报错Caused by: java.lang.NoSuchMethodError: org.flywaydb.core.api.configuration.FluentConfigurat
flyway报错Caused by: java.lang.NoSuchMethodError: org.flywaydb.core.api.configuration.FluentConfigurat
12 2
|
21天前
|
安全 Java API
【性能与安全的双重飞跃】JDK 22外部函数与内存API:JNI的继任者,引领Java新潮流!
【9月更文挑战第7天】JDK 22外部函数与内存API的发布,标志着Java在性能与安全性方面实现了双重飞跃。作为JNI的继任者,这一新特性不仅简化了Java与本地代码的交互过程,还提升了程序的性能和安全性。我们有理由相信,在外部函数与内存API的引领下,Java将开启一个全新的编程时代,为开发者们带来更加高效、更加安全的编程体验。让我们共同期待Java在未来的辉煌成就!
46 11
|
22天前
|
安全 Java API
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
43 11
|
19天前
|
监控 Java 大数据
【Java内存管理新突破】JDK 22:细粒度内存管理API,精准控制每一块内存!
【9月更文挑战第9天】虽然目前JDK 22的确切内容尚未公布,但我们可以根据Java语言的发展趋势和社区的需求,预测细粒度内存管理API可能成为未来Java内存管理领域的新突破。这套API将为开发者提供前所未有的内存控制能力,助力Java应用在更多领域发挥更大作用。我们期待JDK 22的发布,期待Java语言在内存管理领域的持续创新和发展。
|
21天前
|
Java API 数据处理
【Java的SIMD革命】JDK 22向量API:释放硬件潜能,让Java应用性能飙升!
【9月更文挑战第7天】 JDK 22向量API的发布标志着Java编程语言在SIMD技术领域的重大突破。这一新特性不仅释放了现代硬件的潜能,更让Java应用性能实现了飙升。我们有理由相信,在未来的发展中,Java将继续引领编程语言的潮流,为开发者们带来更加高效、更加强大的编程体验。让我们共同期待Java在SIMD技术的推动下开启一个全新的性能提升时代!