python脚本-整理vsphere虚拟机资源/批量开关机虚拟主机

1.整理vsphere中的虚拟机资源
将每一台虚拟主机所属esxi主机,虚拟机电源状态,虚拟主机ip,虚拟机的操作系统,虚拟所属文件夹,虚拟机的备注一一对应,存放到xlsx表格。
其中vsphere的目录为:
在这里插入图片描述

from pyVim.connect import SmartConnect, Disconnect
from pyVmomi import vim
from openpyxl import Workbook
import ssl

def connect_to_vcenter(host, user, pwd):
    try:
        # Disable SSL certificate verification
        ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS)
        ssl_context.verify_mode = ssl.CERT_NONE

        # Connect to vCenter server
        service_instance = SmartConnect(host=host, user=user, pwd=pwd, sslContext=ssl_context)

        return service_instance
    except Exception as e:
        print(f"Error connecting to vCenter: {str(e)}")
        return None

def disconnect_from_vcenter(service_instance):
    try:
        if service_instance:
            Disconnect(service_instance)
    except Exception as e:
        print(f"Error disconnecting from vCenter: {str(e)}")

def get_vm_info(service_instance):
    vm_info = []
    content = service_instance.RetrieveContent()
    container = content.rootFolder  # Root folder for searching
    viewType = [vim.VirtualMachine]  # Type of object to search for
    recursive = True  # Search recursively
    containerView = content.viewManager.CreateContainerView(container, viewType, recursive)

    for vm in containerView.view:
        vm_object = {
            "虚拟机名": vm.name,
            "所属ESXi主机": vm.runtime.host.name,
            "虚拟机电源状态": vm.runtime.powerState,
            "虚拟机IP": vm.guest.ipAddress,
            "虚拟机操作系统": vm.summary.config.guestFullName,
            "虚拟机所属文件夹": vm.parent.name,
            "虚拟机备注": vm.config.annotation
        }
        vm_info.append(vm_object)

    containerView.Destroy()
    return vm_info

def export_to_excel(vm_info, file_path):
    wb = Workbook()
    ws = wb.active
    ws.append(["虚拟机名", "所属ESXi主机", "虚拟机电源状态", "虚拟机IP", "虚拟机操作系统", "虚拟机所属文件夹", "虚拟机备注"])

    for vm in vm_info:
        ws.append([vm["虚拟机名"], vm["所属ESXi主机"], vm["虚拟机电源状态"], vm["虚拟机IP"], vm["虚拟机操作系统"], vm["虚拟机所属文件夹"], vm["虚拟机备注"]])

    wb.save(file_path)
    print(f"虚拟机信息已导出到 {file_path}")

if __name__ == "__main__":
    vcenter_host = "192.168.x.x"  #也可以是域名。比如:vcsa.test.com.cn
    vcenter_user = "test@vsphere.local"
    vcenter_pwd = "Ttttttt123_"
    output_file = "C:\\Users\\111\\Desktop\\rules\\虚拟机信息.xlsx" #存放路径

    # Connect to vCenter
    service_instance = connect_to_vcenter(vcenter_host, vcenter_user, vcenter_pwd)
    if service_instance:
        # Get VM information
        vm_info = get_vm_info(service_instance)
        # Export to Excel
        export_to_excel(vm_info, output_file)

        # Disconnect from vCenter
        disconnect_from_vcenter(service_instance)
    else:
        print("Failed to connect to vCenter.")

运行后的结果:
在这里插入图片描述

2.批量开关机虚拟主机
当需要批量去开关某个项目的虚拟机时,可以有一定的作用。可以优化的地方,将虚拟机名放到一个文本文件中

# 定义要操作的虚拟机名称列表
vm_names = ["test-99.23", "test-99.20"]

# 连接到 vCenter
# 在 Python 中需要使用适当的库来连接到 vCenter,这里假设使用 pyvmomi 库
from pyVim import connect
from pyVmomi import vim
import ssl

# 忽略 SSL 证书验证错误
ssl._create_default_https_context = ssl._create_unverified_context
# 连接到 vCenter
def connect_to_vcenter(host, user, password):
    try:
        service_instance = connect.SmartConnect(host=host, user=user, pwd=password)
        return service_instance
    except Exception as e:
        print("无法连接到vCenter:", str(e))
        return None

