使用python管理vsphere平台之创建和克隆虚拟机

  • Post author:
  • Post category:python


使用python管理vsphere平台

新到一个公司,需要做一个系统来管理现有的vsphere平台,以此实现对虚拟机的自动化管理。

vsphere平台是vmware公司推出的虚拟化云管理平台(vmware主要靠这类产品赚钱),可以动态增加主机节点,主机上运行esxi专属系统,

所有的主机节点由vcenter管理,本人用的这段时间内基本没因为vmware的原因出现过问题,是中小企业作为底层架构的必备之选。

简单介绍下各组件

exsi: 物理主机节点,虚拟机就是在这上面运行的。

vcenter: 管理所有节点,管理中心。

vmotion:存储设备,成为云平台的就看有没有他了(贵)

datacenter: 数据中心,根据自己情况自定义,就是一群节点的分组

datastore:存储,每个节点的硬盘

network: 自定义跟物理网络对接

主要从创建,克隆,查询,修改配置,监控几个方面简单的介绍。

本篇主要介绍创建和克隆,之所以一起介绍,主要是因为这边创建的方式是从模板创建,实则跟克隆有异曲同工之处。

环境    centos7,python3.5,pyvmomi==6.7.1.2018.12

点击(

此处

)折叠或打开



  1. import

    atexit


  2. from

    pyVmomi

    import

    vim

    ,

    vmodl

  3. from

    pyVim

    .

    connect

    import

    SmartConnectNoSSL

    ,

    Disconnect
  4. #登录和初始化,

    默认使用无证书方式登录
  5. si

    =

    SmartConnectNoSSL

    (

    host

    =

    host

    ,

    user

    =

    user

    ,

    pwd

    =

    pwd

    ,

    port

    =

    port

    )

  6. atexit

    .

    register

    (

    Disconnect

    ,

    si

    )

  7. content

    =

    si

    .

    RetrieveContent

    (


    )

  8. vchtime

    =

    si

    .

    CurrentTime

    (


    )

先定义一个搜索函数,可以根据名字搜索各种类型的资源,非常使用,里面的变量都是上面初始化后继承的。

点击(

此处

)折叠或打开



  1. def

    get_obj

    (

    vimtype

    ,

    name

    )


    :


  2. obj

    =

    None
  3. container

    =

    self

    .

    content

    .

    viewManager

    .

    CreateContainerView

    (

  4. content

    .

    rootFolder

    ,

    vimtype

    ,

    True

    )


  5. for

    c

    in

    container

    .

    view

    :


  6. if

    c

    .

    name

    =


    =

    name

    :

  7. obj

    =

    c

  8. break


  9. return

    obj

开始从模板部署虚拟机

点击(

此处

)折叠或打开




  1. def  clone_vm(*args,**kwargs):

  2. #获取模板的对象,使用了上面的搜索函数

  3. template

    =

    self

    .

    get_obj

    (


    [

    vim

    .

    VirtualMachine

    ]


    ,

    kwargs

    .

    get

    (


    “template”


    )


    )




  4. #定义虚拟机需要安装的节点主机位置,资源池没有定义每个主机默认为一个资源池,名字可以自行修改


  5. resource_pool

    =

    self

    .

    get_obj

    (


    [

    vim

    .

    ResourcePool

    ]


    ,

    kwargs

    .

    get

    (


    “resource_pool”


    )


    )

  6. #定义需要安装的存储名字

  7. if


    kwargs


    .


    get


    (


    ‘datastore_name’


    ,


    None


    )


    :
  8. datastore

    =

    self

    .

    get_obj

    (


    [

    vim

    .

    Datastore

    ]


    ,

    kwargs

    .

    get

    (


    ‘datastore_name’


    )


    )


  9. else


    :

  10. datastore

    =

    self

    .

    get_obj

    (


    [

    vim

    .

    Datastore

    ]


    ,

    kwargs

    .

    get

    (


    “template”


    )


    .

    datastore

    [

    0

    ]


    .

    info

    .

    name

    )

  11. relospec

    =

    vim

    .

    vm

    .

    RelocateSpec

    (


    )

  12. relospec

    .

    datastore

    =

    datastore
  13. relospec

    .

    pool

    =

    resource_pool
  14. clonespec

    =

    vim

    .

    vm

    .

    CloneSpec

    (


    )

  15. clonespec

    .

    location

    =

    relospec
  16. #定义克隆完成后是否需要开机
  17. clonespec

    .

    powerOn

    =

    kwargs

    .

    get

    (


    “PowerOn”


    )


  18. print


    (


    “cloning VM…”


    )


  19. #开始克隆,vm_name是新主机名字

  20. task

    =

    template

    .

    Clone

    (

    folder

    =

    self

    .

    _get_folder

    (

    self

    .

    content

    )


    ,

    name

    =

    kwargs

    .

    get

    (


    “vm_name”


    )


    ,

    spec

    =

    clonespec

    )

  21. #使克隆任务从异步变成同步,后面会把代码列出

  22. return

    self

    .

    wait_for_task

    (

    task

    )

上面就是克隆的具体代码,从模板创建虚拟机的过程就是在克隆的基础上加上配置的修改,如何修改配置会在接下来更新,感谢观看。

参考文档   https://github.com/vmware/pyvmomi-community-samples  里面有很多栗子。



版权声明:本文为body221原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。