对于虚拟机的操作
获得虚拟机对象
  当你正常连接了服务器后,你就可以使用以下两种方式来得到虚拟机对象。

  • get_vm_by_path
  • get_vm_by_name

  虚拟机路径可以从虚拟机右键信息中的”Edit settings…”的Options标签页中的”Virtual Machine Configuration File”得到。

!注意
  建议使用虚拟机路径来的到虚拟机对象,对于一个虚拟机来说,路径是唯一的,而名字有可能重复,当然我们后面会说如何利用限定条件参数来减少重复,但一旦出现重复结果,该函数只返回找到的第一个结果。

>from pysphere import VIServer
>server = VIServer()
>server.connect("192.168.100.100", "administrator@vsphere.local
", "vmware")
>vm1 = server.get_vm_by_path("[DataStore1] Ubantu/Ubantu-10.vmx")
>vm2 = server.get_vm_by_name("Windows XP Professional")
  附加限定条件的使用方法

>vm1 = server.get_vm_by_path("[DataStore1] Ubuntu/Ubuntu-10.vmx", "DEVELOPMENT")
>vm2 = server.get_vm_by_name("Windows XP Professional", "IT")
  其中的限定条件为datacenter
获得虚拟机状态

>print vm1.get_status()
  返回结果为字符串类型 
* ‘POWERED ON’ 
* ‘POWERED OFF’ 
* ‘SUSPENDED’ 
* ‘POWERING ON’ 
* ‘POWERING OFF’ 
* ‘SUSPENDING’ 
* ‘RESETTING’ 
* ‘BLOCKED ON MSG’ 
* ‘REVERTING TO SNAPSHOT’
  前三个为基础状态,一般情况下虚拟机都会处于这三个状态下。

“VMware Server/ESX/ESXi”等服务器由于不支持查询历史动作,他们只会返回基础状态。

你也可以使用参数来限定只返回基础状态

>print vm1.get_status(basic_status=True)
  你也可以通过方法查询虚拟机是否处于某种状态

>print vm1.is_powering_off()
>print vm1.is_powered_off()
>print vm1.is_powering_on()
>print vm1.is_powered_on()
>print vm1.is_suspending()
>print vm1.is_suspended()
>print vm1.is_resetting()
>print vm1.is_blocked_on_msg()
>print vm1.is_reverting()
获得虚拟机基础属性

  • get_properties
  • get_property(property_name)

  get_properties返回一个python字典类型数据,包含查询时刻的所有可用属性。

get_property返回一个指定属性的值,如果该属性不存在,则返回None

>vm1.get_properties()
{'guest_id': 'ubuntuGuest',
'path': '[DataStore1] Ubuntu/Ubuntu-10.vmx',
'guest_full_name': 'Ubuntu Linux (32-bit)',
'name': 'Ubuntu 10.10 Desktop 2200',
'mac_address': '00:50:56:aa:01:a7'
}

>print vm1.get_property('mac_address') 
'00:50:56:aa:01:a7'
  由于某些原因,pysphere在创建虚拟机实例时,所有属性值都被缓存起来,每次请求属性时也会更新缓存,而这些属性都是时时变化的,如果需要确实得到最新的属性值,需要加入from_cache=False参数

>print vm1.get_property('ip_address', from_cache=False)
>print vm1.get_properties(from_cache=False)
  没个虚拟机实例包含下面这些属性 
* name 
* path 
* guest_id 
* guest_full_name 
* hostname 
* ip_address 
* mac_address 
* net
获得资源池名称
  执行下面语句来得到虚拟机的资源池名称

>print vm1.get_resource_pool_name() 
Linux VMs
改变虚拟机电源状态
  执行下面语句来操作虚拟机电源

>vm1.power_on()
>vm1.reset()
>vm1.suspend() #since pysphere 0.1.5
>vm1.power_off()
  默认情况,以上语句会同步执行,也就是说这个方法一直等到虚拟机动作完才会退出。

如果需要异步执行,需要加入sync_run=False参数。在异步下,方法会返回一个task对象,用来查询执行进度和结果。

关于task对象的使用,稍后讲解。

>task1 = vm1.power_on(sync_run=False)
>task2 = vm2.reset(sync_run=False)
>task3 = vm2.suspend(sync_run=False) #since pysphere 0.1.5
>task4 = vm3.power_off(sync_run=False)
  另外还有一个host参数,没搞明白有什么利用价值,请了解的朋友们留言。

>vm1.power_on(host="esx3.example.com")
操作快照
  快照有三种操作:恢复,创建,删除。
  1)我们先来看看恢复。

