2016-04-08 15 views
0

vSphere Pyvmomiの公式のPythonバインディング(https://github.com/vmware/pyvmomi) 私はVMの電源を入れるコードサンプルを取得できましたが、前もってVMを特定のスナップショットに戻したいと思います電源が入っています。どのようにこれを行うにはどのようなアイデア?ここまでは何が働いているのですか?PyvmomiでVMスナップショットを元に戻すには?

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() 

答えて

1

あなたはそのようなタスクを作成しようとすることができます:

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

ありがとうございます!それはまさに私が探していたものです –

1

を使用すると、最大3つのレベルダウン(一つだけをrootでない)スナップショットに戻したい場合は、この

ようにそれを行うことができます
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

ここにスクリプトhttps://github.com/andriyze/python-vmware-managerがあります – andriyze

1

VM上の子を含むすべてのスナップショットを取得する再帰的な機能。

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 
関連する問題