使用虚拟基础结构的vlab通用逻辑
vlab-inf-common的Python项目详细描述
这个库集中了与虚拟基础设施提供者一起工作的逻辑。
vmware
基于vSphere的pyVmomiAPI绑定 创建更多human-friendly对象,如:
vCenter
之所以称为vCenter,是因为您将连接到host。这个对象 更关注与虚拟机的交互,而不是配置系统。
下面是使用vCenter对象的示例:
fromvlab_inf_common.vmwareimportvCenter,vimvc=vCenter(user='Alice',password='iLoveDogs',host='some-vcenter-server.corp')vc.networks{'front-end':'vim.Network:network-14'}# mapping of name -> objectvc.create_vm_folder(path='/some/new/path')# recursively creates the whole pathvms=vc.get_by_type(vim.VirtualMachine)vms(ManagedObject)['vim.VirtualMachine:vm-15']
Ova
此对象抽象了创建新虚拟机时对ova文件的使用。 它同时处理ova文件位置的本地路径和url。部署 ova是一个单一的方法调用(一旦您获得了规范和租约)。
下面是使用Ova对象的示例:
fromvlab_inf_common.vmwareimportOvaova=Ova('https://some-server/myMachine.ova')ova.networks['eth0']ova.vmdks['disk-1.vmdk','disk-2.vmdk']hasattr(ova,'ovf')# b/c the ovf XML is too long to put in an exampleTrue
下面是一个使用Ova和vCenter部署新虚拟机的示例 有点长,但Pyvmomi并不容易…
importtimefromvlab_inf_common.vmwareimportOva,vCenter,vimvc=vCenter(user='Alice',password='iLoveDogs',host='some-vsphere-server.corp')ova=Ova('/some/path/myMachine.ova')my_folder=vc.get_vm_folder('/users/alice')network_map=vim.OvfManager.NetworkMapping()network_map.name=ova.networks[0]network_map.network=vc.networks['front-end']# assuming you have a network named 'frond-end'resouce_pool=vc.resource_pool['users']# assuming your pool name is 'users'datastore=vc.datastores['general']# another assumption!host=list(vc.host_systems.values())[0]# if you don't care which host you upload tospec_params=vim.OvfManager.CreateImportSpecParams(entityName='myNewVM',networkMapping=[network_map])spec=vc.ovf_manager.CreateImportSpec(ovfDescriptor=ova.ovf,resourcePool=resouce_pool,datastore=datastore,cisp=spec_params)lease=resource_pool.ImportVApp(spec.importSpec,folder=my_folder,host=host)for_inrange(30):iflease.state!='ready':time.sleep(1)else:breakprint('starting deploy')ova.deploy(spec,lease,host.name)print('Upload complete')ova.close()
常见问题
如何处理vCenter中的自签名TLS证书?
将环境变量INF_VCENTER_VERIFY_CERT设置为任意值,然后 我们将使用python ssl库创建的默认上下文。默认情况下,我们将 忽略自签名证书。