有三个方法可以将一台虚拟机恢复到某个快照。

  • revert_to_snapshot:恢复到最新的快照
  • revert_to_named_snapshot:恢复到能与给定的名字第一个匹配的快照。规则不明,需要试验。
  • revert_to_path:恢复到指定的路径或索引标示的快照。index参数用于指定同一个路径的快照的第几次更新,默认为0。使用方法为:vm1.revert_to_path(“/base/updated”, index=1)

  和虚拟机电源控制类似,操作快照也是默认同步执行的。如果需要异步执行,需按照下面方法执行。

>task1 = vm1.revert_to_snapshot(sync_run=False)
>task2 = vm2.revert_to_named_snapshot("base", sync_run=False)
>task3 = vm3.revert_to_path("/base/updated", sync_run=False)
  另外也有一个host参数,依然不明白,搞明白后更新

>vm1.revert_to_snapshot(host="esx1.example.com")
>vm1.revert_to_named_snapshot(host="esx2.example.com")
>vm1.revert_to_path(host="esx3.example.com")
  2)再来看看删除快照
  与恢复相似,删除也有三个方法

  • delete_current_snapshot
  • delete_named_snapshot(name)
  • delete_snapshot_by_path(path, index=0)

  与恢复不同的是,删除有一个特有的remove_children的参数,但这个参数设置为True时,指定的快照的所有子快照都会被删除
  3)创建快照
  下面的语句用于创建现在时刻的快照

>vm1.create_snapshot("mysnapshot")
  如果需要对这个快照有一个描述,用description参数来实现

>vm1.create_snapshot("mysnapshot", description="With SP2 installed")
  创建快照同样也可以使用sync_run参数来异步执行。
  在pysphere 0.1.6以上版本,加入了两个特有的参数

  • memory:默认为True,包含内存完全快照,如果没成功,快照会被设置为关机状态。
  • quiesce:默认为True,按照磁盘静默方式创建快照,可以保证快照被创建的时刻,虚拟机和快照完全一致。如果是关机状态创建快照,或VMware tools没被安装,则这个忽略这个参数。

  4)取得快照列表

>snapshot_list = vm2.get_snapshots()
  这样就得到了一个快照列表,其中的每一个快照实例可以使用下面方法来取得属性值。

  • get_name: 返回快照名称
  • get_description: 返回快照描述
  • get_create_time: 返回快照创建时间
  • get_parent: 返回该快照的父快照,是一个快照实例。如果是根快照,则返回None。
  • get_children: 返回该快照的子快照,是一个快照列表。
  • get_path: 返回该快照的父子关系,使用’/’分割。
  • get_state: 返回这个快照恢复时虚拟机的电源状态。

操作虚拟机内在系统
  1)电源管理

使用下面命令来使虚拟机关闭,重启,睡眠

>vm1.shutdown_guest()
>vm1.reboot_guest()
>vm1.standby_guest()
  2)登录系统

