首页 > 系统相关 >通过API接口操作vmware vcenter虚拟机

通过API接口操作vmware vcenter虚拟机

时间:2024-01-12 21:57:57浏览次数:39  
标签:session 虚拟机 vm curl API vcenter id vmware

layout: post
title: 通过API接口操作vmware vcenter虚拟机
keywords: vmware, vcenter, api
description: 通过API接口操作vmware vcenter虚拟机
categories: vmware

有台测试的虚拟机经常需要开机或关机操作,每次都通过web界面进行操作的话影响效率。遂通过API进行操作,减少web加载的等待时间。

详细的API接口文档可参考官方链接 :
vmware API

首先获取访问API接口的令牌

curl -s -k -X POST "https://<vcenter-ip>/rest/com/vmware/cis/session" -u <username>:<password> 

分别替换<vcenter-ip>为vcenter的ip; <username>为vcenter 的用户名 <password>为vcenter 的密码

注意curl 的方法为 POST

正常返回的结果类似这样:

{"value":"8d152bff9448d85ba377fab5d2712026"}

其中8d152bff9448d85ba377fab5d2712026 为令牌内容

通过令牌获取需要操作的vm的vm id

curl -s -k -X GET "https://<vcenter-ip>/rest/vcenter/vm" -H "vmware-api-session-id: <your-session-id>"  | jq

分别替换<vcenter-ip>为vcenter的ip; <your-session-id>为上一步获取到的令牌

注意curl 的方法为 GET

输出的结果为json格式,不太方便看。

{"value": [{"memory_size_MiB": 4096,"vm": "vm-5039","name": "vAF_8.0.6","power_state": "POWERED_OFF","cpu_count": 2} ]}

可以安装jq工具进行格式化,安装jq后执行(其实就是比上一步多输入 | jq ):

curl -s -k -X GET "https://<vcenter-ip>/rest/vcenter/vm" -H "vmware-api-session-id: <your-session-id>"  | jq

输出结果为:

{
  "value": [
    {
      "memory_size_MiB": 4096,
      "vm": "vm-5039",
      "name": "vAF_8.0.6",
      "power_state": "POWERED_OFF",
      "cpu_count": 2
    }
    ]
}

其中name为vm的名字,vm为vm id
当然也可以利用jq 通过vm名过滤出vm id,例如要过滤出名字为PA-VM-11的虚拟机的vm id 则执行

curl -s -k -X GET "https://<vcenter-ip>/rest/vcenter/vm" -H "vmware-api-session-id: <your-session-id>"  | jq -r '.value[] | select(.name=="PA-VM-11") | .vm

操作虚拟机

此时令牌、vm id都获取后可进行虚拟机的操作

获取当前虚拟机完整信息

curl -s -k -X GET "https://<vcenter-ip>/rest/vcenter/vm/<vm-d>/" -H "vmware-api-session-id: <your-session-id>"

注意curl 的方法为 GET

获取当前虚拟机电源状态

只需要在vm id 后面加power字样

curl -s -k -X GET "https://<vcenter-ip>/rest/vcenter/vm/<vm-d>/power" -H "vmware-api-session-id: <your-session-id>"

注意curl 的方法为 GET

执行开机操作

curl -s -k -X POST "https://<vcenter-ip>/rest/vcenter/vm/<vm-id>/power/start" -H "vmware-api-session-id: <your-session-id>" 

注意curl 的方法为 POST

执行关机操作

curl -s -k -X POST "https://<vcenter-ip>/rest/vcenter/vm/<vm-id>/power/stop" -H "vmware-api-session-id: <your-session-id>" 

注意curl 的方法为 POST

成果脚本

将以下代码保存为文件 vm-operator

执行 bash vm-operator start 命令vm id 为vm-800的虚拟机自动开机

执行 bash vm-operator stop 命令vm id 为vm-800的虚拟机自动关机

#!/bin/bash

#检查 curl 和 jq 命令是否存在
command -v curl > /dev/null 2>&1 || { echo "curl 命令未安装. 请先安装 curl."; exit 1; }
command -v jq > /dev/null 2>&1 || { echo "jq 命令未安装. 请先安装 jq."; exit 1; }

vcenter_ip="10.0.0.3"
vm_id="vm-800"
username="admin"
password="Vmware"

