zoukankan      html  css  js  c++  java
  • 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:windowssystem32之类。
    • 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规定的秒时间里没有出现任何一个期盼的状态则发生异常。
  • 相关阅读:
    java 异常捕获机制
    读取java当前路径的文件输出在控制台
    java 简易记事本 程序
    java 利用文件输入输出流实现文件复制
    IutputStreamWriterDemo
    OutputStreamWriterDemo
    Longest Substring Without Repeat Characters
    Add Two Numbers
    Two Sum
    使用 Canvas 绘图
  • 原文地址:https://www.cnblogs.com/kuku0223/p/8999605.html
Copyright © 2011-2022 走看看