>vm1.login_in_guest("os_username", "os_password")
  任何除电源管理以外的操作都需要事先登录系统,这项操作需要vSphere 5.0以上,并且虚拟机必须安装vmware tools。
  这项操作没有返回值,没有异常信息就是成功了。
  3)文件和目录操作

  • make_directory(path, create_parents=True): 根据path参数在虚拟机中建立一个目录, 默认建立所有不存在的父目录。如果create_parents参数设置为False则不自动创建父目录,不存在父目录是发生异常。
  • move_directory(src_path, dst_path): 将目录从src_path移动到dst_path,一般也用于目录重命名。如果目标目录存在则发生异常。
  • delete_directory(path, recursive): 删除path指向的目录。recursive是必须指定的,True所有子目录和文件也一同删除,相反False时如果存在子目录或文件则发生异常。
  • list_files(path, match_pattern=None): 返回参数path所指定的目录下所有文件和目录的列表,包括隐藏的,只显示一层,不显示子层。 match_pattern参数是一个perl-compatible正则表达式,利用这个参数我们可以过滤得到的结果。这个方法的返回值是一个字典列表,其中每一个字典元素包含下面三种属性。
    • path: 这个文件的全路径
    • size: 文件大小
    • type: 文件类型directory, file, symlink之一
  • get_file(guest_path, local_path, overwrite=False): 从虚拟机中的guest_path得到一个文件,保存到本机的local_path。
  • send_file(local_path, guest_path, overwrite=False): 从本机的local_path发送一个文件到虚拟机的guest_path。
  • move_file(src_path, dst_path, overwrite=False): 将文件从src_path移动到dst_path,一般也用于目录重命名。如果overwrite 被设置为False(默认为False)并且dst_path存在,则异常。如果设置为True,则所有存在的文件将都被覆盖,如果dst_path是个目录则异常。
  • delete_file(path): 删除path所指向的文件。

  4)进程操作和环境变量

  • start_process(program_path, args=None, env=None, cwd=None): 在虚拟机中开启一个程序,并返回PID。参数program_path是程序的绝对地址,如果在系统环境变量path中有该程序,可以直接填写程序名。程序参数:

    • args: 程序的参数列表,字符串列表型。
    • env: 程序的环境变量列表,字典列表型。
    • cwd: 程序的工作目录。为一个绝对路径。如果不设置,则默认使用系统登录后的默认路径。比如linux为/home/loginuser,windows为c:\windows\system32之类。
  • terminate_process(pid): 杀掉pid所代表的进程。
  • list_processes()*: 罗列系统正在运行的所有进程,包含最近使用start_process创建的已完成的进程。返回结果为字典列表,每一个字典型对象包含以下属性: 

    • start_time: 进程的创建时间。
    • end_time: 进程的结束时间。特指使用start_process创建的进程并且已结束不足5分钟,否则返回None。
    • pid: 进程的PID。
    • name: 进程名。
    • cmd_line: 完整的命令行内容,包含命令和参数等。
    • owner: 进程所属用户。
    • exit_code: 进程返回值。特指使用start_process创建的进程并且已结束不足5分钟,否则返回None。
  • get_environment_variables(): 读取所有的系统环境变量。返回值为字典列表。

克隆虚拟机
  pysphere 0.1.6开始提供这项功能。

>new_vm = vm1.clone("Clone Name")
  该方法返回一个虚拟机实例。除必须指定的新虚拟机名外,还有下面几个参数可以设置:

  • sync_run:是否同步执行,默认值为True。同步时返回虚拟机实例,异步时返回taskid。
  • folder:新虚拟机的目标目录。如果没设置,默认放在源虚拟机同一目录中。
  • resourcepool:新虚拟机使用的MOR,如果没设置,默认使用源虚拟机同样的资源池。(还没闹明白MOR,后补)
  • power_on:新虚拟机创建后是否开机,默认为True。
  • template:是否把新虚拟机作为模板,默认为False。

!注意
  如果将新虚拟机作为模板,则resourcepool参数不起作用。相反,如果源虚拟机是一个模板,则必须指定resourcepool参数。

迁移虚拟机

>vm1.migrate()

  • sync_run:同步执行
  • priority:优先级,可选项为default,high,low。
  • resource_pool</em>:目标资源池
  • host:目标主机
  • state:执行迁移的电源状态,当且仅当虚拟机处于指定状态是,才执行迁移。可选项为POWERED ON,POWERED OFF,SUSPENDED。

处理异步作业
  上面提到了很多可以指定sync_run=False参数的方法来进行异步执行。

异步执行时,方法会返回一个VITask的实例,它包含以下方法:

    • get_state:返回现在时刻这个作业的状态。状态如下:

      • "error": 作业异常退出。
      • "queued": 作业在队列中,未执行。
      • "running": 作业正在执行。
      • "success": 作业正常执行完了。
    • get_error_message:作业异常退出的错误描述。
    • wait_for_state(['error','success','running'], timeout=10): 该方法等待作业出现给定的状态列表里面的某一个状态。当等到,返回这个状态。如果在timeout规定的秒时间里没有出现任何一个期盼的状态则发生异常。

