设为首页 收藏本站
查看: 5356|回复: 0

[经验分享] 使用pysphere操作Vmware vsphere(4)

  [复制链接]

尚未签到

发表于 2015-10-10 07:52:29 | 显示全部楼层 |阅读模式
对于虚拟机的操作
获得虚拟机对象
  当你正常连接了服务器后,你就可以使用以下两种方式来得到虚拟机对象。

  • 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规定的秒时间里没有出现任何一个期盼的状态则发生异常。

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-124835-1-1.html 上篇帖子: VMWare vSphere vCenter 5.1 安装Step by Step(之一) 下篇帖子: 如何在vSphere创建的虚机中安装VMware WorkStation
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表