pysphere VMware控制模块的一些函数的说明

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

  • 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规定的秒时间里没有出现任何一个期盼的状态则发生异常。
posted @ 2018-05-06 20:56  划得戳  阅读(846)  评论(0编辑  收藏  举报