libvirt API管理hypervisors

发布一段C代码,用于连接指定的KVM宿主机器,获得该宿主机器的配置信息,以及该主机上所有的虚拟主机列表、状态及配置信息:

#include <stdio.h>
#include <stdlib.h>
#include <libvirt/libvirt.h>

void ListDom(virConnectPtr conn)
{
    char **inactiveDom;
    virDomainPtr *allDom;
    int nInActiveDoms = virConnectNumOfDefinedDomains(conn); 
    allDom = malloc(sizeof(virDomainPtr)* nInActiveDoms);
    int i = 0;
    char str[200];
    virDomainInfo t;
    if(nInActiveDoms != 0)
    {
        printf("inactive num: %d\n",nInActiveDoms);
        inactiveDom = malloc(sizeof(char*) * (nInActiveDoms));
        nInActiveDoms  = virConnectListDefinedDomains(conn , inactiveDom , nInActiveDoms); 
        printf("numOfInactiveDom*************:%d\n", nInActiveDoms);
 
        for(i=0 ; i<nInActiveDoms; i++)
        {
            printf("name:%s\n",inactiveDom[i]);
            allDom[i] = virDomainLookupByName(conn , inactiveDom[i]);
            virDomainGetUUIDString(allDom[i],str);
            printf("uuid:%s | os:%s\n",str,virDomainGetOSType(allDom[i]));   
            virDomainGetInfo(allDom[i],&t);
            printf("HostName:%s\n",virDomainGetName(allDom[i]));
            printf("state:%d|maxmem:%d|memused:%d|cpunum:%d|cputime:%ld\n",t.state,t.maxMem,t.memory,t.nrVirtCpu,t.cpuTime);
          }
    }
}
void ListActiveDom(virConnectPtr conn)
{
    int numOfActiveDom = virConnectNumOfDomains(conn);
    int activeDom[numOfActiveDom];
    virDomainPtr *allDomains;     
    virDomainInfo t;
    int i ;
    char str[200];
    allDomains = malloc(sizeof(virDomainPtr)* numOfActiveDom); 
    numOfActiveDom = virConnectListDomains(conn , activeDom , numOfActiveDom); 
   
    printf("Active Dom: \n"); 
    for(i=0 ; i<numOfActiveDom ; i++){
        printf("id:%d\n",activeDom[i]); 
        allDomains[i] = virDomainLookupByID(conn ,activeDom[i]);  //ͨ¹ýidÈ¡Domain 
        virDomainGetUUIDString(allDomains[i],str);
        printf("uuid:%s | os:%s\n",str,virDomainGetOSType(allDomains[i]));   
        printf("HostName:%s\n",virDomainGetName(allDomains[i]));
        virDomainGetInfo(allDomains[i],&t);
        printf("state:%d|maxmem:%d|memused:%d|cpunum:%d|cputime:%ld\n",t.state,t.maxMem,t.memory,t.nrVirtCpu,t.cpuTime);
    }
}
int main(int argc, char *argv[])
{
    virConnectPtr conn;
    char* caps;
    virNodeInfo nodeinfo;   
    char str[200];
    char *struuid[200];
    int max = 0;
    int i = 0;
    virNodeMemoryStats *pMem;
    int pN[100];
    while(1)
    {
      printf("Input KVM Host:>");
      gets(str);
      printf("\n");
      if(strcmp(str,"quit") == 0)
      {
          printf("Bye-Bye\n");
          exit(0);
      }
      conn = virConnectOpen(str);
      if (conn == NULL) {
          fprintf(stderr, "Failed to open connection to qemu:///system\n");
          continue;
      }
      caps = virConnectGetCapabilities(conn);
      fprintf(stdout, "Capabilities:\n%s\n", caps);
      free(caps);

printf("HostName: %s\n",virConnectGetHostname(conn));
      fprintf(stdout, "Virtualization type: %s\n", virConnectGetType(conn));

virNodeGetInfo(conn, &nodeinfo);
      fprintf(stdout, "Model: %s\n", nodeinfo.model);
      fprintf(stdout, "Memory size: %lukb\n", nodeinfo.memory);
      fprintf(stdout, "Number of CPUs: %u\n", nodeinfo.cpus);
      fprintf(stdout, "MHz of CPUs: %u\n", nodeinfo.mhz);
      fprintf(stdout, "Number of NUMA nodes: %u\n", nodeinfo.nodes);
      fprintf(stdout, "Number of CPU sockets: %u\n", nodeinfo.sockets);
      fprintf(stdout, "Number of CPU cores per socket: %u\n", nodeinfo.cores);
      fprintf(stdout, "Number of CPU threads per core: %u\n", nodeinfo.threads);
    /*  printf("Sysinfor :[%s]\n",virConnectGetSysinfo(conn,0));

pMem = malloc(sizeof(virNodeMemoryStats)* 100);
      virNodeGetMemoryStats(conn,VIR_NODE_MEMORY_STATS_ALL_CELLS,pMem,pN,0);
        for(i = 0; i < 10; i++)
        {
            printf("MEM STAT\n%s - %ld\n",pMem[i].field,pMem[i].value);
        }*/
      ListDom(conn);
      ListActiveDom(conn);
      virConnectClose(conn);
    }
    return 0;
}

