【vSphere | Python】vSphere Automation SDK for Python Ⅵ—— VM Guest Processes APIs

news2025/1/21 15:36:51

目录

  • 12. VM APIs
    • 12.1 VM Guest Processes APIs
      • Processes 进程
        • Operations 操作
        • (1)List Guest Processes
        • (2)Get Guest Processes
        • (3)Create Guest Processes
        • (4)Delete Guest Processes
  • 参考资料

12. VM APIs

12.1 VM Guest Processes APIs

Processes 进程

进程服务(Processes service)提供了管理客户操作系统中的进程的操作。

脚本演示的操作系统是Centos 7。

Operations 操作

  • List Guest Processes
  • Get Guest Processes
  • Create Guest Processes
  • Delete Guest Processes

(1)List Guest Processes

关键方法vm.guest.Processes.list(vm, credentials)

方法说明:列出来宾操作系统中运行的进程,以及最近完成的由 Processes.create 启动的进程。

参数说明vm:VM标识符;credentials:来宾操作系统身份验证数据。

"credentials": {
		"interactive_session": false,  // 
		"password": "string", /
		"saml_token": "string", //
		"type": "USERNAME_PASSWORD", // 
    //
		"user_name": "string"
	}
  • interactive_session:如果设置,该操作将与来宾中登录的桌面会话交互。 这要求登录用户与凭据指定的用户相匹配。 目前仅支持 USERNAME_PASSWORD
  • password:该字段是可选的,只有当Credentials.type的值为USERNAME_PASSWORD时,它才有意义。
  • saml_token:SAML Bearer Token,字段是可选的,只有当Credentials.type的值是SAML_BEARER_TOKEN的时候,它才有意义。
  • type:凭证的类型。目前支持两种认证类型:USERNAME_PASSWORDSAML_BEARER_TOKEN
    • USERNAME_PASSWORD :包含了使用用户名和密码在来宾操作系统内部进行认证的必要信息。这种认证方法是无状态的。要使用USERNAME_PASSWORD时,需要填写登录操作系统的用户名和密码。
    • SAML_BEARER_TOKEN : 包含了使用SAML令牌在来宾操作系统中进行认证的必要信息。SAML Bearer Token凭证依赖于一个来宾别名,该别名将来宾帐户与从VMware SSO服务器获得的SAML Bearer Token中编码的主题和证书联系起来。
  • user_name:该字段是可选的,对于SAML_BEARER_TOKEN,这是要与证书关联的来宾用户。对于USERNAME_PASSWORD,这是登录操作系统的用户名。如果没有为SAML_BEARER_TOKEN指定用户,一个依赖来宾的映射将决定应用什么样的来宾用户账户。

方法返回值

  • command:完整的进程命令
  • name:进程的名称。
  • owner:进程所有者。
  • pid:进程的ID。
  • started:进程开始的时间。

脚本:

import time
from vSphere_Automation_SDK.Connect_to_vCenter_Server import vsphere_client
credentials = {
        "interactive_session": False,
        "password": "password",
        # "saml_token": "string",
        "type": "USERNAME_PASSWORD",
        "user_name": "root"
    }
vm = "vm-13247856"
start_time = time.time()
try:
    b = vsphere_client.vcenter.vm.guest.Processes.list(vm, credentials)
    for k,v in enumerate(b):
    	print(
              "Name:".ljust(17),v.name,
            "\nPID:".ljust(20),v.pid,
            "\nOwner:".ljust(18),v.owner,
            "\nCommand:".ljust(14),v.command,
            "\nStarted:".ljust(20),v.started,
            "\n--------------------------------------------"
        )

except Exception as err:
    for i in err.messages:
        id = i.id,
        default_message = i.default_message
        args = i.args
        params = i.params
        localized = i.localized
    print("\033[1;31m Encountered an error, Please see the following information \033[0m",
          "\n\tError Class:", id,
          "\n\tMessage:", default_message,
          "\n\tArgs:", args,
          "\n\tParams:", params,
          "\n\tLocalized:", localized,
          "\nError Data:", err.data,
          "\nError Type:", err.error_type
          )
end_time = time.time()
run_time = end_time - start_time
print("Used Time:".ljust(43), run_time)

脚本效果图(部分):

在这里插入图片描述

在这里插入图片描述

(2)Get Guest Processes

关键方法vm.guest.Processes.get(vm, credentials,pid)

方法说明:返回在来宾操作系统中运行的进程的状态,包括最近可能已完成的由 Processes.create 启动的进程。