# 主程序
def main():
    vcenter_host = "192.168.x.x" #也可以是一个域名
    vcenter_user = "test@vsphere.local"
    vcenter_password = "test"

    service_instance = connect_to_vcenter(vcenter_host, vcenter_user, vcenter_password)
    if not service_instance:
        return

    # 显示菜单以供用户选择操作
    print("请选择要执行的操作:")
    print("0. 关机")
    print("1. 开机")
    print("2. 重启") 

    # 获取用户选择的操作
    choice = input("请输入选项的编号: ")

    # 根据用户选择执行相应的操作
    if choice in ["0", "1", "2"]:
        # 对每个虚拟机执行相同的操作
        for vm_name in vm_names:
            try:
                vm = None
                container = service_instance.content.rootFolder
                viewType = [vim.VirtualMachine]
                recursive = True
                containerView = service_instance.content.viewManager.CreateContainerView(container, viewType, recursive)
                for managedEntity in containerView.view:
                    if managedEntity.name == vm_name:
                        vm = managedEntity
                        break
                if vm:
                    if choice == "0":
                        if vm.runtime.powerState == vim.VirtualMachinePowerState.poweredOn:
                            vm.PowerOff()
                            print(f"虚拟机 {vm_name} 已关机。")
                        else:
                            print(f"虚拟机 {vm_name} 已经是关机状态。")
                    elif choice == "1":
                        if vm.runtime.powerState == "poweredOff":
                            vm.PowerOn()
                            print(f"虚拟机 {vm_name} 已开机。")
                        else:
                            print(f"虚拟机 {vm_name} 已经是开机状态。")
                    elif choice == "2":
                        vm.Reset()
                        print(f"虚拟机 {vm_name} 已重启。")
                else:
                    print(f"无法找到虚拟机 {vm_name}")
            except Exception as e:
                print(f"无法执行操作 {choice} 对虚拟机 {vm_name}: {str(e)}")
    else:
        print("无效的选项,请重新运行脚本并输入正确的选项编号。")

    # 断开与 vCenter 主机的连接
    connect.Disconnect(service_instance)

if __name__ == "__main__":
    main()


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《A data independent approach to generate adversarial patches》论文分享(侵删)

原文链接:A data independent approach to generate adversarial patches | Machine Vision and Applications author{Xingyu Zhou and Zhisong Pan and Yexin Duan and Jin Zhang and Shuaihui Wang}, 一、介绍 在图像识别领域,与数字域中的攻击相比…

【CTF MISC】XCTF GFSJ0513 pdf Writeup(PDF隐写)

pdf 菜猫给了菜狗一张图,说图下面什么都没有 解法 打开 pdf,只看见一张图片。 用浏览器搜索 flag,发现图片中间藏了一行字。 复制出来,得到 flag。 Flag flag{security_through_obscurity}声明 本博客上发布的所有关于网络攻…

物联网到底物联了个啥?——青创智通

工业物联网解决方案-工业IOT-青创智通 物联网,这个听起来似乎颇具科技感和未来感的词汇,其实早已悄然渗透到我们生活的方方面面。从智能家居到智慧城市,从工业自动化到医疗健康,物联网技术正在以其独特的魅力改变着我们的生活方式…

【深耕 Python】Quantum Computing 量子计算机(5)量子物理概念(二)

写在前面 往期量子计算机博客: 【深耕 Python】Quantum Computing 量子计算机(1)图像绘制基础 【深耕 Python】Quantum Computing 量子计算机(2)绘制电子运动平面波 【深耕 Python】Quantum Computing 量子计算机&…

QT学习(2)——qt的菜单和工具栏

目录 引出qt的菜单栏工具栏菜单栏,工具栏状态栏,浮动窗口 属性设计ui编辑控件添加图片 总结 引出 QT学习(2)——qt的菜单和工具栏 qt的菜单栏工具栏 菜单栏,工具栏 1QMainWindow 1.1菜单栏最多有一个 1.1.1 QMenuBar…

开发利器 - docker 安装运行 mysql

本文选择安装的mysql版本为5.7 ,安装环境 mac 1、查看镜像是否存在 docker search mysql:5.7 2、拉取镜像 docker pull mysql:5.7 3、运行镜像 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot1234 -d mysql:5.7 --name:指定容器…

深入理解Linux下的网络监控工具:iftop

目录标题 1. 什么是iftop?2. 安装iftop在Debian/Ubuntu上安装在CentOS/RHEL上安装在其他Linux发行版上 3. 使用iftop监控网络流量命令行选项界面说明交互命令 4. 相关参数及说明 在维护和监控Linux服务器时,了解网络流量的细节非常重要。网络监控可以帮助我们诊断延…

在 Navicat 17 创建一个数据字典

即将于 5 月 13 日发布的 Navicat 17(英文版)添加了许多令人兴奋的新功能。其中之一就是数据字典工具。它使用一系列 GUI 指导你完成创建专业质量文档的过程,该文档为跨多个服务器平台的数据库中的每个数据元素提供描述。在今天的博客中&…

