2016-04-08 21 views
0

vSphere Pyvmomi (https://github.com/vmware/pyvmomi) için resmi Python bağlayıcılığı ile uğraşıyorum Bir vm'yi açmak için çalışan bir kod örneği almayı başardım ancak önce vm'yi belirli bir anlık görüntüye geri almak istiyorum açık olmak. Bunun nasıl yapılacağı hakkında bir fikrin var mı? Şimdiye kadar ne çalışıyor.VM anlık görüntüsünü Pyvmomi ile nasıl geri alabilirsiniz?

def main(): 

    args = GetArgs() 
    if args.password: 
     password = args.password 
    else: 
     password = getpass.getpass(prompt='Enter password for host %s and user %s: ' % (args.host,args.user)) 

    try: 
     vmnames = args.vmname 
     if not len(vmnames): 
     print("No virtual machine specified for poweron") 
     sys.exit() 

     si = None 
     context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) 
     context.verify_mode = ssl.CERT_NONE 
     try: 
     si = SmartConnect(host=args.host, 
          user=args.user, 
          pwd=password, 
          port=int(args.port), 
          sslContext=context) 
     except IOError: 
     pass 
     if not si: 
     print("Cannot connect to specified host using specified username and password") 
     sys.exit() 

     atexit.register(Disconnect, si) 

     # Retreive the list of Virtual Machines from the inventory objects 
     # under the rootFolder 
     content = si.content 
     objView = content.viewManager.CreateContainerView(content.rootFolder, 
                 [vim.VirtualMachine], 
                 True) 
     vmList = objView.view 
     objView.Destroy() 

     #Code to list all available snapshots but not working 
     #snap_info = [vm.snapshot for vm in vmList if vm.name in vmnames] 

     #tree = snap_info.rootSnapshotList 
     #while tree[0].childSnapshotList is not None: 
     # print("Snap: {0} => {1}".format(tree[0].name, tree[0].description)) 
     # if len(tree[0].childSnapshotList) < 1: 
     #  break 
     # tree = tree[0].childSnapshotList 

     # Find the vm and power it on 
     tasks = [vm.PowerOn() for vm in vmList if vm.name in vmnames] 

     print("Virtual Machine(s) have been powered on successfully") 
    except vmodl.MethodFault as e: 
     print("Caught vmodl fault : " + e.msg) 
    except Exception as e: 
     print("Caught Exception : " + str(e)) 

# Start program 
if __name__ == "__main__": 
    main() 

cevap

1

Böyle bir görev oluşturmak için deneyebilirsiniz:

snapshot_name = 'snapshot_name2' # snapshot name 
    for vm in vmList: 
     if vm.name in vmnames: 
      snapshots = vm.snapshot.rootSnapshotList 
      for snapshot in snapshots: 
        if snapshot_name == snapshot.name: 
         snap_obj = snapshot.snapshot 
         print ("Reverting snapshot ", snapshot.name) 
         task = [snap_obj.RevertToSnapshot_Task()] 
         WaitForTasks(task, si) 
+0

Çok teşekkürler! İşte tam olarak buradaki –

1

en fazla 3 düzey aşağı (sadece bir tane kökünü değil) bir anlık geri dönmek isterseniz bu

gibi bunu yapabilir
snapshot_name = 'MySnapshot' # snapshot name 
for vm in vmList: 
    if vm.name in vmnames: 
     snapshots = vm.snapshot.rootSnapshotList 
     for snapshot in snapshots: 
     if snapshot_name == snapshot.name: 
      print("Snapshot NAME L1: " + str(snapshot.name)) 
      snap_obj = snapshot.snapshot 
      print("LEVEL1 Reverting snapshot ", snapshot.name) 
      task = [snap_obj.RevertToSnapshot_Task()] 
      WaitForTasks(task, si) 
      break 
     for subsnapshot in snapshot.childSnapshotList: 
      print(subsnapshot.name) 
      if snapshot_name == subsnapshot.name: 
       print("Snapshot NAME L2: " + str(subsnapshot.name)) 
       snap_obj = subsnapshot.snapshot 
       print("LEVEL2 Reverting snapshot ", subsnapshot.name) 
       task = [snap_obj.RevertToSnapshot_Task()] 
       WaitForTasks(task, si) 
       break 
      for subsnapshot2 in subsnapshot.childSnapshotList: 
       print(subsnapshot2.name) 
       if snapshot_name == subsnapshot2.name: 
        print("Snapshot NAME L3: " + str(subsnapshot2.name)) 
        snap_obj = subsnapshot2.snapshot 
        print("LEVEL3 Reverting snapshot ", subsnapshot2.name) 
        task = [snap_obj.RevertToSnapshot_Task()] 
        WaitForTasks(task, si) 
        break 
+0

'u arıyordum. Https://github.com/andriyze/python-vmware-manager – andriyze

1

Çocuklar vm de dahil olmak üzere tüm anlık görüntüleri almak için yinelemeli işlev.

def get_all_vm_snapshots(self, snapshots=None): 
    found_snapshots = [] 

    if not snapshots: 
     snapshots = vm.snapshot.rootSnapshotList 

    for snapshot in snapshots: 
     if snapshot.childSnapshotList: 
      found_snapshots += get_all_vm_snapshots(snapshot.childSnapshotList) 
     found_snapshots += [snapshot] 
    return found_snapshots