参数说明vm:VM标识符;credentials:来宾操作系统身份验证数据;pid:进程号

​ 关于credentials的具体信息请参阅 List Guest Processes 小节

方法返回值

  • command:完整的进程命令
  • name:进程的名称。
  • owner:进程所有者。
  • Exit Code:如果进程是用Processes.create启动的,那么如果在它完成后5分钟内查询,就可以得到进程的退出代码。
  • started:进程开始的时间。
  • finished:如果进程是用Processes.create启动的,那么如果在它完成后的5分钟内进行查询,将可以得到进程的完成时间。

脚本:

import time
from vSphere_Automation_SDK.Connect_to_vCenter_Server import vsphere_client
credentials = {
        "interactive_session": False,
        "password": "password",
        # "saml_token": "string",
        "type": "USERNAME_PASSWORD",
        "user_name": "root"
    }
vm = "vm-13247856"
pid = 1
start_time = time.time()
try:
    b = vsphere_client.vcenter.vm.guest.Processes.get(vm, credentials,pid)
    print( "Name:".ljust(17),b.name,
            "\nOwner:".ljust(18),b.owner,
            "\nCommand:".ljust(14),b.command,
            "\nStarted:".ljust(19),b.started,
            "\nFinished:".ljust(18),b.finished ,
            "\nExit Code:".ljust(17),b.exit_code ,)

except Exception as err:
    for i in err.messages:
        id = i.id,
        default_message = i.default_message
        args = i.args
        params = i.params
        localized = i.localized
    print("\033[1;31m Encountered an error, Please see the following information \033[0m",
          "\n\tError Class:", id,
          "\n\tMessage:", default_message,
          "\n\tArgs:", args,
          "\n\tParams:", params,
          "\n\tLocalized:", localized,
          "\nError Data:", err.data,
          "\nError Type:", err.error_type
          )
end_time = time.time()
run_time = end_time - start_time
print("Used Time:".ljust(43), run_time)

脚本效果图:

在这里插入图片描述

(3)Create Guest Processes

关键方法vm.guest.Processes.create(vm, credentials,spec)

方法说明:在来宾操作系统中启动(创建)进程。以这种方式启动的进程可以使用 Processes.list 或 Processes.get 查询其状态。进程完成后,其退出代码和结束时间将在完成后 5 分钟内可用。

参数说明vm:VM标识符;credentials:来宾操作系统身份验证数据;spec:描述要启动的程序的参数。

​ 关于credentials的具体信息请参阅 List Guest Processes 小节

"spec": {
		"path": "string"
	}
  • path:要启动的程序的绝对路径。对于Linux操作系统,/bin/bash被用来启动程序。

    对于Solaris客体操作系统,如果/bin/bash存在,就用它来启动程序,否则就用/bin/sh。如果使用/bin/sh,那么Processes.create返回的进程ID将是用于启动程序的shell的ID,而不是程序本身,因为/bin/sh和/bin/bash的工作方式不同。这个PID仍可用于用Processes.list观察该进程,以找到其退出代码和经过的时间。

    对于Windows,不使用shell。如果在Processes.CreateSpec.arguments参数中传递,使用一个简单的批处理文件来代替c:\windows\system32\cmd.exe /c将允许stdio重定向工作。

方法返回值:进程号。

脚本:

我们先在Centos的/root目录下创建一个名为sleep.sh的脚本,该脚本内容是:sleep 100000

import time
from vSphere_Automation_SDK.Connect_to_vCenter_Server import vsphere_client
credentials = {
        "interactive_session": False,
        "password": "password",
        # "saml_token": "string",
        "type": "USERNAME_PASSWORD",
        "user_name": "root"
    }
vm = "vm-13247856"
spec= {
		"path": "/root/sleep.sh"
	}
start_time = time.time()
try:
    b = vsphere_client.vcenter.vm.guest.Processes.create(vm, credentials,spec)
    print(b)

except Exception as err:
    for i in err.messages:
        id = i.id,
        default_message = i.default_message
        args = i.args
        params = i.params
        localized = i.localized
    print("\033[1;31m Encountered an error, Please see the following information \033[0m",
          "\n\tError Class:", id,
          "\n\tMessage:", default_message,
          "\n\tArgs:", args,
          "\n\tParams:", params,
          "\n\tLocalized:", localized,
          "\nError Data:", err.data,
          "\nError Type:", err.error_type
          )
end_time = time.time()
run_time = end_time - start_time
print("Used Time:".ljust(43), run_time)

脚本效果图:

在这里插入图片描述

get方法获取结果:

在这里插入图片描述