执行效果如下:

[root@kvm T]# ./t
Input KVM Host:>qemu+ssh:///system

posted on 2014-05-26 14:25 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/ruiy/p/libvirtAPI.html

libvirt API管理hypervisors相关推荐

  1. python调用libvirt_通过python获取kvm虚拟机的监控信息(基于libvirt API)

    通常在我们的云环境中,为了保证云平台中虚拟机的正常运行,基本都需要这样一个功能,就是收集虚拟机的监控数据,比如cpu的使用率.内存的使用率.磁盘io.网络io等基本信息.可以利用这些信息及时调整云平台 ...

  2. 如何使用Azure API管理服务?

    对打通云应用之间的通信而言,API至关重要,正确管理这些API也非常关键.让我们从学习Azure的API服务来开始这一进程. 在云和微服务架构时代,API是数字化业务的通用语言.根据分析公司Forre ...

  3. 红帽计划收购API管理领导者3scale

    2016年7月5日,世界领先的开源解决方案供应商红帽公司日前宣布,公司已经签署一项关于收购应用编程接口 (API) 管理技术的领先提供商3scale的最终协议.通过将3scale加入到现有产品组合中, ...

  4. 微软宣布在Azure API管理中预览OpenAPI规范V3

    最近,微软宣布在Azure API管理中支持OpenAPI规范V3,他们的服务允许创建.发布.监控和维护API.OpenAPI规范的使用是通过 OpenAPI .NET SDK完成的,并支持从它们的实 ...

  5. Api管理工具(spring-rest-docs)

    对于app开发来说,必须需要有相应的api文档,一般最基础的就是用markdown工具来撰写api文档.当对于开发人员来说,是总会想着寻找更方便撰写,测试,对接前端开发的文档生成的工具. 其实这方面的 ...

  6. 高效、易用、功能强大的 api 管理平台(内附彩蛋)

    前言导读 实际环境的需求可以说是:只有你没想到,没有实现不了的,征对于目前实际开发.测试.生产等环境中,需要用到各类的接口可达几十.甚至上百个,因此,必须需要一个统一管理的工具平台来统一管理这类接口, ...

  7. python调用lib_基于python调用libvirt API

    基于python调用libvirt API 1.程序代码 #!/usr/bin/python import libvirt import sys def createConnection(): con ...

  8. FREE 开源 API 管理工具等

    最近学习API 管理工具,发现几个不错的东西,记录如下: 1.IBM 收购NODE 厂家  STRONGLOOP 有一产品LOOPBACK,开源,好! 2.apigee  api管理平台 也不错. 3 ...

  9. NGINX最新API管理模块已可用,针对内部和外部API进行了优化

    去年10月在NGINX大会上发布的NGINX API管理模块现已普遍可用. NGINX产品管理总监Liam Crilly将新模块与NGINX Plus和NGINX Controller一起描述为下一代 ...

  10. 微软为无服务器架构引入新API管理消费层

    摘要: 在最近的一篇博客文章中,微软宣布了一个新的Azure API Management消费层.这个新的使用层允许针对"基于微"的计费,并遵循了无服务器架构原则,包括自动化的伸缩 ...

最新文章

  1. 嵌入式ARM Linux开发板自启动,跳过输入root用户名和密码
  2. linux下tomcat的安装和配置
  3. python获取动态数据采集仪代理_Python3爬虫技术文档(3)——动态页面数据采集,三,获取...
  4. Fiddler抓包使用教程-Android应用抓包
  5. datasg中数据的存储结构
  6. 13.2.6 会话跟踪技术
  7. docker安装zookeeper(单节点安装)
  8. 从一次换机器的过程谈软硬件的分离
  9. YOLOv4 | 用C++ 和OpenCV 实现视频目标检测
  10. OpenShift 4 - Knative教程 (1) 创建Serverless运行环境
  11. Apache工具库——Apache Commons的使用
  12. C++动态数组的创建
  13. 创建Maven web工程不能解析EL表达式的解决办法
  14. paip.提升性能3倍--使用栈跟VirtualAlloc代替堆的使用.
  15. 【打卡帖】7日玩转ESP32——(第5日) 通过串口的WiFi 配网
  16. 洞态IAST源码分析及吐槽
  17. 中小板企业上市要走哪些流程
  18. java中console_java的Console类的使用方法及实例
  19. 一般程序员正常会会几种语言?
  20. CF868F 分治优化dp

热门文章

  1. paip.编程语言方法重载实现的原理及python,php,js中实现方法重载
  2. 星环TDH助力南方基金数据中心迈入大数据时代
  3. (转)查理·芒格:光靠已有的知识,你走不了多远
  4. 阿里云祝顺民:因云而生的云原生网络
  5. 新兴IT企业特斯拉(七)——充电先行
  6. 【三维路径规划】基于matlab RRT算法无人机三维路径规划【含Matlab源码 1363期】
  7. 【优化调度】基于matlab一致性算法求解电力系统分布式经济调度优化问题【含Matlab源码 770期】
  8. io流不关闭会怎么样_关闭IO流,你确定不试试trywithresources?
  9. Cannot read property 'style' of null 问题
  10. php168批量添加会员,ecshop快速批量添加会员