【原创】使用 VMware Fusion 的 REST API

前言

1、概述

如果你在 MacOS 上安装了 VMware Fusion 或者 VMware Fusion Pro,则在你的系统中已经自动安装了 vmrest 功能。

vmrest 是一个用于运行与管理 Fusion REST API 服务的命令。

Fusion REST API 对于 Fusion 和 Fusion Pro 均可用,您可以使用该 REST API 以编程方式与核心 VMware 管理程序和虚拟机进行交互。

你可以通过 HTTP 和 HTTPS 发送标准 GET、PUT、POST 和 DELETE 请求来控制配置和部署选项。

例如,你可以使用 Fusion REST API 来执行电源操作。您可以执行与网络相关的操作,例如创建和更新虚拟网卡配置,以及从虚拟机中检索 IP 地址。您还可以配置共享的文件夹。响应负载以 JSON 格式提供。

2、相关环境

  • MacOS 11.2.3

  • VMware Fusion Pro 12.1.0

  • Postman 8.0.8

3、注意事项

  • Fusion REST API 服务依赖于 vmrest 进程

  • vmrest 服务以启动此服务的用户身份运行。例如,sudo vmrest 命令以 root 用户身份运行

  • vmrest 只能监听本地的 IP,即当前只能从本地计算机访问 Fusion REST API 服务(如果想远程访问,可以使用 nginx 端口转发/反向代理等方式)

正文

1、第一次运行 vmrest 前

如果之前还未正常运行过 vmrest 的服务,那么直接输入 vmrest 命令会提示你请使用 vmrest -C 命令运行

➜  ~ vmrest    
VMware Fusion REST API
Copyright (C) 2015-2020 VMware Inc.
All Rights Reserved
-
vmrest 1.2.1 build-17195230
Please use -C to update credential

必须使用 vmrest -C 命令来设置你的 vmrest 的用户名密码,密码有复杂性要求(见下方代码块中内容)

$ vmrest -C   
VMware Fusion REST API
Copyright (C) 2015-2020 VMware Inc.
All Rights Reserved
-
vmrest 1.2.1 build-17195230
Username:jiangzl
New password:
Password does not meet complexity requirements:
- Minimum 1 uppercase character
- Minimum 1 lowercase character
- Minimum 1 numeric digit
- Minimum 1 special character(!#$%&'()*+,-./:;<=>?@[]^_`{|}~)
- Length between 8 and 12
New password:
Retype new password:
Processing...
Credential updated successfully

注:

  • 此处设置的用户名与密码仅用于 vmrest  API 相关的认证使用,不影响虚拟机本身的使用。

  • 如果你已经设置过用户名与密码,直接跳过此步骤即可。

2、运行 vmrest 服务

直接在命令行执行 vmrest 即可查运行 vmrest 的服务。

如下所示:除了会输出 vmrest 的版本信息以及 VMware 的版权信息,还可以在输出信息中找到当前服务正在监听的地址与端口。如下所示:

$ vmrest   
VMware Fusion REST API
Copyright (C) 2015-2020 VMware Inc.
All Rights Reserved

vmrest 1.2.1 build-17195230
-
Using the VMware Fusion UI while API calls are in progress is not recommended and may yield unexpected results.
-
Serving HTTP on 127.0.0.1:8697
-
Press Ctrl+C to stop.

注:

  • 默认情况下 vmrest 使用 HTTP 协议提供服务

  • 监听的 IP 与端口默认为 127.0.0.1 和 8697

  • 该服务是在前台运行的服务,也就是说我们的 SSH 会话断开服务就是停止,或者按下键盘的 Ctrl+C 也可以停止

3、vmrest 其他常用的参数

(1) vmrest 最常用的参数 -D

-D 或者 --Daemoon 是相同的效果,表示使用守护进程的方式运行 vmrest 服务,如下示例:

$ vmrest -D    
VMware Fusion REST API
Copyright (C) 2015-2020 VMware Inc.
All Rights Reserved

vmrest 1.2.1 build-17195230

注:经测试,使用 -D 并不会在后台运行 vmrest,可以使用 nohup 来后台运行 vmrest,如下示例:

$ nohup vmrest -p 50000 &

(2) 设置监听端口 -p

如下是使用 50000 端口运行 vmrest 服务的使用方式

$ vmrest -p 50000
VMware Fusion REST API
Copyright (C) 2015-2020 VMware Inc.
All Rights Reserved

vmrest 1.2.1 build-17195230
-
Using the VMware Fusion UI while API calls are in progress is not recommended and may yield unexpected results.
-
Serving HTTP on 127.0.0.1:50000
-
Press Ctrl+C to stop.

更多的 vmrest 参数可使用 vmrest --help 查看使用。

4、访问 VMware Fusion API 的 Web GUI

根据运行的信息,使用对应的 ip:port 来访问 VMware Fusion API 的页面,你可以从该页面找到当前 VMware Fusion API 的所有可用的 API 的列表,描述,示例。当然也可以从该页面调用 API。

如下示例,默认运行访问 http://127.0.0.1:8697 即可访问 VMware Fusion API 的 Web GUI 页面。

注:我们可以在该页面查看所有的 API 列表,描述,入参示例,响应示例等等。但不能调用 API,因为需要进行认证,方法请见下文。

5、使用 VMware Fusion API 的 Web GUI 调用 API

(1) 用户认证

点击右上角的 "Authorization" 使用第一次运行 vmrest 时设置的用户名与密码进行认证

点击 "Save",认证成功后再点击右上角的 Authorization 会出现如下弹窗

(2) 使用 VMware Fusion API

如下是以查看当前创建的所有虚拟机的 API 接口的使用为例。

点击 VM Management -> /vms -> "TRY IT OUT!" -> 然后就可以看到返回的本机所有虚拟机的列表信息了。

6、使用 Postman 调用 VMware Fusion REST API

如下是使用 postman 请求 vms 接口的示例,注意的是需要使用 Authorization 下的 Basic Auth 进行认证,认证的用户名与密码与第一次设置的 vmrest 用户名与密码相同。

总结

VMware Fusion REST 可以为某些二次开发或者与其他程序集成提供的方便的可能性,如果有此方面的需求,可查看 VMware 官方文档关于 vmrest 文章,文档地址见附录。

附录

参考 vmware vmrest 官方文档

https://docs.vmware.com/cn/VMware-Fusion/12/com.vmware.fusion.using.doc/GUID-63847178-3425-4D92-A043-EFBC1251C606.html

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注