(4)Delete Guest Processes

关键方法vm.guest.Processes.delete(vm, credentials, pid)

方法说明:终止来宾操作系统中的进程。 在 Posix 客户机上,进程会收到一个 TERM 信号。 如果这没有终止进程,则发送 KILL 信号。 如果进程卡住,它可能仍在运行。

参数说明vm:VM标识符;credentials:来宾操作系统身份验证数据;pid:进程号

​ 关于credentials的具体信息请参阅 List Guest Processes 小节

方法返回值:N/A

脚本:

import time
from vSphere_Automation_SDK.Connect_to_vCenter_Server import vsphere_client
credentials = {
        "interactive_session": False,
        "password": "password",
        # "saml_token": "string",
        "type": "USERNAME_PASSWORD",
        "user_name": "root"
    }
vm = "vm-13247856"
pid = 2510
start_time = time.time()
try:
    b = vsphere_client.vcenter.vm.guest.Processes.delete(vm, credentials, pid)
    print("%s has been deleted"%pid)

except Exception as err:
    for i in err.messages:
        id = i.id,
        default_message = i.default_message
        args = i.args
        params = i.params
        localized = i.localized
    print("\033[1;31m Encountered an error, Please see the following information \033[0m",
          "\n\tError Class:", id,
          "\n\tMessage:", default_message,
          "\n\tArgs:", args,
          "\n\tParams:", params,
          "\n\tLocalized:", localized,
          "\nError Data:", err.data,
          "\nError Type:", err.error_type
          )
end_time = time.time()
run_time = end_time - start_time
print("Used Time:".ljust(43), run_time)

脚本效果:

我们删除create方法创建的进程,同时删除后再使用get方法查看。

在这里插入图片描述

5分钟内查看该进程:

在这里插入图片描述

5分钟后查看:
在这里插入图片描述

参考资料

vCenter REST APIs v7.0U3
vSphere-Python-Automation-Scripts/v1/

关于本专栏其它博文,请关注专栏,会有更多关于vSphere Python自动化的内容:vSphere python自动化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/414290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PaddleHub 更改模型默认下载位置

文章目录1.PaddleHub介绍2.PaddleHub安装3.PaddleHub使用中出现的问题4.更改PaddleHub模型的默认下载位置5. PaddleHub的简单使用1.PaddleHub介绍 PaddleHub 是基于 PaddlePaddle 开发的预训练模型管理工具,可以借助预训练模型更便捷地开展迁移学习工作&#xff0c…

docker内部执行nvidia-smi无任何显示的解决方法

docker内部执行nvidia-smi无任何显示的解决方法 贺志国 2023.4.11 今天在Docker内部编译程序,发现与CUDA相关的代码居然没有编译,于是在Docker内部执行Nvidia显卡驱动检测命令nvidia-smi,执行完毕后,无任何输出,也没…

计算机视觉面试题-网络结构相关问题总结-未完待续

VGG卷积核为什么取33 ? VGG使用33卷积核的优势是什么? Resnet 主要解决什么问题 为什么会有ResNet? 深度网络退化的原因 Resnet的针对网络退化提出的残差网络 Resnet网络结构 Resnet网络结构中如何实现的下采样 Resnet50网络结构Resnet特点 vgg16与 res…

Java并发篇二