case $# in
   0)
      echo "Usage: $0 {start|stop}"
      exit 1
      ;;
   1)
      response=$(curl -s -k -X POST https://$vcenter_ip/rest/com/vmware/cis/session -u $username:$password )
      session_id=$(echo "$response" | jq -r .value)
      if [ $? -ne 0 ]; then
        echo "登录 VMware vCenter API 失败。请检查 vCenter IP, 用户名和密码。"
        exit 1
      fi

      case $1 in
         start)
            echo "power on vm: win11 test..."
            curl -k -X POST "https://$vcenter_ip/rest/vcenter/vm/$vm_id/power/start" -H "vmware-api-session-id: $session_id"
            echo "Done!"
            ;;
         stop)
            echo "power off vm win 11 test..."
            curl -k -X POST "https://$vcenter_ip/rest/vcenter/vm/$vm_id/power/stop" -H "vmware-api-session-id: $session_id"
            echo "Done!"
            ;;
         *)
            echo "'$1' is not a valid verb."
            echo "Usage: $0 {start|stop}"
            exit 2
            ;;
      esac
      ;;
   *)
      echo "Too many args provided ($#)."
      echo "Usage: $0 {start|stop}"
      exit 3
      ;;
esac

标签:session,虚拟机,vm,curl,API,vcenter,id,vmware
From: https://www.cnblogs.com/id404/p/17961678

相关文章

  • kong api linux安装部署
    在Linux上安装和部署KongAPIGateway通常涉及以下几个步骤,这里提供一个简化的指南。请注意,截至2024年,最新版本的Kong可能有所变化,请参考官方文档获取最新安装指导:https://konghq.com/install/1.确认系统要求确保您的Linux系统满足Kong的最低要求,包括支持的Linux发行版和依赖库。2......
  • 如何通过kube-apiserver访问K8s集群中的App
    本文分享自华为云社区《通过kube-apiserver访问K8s集群中的App》,作者:tsjsdbd。K8s集群中的App(或者svc),通常使用ClusterIP,NodePort,Loadbalancer这些方式访问,但是你也可以通过Kube-apiserver(管理面)来访问App。在《跟唐老师学习云网络 -Kubernetes网络实现》里面,提到K8s集群里面的容......
  • 拼多多根据ID取商品详情原数据 API 实现实时数据获取的完整指南
    在电商行业中,商品详情页是用户了解商品信息、进行购买决策的重要页面。为了提高用户体验和促进销售,电商平台通常会提供商品详情的API接口,以便第三方应用能够实时获取商品数据。本文将介绍如何使用拼多多获得的根据ID取商品详情原数据的API实现实时数据获取,并提供相应的代码示例。......
  • 虚拟机网络模式之主机模式
    Host-Only模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMwareNetworkAdapterVMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。其网络结构如下图所示:通过上图,我们可以发现,如果要使得虚拟机......
  • 京东商品详情API实现实时数据获取的Java代码示例
    在电商行业中,商品详情页是用户了解商品信息、进行购买决策的重要页面。为了提高用户体验和促进销售,电商平台通常会提供商品详情的API接口,以便第三方应用能够实时获取商品数据。本文将介绍如何使用京东获得的JD商品详情API实现实时数据获取,并提供相应的Java代码示例。一、JD商品详......
  • Vue 3 Composition API 详解
    一、引言在Vue3中,引入了一个新的CompositionAPI,旨在提供一种更灵活和可重用的方式来组织组件代码。CompositionAPI基于函数式编程思想,允许开发者将逻辑和状态管理逻辑分离,使代码更加清晰和可维护。二、CompositionAPI的核心概念响应式数据在Vue3中,响应式数据是组件状态的重要......
  • 调用百度API实现经纬度转换
    百度API官网  登入后点击控制台,选择应用管理、我的应用、创建应用,等应用创建成功后复制访问应用AK的值; 经纬度转换工具类<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4......
  • 虚拟机网络模式之桥接模式
    什么是桥接模式?桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干......
  • Apipost接口自动化测试如何操作
    Apipost提供可视化的API自动化测试功能,使用Apipost研发人员可以设计、调试接口,测试人员可以基于同一数据源进行测试,Apipost接口自动化功能在上次更新中进行了逻辑调整,带来更好的交互操作、更多的控制器选择,同时新增同步接口模式选择、测试数据选择功能。添加接口使用Apipost,研发......
  • 虚拟化(7) windows虚拟机的显卡模式
    以前,我的启动参数是kvm。略。-vgaqxl进入windows虚拟机后,感觉鼠标滑动有点迟钝。查看设备管理器里,显卡模式是vga然后,下载了virtio-win-0.1.208.iso,启动参数用--cdromiso路径。进入windows打开光驱,运行Msi文件,提示这个版本要求win8及server2012以上。所以又下载了低版本virtio-......