pysphere VMware控制模块的一些函数的说明的更多相关文章

  1. AAC解码算法原理详解

  2. thinkphp 的两种建构模式 第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用。第二种架构模式两个单入口文件,分别生成两个应用定义define。。。函数可以定义配置文件。。。。

    thinkphp 的两种建构模式  第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用. ...

  3. 云与备份之(1):VMware虚机备份和恢复

    本系列文章会介绍云与备份之间的关系,包括: (1)VMware 虚机备份和恢复 (2)KVM 虚机备份和恢复 (3)云与备份 (4)OpenStack 与备份 (5)公有云与备份 1. 与备份有关的V ...

  4. VMware Workstation 10+Centos7(64位)共享文件夹

    这一两天一直在研究VMware Workstation自带的共享文件夹的功能,期间出了不少问题,在公司搭建的是vm10.0+centos07,在家搭建的是VM 7+centos07... 公司环境搭建 ...

  5. Ubuntu 编译安装 Linux 4.0.5 内核,并修复 vmware 网络内核模块编译错误

    . . . . . 今天把 Ubuntu 14.04 升级到了最新的 4.0.5 的内核版本,本来不打算记录下来的,但是升级的过程中确实遇到了一些问题,所以还是记录下来,分享给遇到同样问题的猿友. 先 ...

  6. 从零开始学C++之虚函数与多态(二):纯虚函数、抽象类、虚析构函数

    一.纯虚函数 虚函数是实现多态性的前提 需要在基类中定义共同的接口 接口要定义为虚函数 如果基类的接口没办法实现怎么办? 如形状类Shape 解决方法 将这些接口定义为纯虚函数 在基类中不能给出有意义 ...

  7. Zabbix实战-简易教程(9)--触发器函数(triggers)

    Zabbix触发器函数学习 本文主要讲述zabbix触发器函数. 1.abschange 参数:缺省 值类型:float, int, str, text, log 返回值解析: Returns abs ...

  8. xp+WinDBG+VMware调试内核

    呵呵,搞点突兀的标题而已.其实说的还是如何使用WinDBG和VMware来搭建调试内核的环境而已,这些网上已经有数不清的教程了,不过我喜欢自己亲手写一下.第一,把这个过程写一遍能加深印象,就算以后忘记 ...

  9. 【Spark-SQL学习之三】 UDF、UDAF、开窗函数

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

随机推荐

  1. .NetCore实践爬虫系统(一)解析网页内容

    爬虫系统的意义 爬虫的意义在于采集大批量数据,然后基于此进行加工/分析,做更有意义的事情.谷歌,百度,今日头条,天眼查都离不开爬虫. 今日目标 今天我们来实践一个最简单的爬虫系统.根据Url来识别网页 ...

  2. make太慢了,加快编译速度的方法 make -j

    make -j 既然IO不是瓶颈,那CPU就应该是一个影响编译速度的重要因素了. 用make -j带一个参数,可以把项目在进行并行编译,比如在一台双核的机器上,完全可以用make -j4,让make最 ...

  3. Meterpreter常⻅见⽤用法

    0x01 背景 meterpreter作为后渗透模块有多种类型,并且命令由核⼼心命令和扩展库命令组成,极⼤大的丰富了了攻击⽅方式. 需要说明的是meterpreter在漏漏洞洞利利⽤用成功后会发送第二 ...

  4. Dedekind整环上的有限生成模的分类

    以下内容本想载于我的代数数论初步当中,但是与整体风格不符,所以换到这里来,为了排版上的方便,在注释掉之前用截图留存. 附:参考文献

  5. Python-Urllib库详解

    官方文档地址:https://docs.python.org/3/library/urllib.html 什么是Urllib: Urllib是python内置的HTTP请求库: urllib.requ ...

  6. CSS颜色代码 颜色值 颜色名字大全

    颜色值 CSS 颜色使用组合了红绿蓝颜色值 (RGB) 的十六进制 (hex) 表示法进行定义.对光源进行设置的最低值可以是 0(十六进制 00).最高值是 255(十六进制 FF).从 0 到 25 ...

  7. 学习yii2.0——行为

    学习yii框架的行为之前,需要先了解yii的事件,可以参考这篇博客: 怎么理解行为 yii框架的行为有点类似于trait,可以有个大体的概念: 1.有一个类A,包含一些属性和方法,很普通的一个类A. ...

  8. 在tomcat8.0.x和tomcat9.0.x之间么突然冒出个tomcat 8.5

    Apache Tomcat 8 (8.5.38) - Documentation Indexhttps://tomcat.apache.org/tomcat-8.5-doc/index.html to ...

  9. C#的修饰符

    C#的修饰符 废话少说,直接上总结: 一.在命名空间下: 类:默认修饰符为internal 接口:默认的修饰符为internal 结构体:默认的修饰符为internal 枚举:默认的修饰符为inter ...

  10. spring核心思想:IOC(控制反转)和DI(依赖注入)

    Spring有三大核心思想,分别是控制反转(IOC,Inversion Of Controller),依赖注入(DI,Dependency Injection)和面向切面编程(AOP,Aspect O ...