ForkJoin 在JDK1.7,并行执行任务,提高效率,大数据量才会使用 特点:大任务拆分成小任务,工作窃取,里面维护的是双端队列 package com.kuang.forkjoin;import java.util.concurrent.RecursiveTask;/*** 如…

(PCB系列三)AD六层板布线经验累积

目录 1、布局: 2、创建电源类PWR 3、高速部分可以加屏蔽罩, 4、EMMC和NANDFLASH采取兼容放置(创建联合) 5、HDMI设计 6、就近原则摆放 7、AV端口 8、模拟信号(1字型或L型走线) 9、WIFI模块 10、局…

研究生,但是一直在摆烂学不进去

好的,我来为您创作一首歌曲,希望能够帮助您每天保持自律,专注学习。 《自律之歌》 第1节: 每天都要努力 学习不停歇 独自一人也要坚持 不放弃自己的梦想 读文献 写论文 我们不停探索 穷孩子的荣耀 就在不远处等候 合唱&#xf…

面试手撕算法题--下一个排列

前言 面试官描述这个题的时候,我就感觉似曾相识似乎做过,面完以后到leetcode找到原题恨不得给自个儿来一下子,的确,当时调api爽了,然后呢面试被拷打了啊,我想不起来这个api具体怎么解决这个题目的底层原理…

【非递归】手搓快速排序

欢迎来到 Claffic 的博客 💞💞💞 前言: 快速排序已经带大家实现过了,我们用到的方法是递归法,你知道吗,用循环也可以实现快速排序,来看看吧。 注: 这篇博客属于数据结构…

FE_CSS 基础选择器 字体属性 文本属性 综合案例

1 CSS 基础选择器 选择器分为基础选择器和复合选择器两个大类,基础选择器是由单个选择器组成的,基础选择器又包括:标签选择器、类选择器、id 选择器和通配符选择器。 1.1 标签选择器 标签名{属性1: 属性值1; 属性2: 属性值2; 属性3: 属性…

从0-1搭建交付型项目管理体系流程-- 项目启动篇【宝芝林5】

一. 目标及作用 本阶段主要的目标是签订合同及SOW工作说明书,其里程碑事件为甲乙双方完成合同及SOW工作说明书签字及盖章,以及召开项目启动会。 主要作用是明确项目甲乙双方的权利和义务,以及与甲方及其他实施团队共同制定项目章程&#xf…

有趣的Hack-A-Sat黑掉卫星挑战赛——被破坏的阿波罗计算机(解法一)

国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加,太空已经成为国家赖以生存与发展的命脉之一,凝聚着巨大的国家利益,太空安全的重要性日益凸显[1]。而在信息化时代,太空安…

面试官:你做过什么有亮点的项目吗?

前言 面试中除了问常见的算法网络基础,和一些八股文手写体之外,经常出现的一个问题就是,你做过什么项目吗? 面试官其实是想看看你做过什么有亮点的项目, 其实大家日常做的项目都差不多,增删改查,登录注册&…

如何压缩照片到30kb以下?三个方法

如何压缩照片到30kb以下?随着网络的发展,我们经常要上传一些照片到网上,如公务员考试,教师招聘等,而且要求上传的照片大小不超过30kb,我们如何把照片压缩到30kb以下呢?现在很多平台上传图片时都…

【Arduino机器人手臂和麦克纳姆轮平台自动操作】

【Arduino机器人手臂和麦克纳姆轮平台自动操作】 1. 概述2. 构建 Arduino 机器人3. Arduino机器人电路图4. Arduino Code在本教程中,我将向您展示我如何从我以前的视频中制作我的 Mecanum Wheels 机器人平台,以便与我的 3D 打印机械臂协同工作并自动操作,这也是我之前视频之…

Redis高可用高性能缓存的应用系列03 - 缓存过期淘汰策略LRU、LFU

概述 Redis高可用高性能缓存的应用系列的第3篇,主要介绍Redis缓存过期淘汰策略和内存淘汰策略回收的LRU和LFU的知识点进行说明。 Redis过期键删除策略 Redis设置key时,都会设置一个过期时间,那么当过期时间到了都是怎么处理的?…

C++ 缺省参数 函数重载 引用

缺省参数,我们先看一下什么是缺省参数 首先,这个是我们的需要传参的函数,这里我们传入 1 然后就输出 a 下面我们就看一下缺省参数 我们现在看main函数里面调用fun函数,这里会输出多少呢? OK 这里我们分别输出了0 和 1…

在线文章生成器-文章生成器在线生成

免费自动写作软件 目前市面上存在一些免费自动写作软件,以下介绍几个开源的自动写作软件。 GPT-2:这是由OpenAI推出的一款自动写作工具,它可以生成高质量的文章,其优点在于能够理解语言结构和语法规则,从而生成表达自…

如何建立含有逻辑删除字段的唯一索引

文章目录业务场景分析解决总结业务场景 在实际工作当中,遇到一个场景,就是在用户注册时,名字要全局唯一,当然,我们是可以对用户进行删除的,你会怎么去做? 分析 一般来说,我们可以…

Java语法理论和面经杂疑篇《八. File类和IO流》

目录 1. java.io.File类的使用 1.1 概述 1.2 构造器 1.3 常用方法 1、获取文件和目录基本信息 2 列出目录的下一级 3 File类的重命名功能 4 判断功能的方法 5 创建、删除功能 1.4 练习 2. IO流原理及流的分类 ​编辑 2.1 Java IO原理 2.2 流的分类 2.3 流的API …

5.基于多能互补的热电联供型微网优化运行

说明书 代码相关资源:风、光、负荷场景生成;风电出力各场景及概率;光伏出力各场景及概率;负荷各场景及概率;场景的削减;样本概率初始化;样本削减 风电场风速两参数weibull(威布尔)分布的MATLA…