Python | Leetcode Python题解之第83题删除排序链表中的重复元素

题目: 题解: class Solution:def deleteDuplicates(self, head: ListNode) -> ListNode:if not head:return headcur headwhile cur.next:if cur.val cur.next.val:cur.next cur.next.nextelse:cur cur.nextreturn head

【页面】3D六边形

<!DOCTYPE html> <html> <head><title>3D正六边形</title><style>body {display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}.container {perspective: 1000px;}.hexagon {width: 200px;height: 200px;…

1056: 邻接表到邻接矩阵

解法&#xff1a; #include<iostream> #include<vector> #include<string> using namespace std; int arr[100][100]; int main() {int n;cin >> n;getchar();vector<string> s(n);for (int i 0; i < n; i) {getline(cin, s[i]);}for (int …

LaTeX多行公式中\split出现一长一短多行公式无法居中

最近在整理一篇论文时出现了一长一短多行公式的问题无法居中 类似下图的情况&#xff1a; 这部分的代码如下&#xff1a; \begin{equation} \begin{split} \scalebox{0.75}{$X_{n} C$}\\ \scalebox{0.75}{$X_{m} \biggl\{\begin{array}{ll} \sum\limits_{i1}^{n} [X_{i} …

iOS Failed to create provisioning profile.

错误描述 错误情况参考这张图 解决方案 修改Bundle Identifier就可以解决这个错误&#xff0c;找不到位置可以看图 &#xff08;具体解决的原理与证书有关&#xff0c;个人不是非常熟悉&#xff0c;还望大神告知&#xff09;

Spring Cloud Gateway详解

文章目录 Gateway搭建路由&#xff08;route&#xff09;断言&#xff08;Predicate &#xff09;自定义断言 过滤器&#xff08;filter&#xff09;自定义全局过滤器 引言 在传统的单体项目中&#xff0c;前端和后端的交互相对简单&#xff0c;只需通过一个调用地址即可实现。…

蓝桥杯单片机之模块代码《多样点灯方式》

过往历程 历程1&#xff1a;秒表 历程2&#xff1a;按键显示时钟 历程3&#xff1a;列矩阵按键显示时钟 历程4&#xff1a;行矩阵按键显示时钟 历程5&#xff1a;新DS1302 历程6&#xff1a;小数点精确后两位ds18b20 历程7&#xff1a;35定时器测量频率 历程8&#xff…

JavaFX布局-HBox

JavaFX布局-HBox 常用属性alignmentspacingchildrenmarginpaddinghgrow 实现方式Java实现Xml实现 综合案例 HBox按照水平方向排列其子节点改变窗口大小,不会该部整体布局窗口太小会遮住内部元素&#xff0c;不会产生滚动条 常用属性 alignment 对齐方式 new HBox().setAlign…

SC-Lego-LOAM建图与ndt_localization的实车实现

参考&#xff1a;https://blog.csdn.net/weixin_44303829/article/details/121524380 https://github.com/AbangLZU/SC-LeGO-LOAM.git https://github.com/AbangLZU/ndt_localizer.git 将建图和定位分别使用lego-loam和ndt来进行&#xff0c;实车上的效果非常不错&#xff0c;…

C++语法|智能指针的实现及智能指针的浅拷贝问题、auto_ptr、scoped_ptr、unique_ptr、shared_ptr和weak_ptr详细解读

文章目录 1.自己实现智能指针智能指针引起的浅拷贝问题尝试定义自己的拷贝构造函数解决浅拷贝 2.不带引用计数的智能指针auto_ptrscoped_ptrunique_ptr&#xff08;推荐&#xff09; 3.带引用计数的智能指针模拟实现引用计数shared_ptr和weak_ptr循环引用&#xff08;交叉引用&…

LeetCode---396周赛

题目列表 3136. 有效单词 3137. K 周期字符串需要的最少操作次数 3138. 同位字符串连接的最小长度 3139. 使数组中所有元素相等的最小开销 一、有效单词 按照题目要求&#xff0c;统计个数&#xff0c;看是否符合条件即可&#xff0c;代码如下 class Solution { public:b…

Java - Json字符串转List<LinkedHashMap<String,String>>

需求&#xff1a;在处理数据时&#xff0c;需要将一个Object类型对象集合转为有序的Map类型集合。 一、问题 1.原代码&#xff1a; 但在使用时出现报错&#xff1a; Incompatible equality constraint: LinkedHashMap<String, String> and LinkedHashMap 不兼容的相等…