Package com.vmware.aurora.composition

Source Code of com.vmware.aurora.composition.TestSP$RemoveSnapshotSP

/***************************************************************************
* Copyright (c) 2012-2013 VMware, Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/

package com.vmware.aurora.composition;

import java.util.concurrent.Callable;

import com.vmware.aurora.vc.DeviceId;
import com.vmware.aurora.vc.VcCache;
import com.vmware.aurora.vc.VcDatastore;
import com.vmware.aurora.vc.VcResourcePool;
import com.vmware.aurora.vc.VcSnapshot;
import com.vmware.aurora.vc.VcVirtualMachine;
import com.vmware.aurora.vc.VcVirtualMachine.CreateSpec;
import com.vmware.aurora.vc.VcVirtualMachine.DiskCreateSpec;
import com.vmware.aurora.vc.vcservice.VcContext;
import com.vmware.aurora.vc.vcservice.VcSession;

/**
* Class for all the store procedures used in junit test.
*/
public class TestSP {

   /**
    * Import a vm,clone a vm,delete a vm,changed the disk of a vm.
    */
   class ChangeDiskSP implements Callable<Void> {
      final String vmId;
      final DeviceId[] removeDisks;
      final DiskCreateSpec[] addDisks;

      public ChangeDiskSP(String vmId, DeviceId[] removeDisks,
            DiskCreateSpec[] addDisks) {
         this.vmId = vmId;
         this.removeDisks = removeDisks;
         this.addDisks = addDisks;
      }

      @Override
      public Void call() throws Exception {
         VcVirtualMachine vm = VcCache.get(vmId);
         if (!(removeDisks == null && addDisks == null)) {
            vm.changeDisks(removeDisks, addDisks);
         }
         return null;
      }
   }

   /**
    * Copy vm store procedure,override the run()method. This procedure doesn't
    * remove any disks.
    */
   class CloneVmSP implements Callable<Void> {
      final String newVmName;
      final String srcVmId;
      final String snapName;
      final VcResourcePool targetRp;
      final VcDatastore targetDs;
      final DeviceId[] removeDisks;
      final DiskCreateSpec[] addDisks;

      transient VcVirtualMachine vcVm = null;
      transient String dstVmId;

      public CloneVmSP(String newVmName, String srcVmId, String snapName,
            VcResourcePool targetRp, VcDatastore targetDs,
            DeviceId[] removeDisks, DiskCreateSpec[] addDisks) {
         this.newVmName = newVmName;
         this.srcVmId = srcVmId;
         this.snapName = snapName;
         this.targetRp = targetRp;
         this.targetDs = targetDs;
         this.removeDisks = removeDisks;
         this.addDisks = addDisks;
      }

      @Override
      public Void call() throws Exception {
         VcContext.inVcSessionDo(new VcSession<Void>() {
            @Override
            protected boolean isTaskSession() {
               return true;
            }

            @Override
            protected Void body() throws Exception {
               VcVirtualMachine template = VcCache.get(srcVmId);
               VcSnapshot snap = template.getSnapshotByName(snapName);

               CreateSpec vmSpec =
                     new CreateSpec(newVmName, snap, targetRp, targetDs, true, null);

               DeviceId[] removeSet = removeDisks;
               VcVirtualMachine newVm = template.cloneVm(vmSpec, removeSet);
               newVm.changeDisks(null, addDisks);
               //newVm.powerOn();

               // retrieve the resulting VcObject instance
               dstVmId = newVm.getId();
               vcVm = newVm;
               return null;
            }
         });
         return null;
      }

      public String getResult() {
         return dstVmId;
      }

      public VcVirtualMachine getVM() {
         return this.vcVm;
      }
   }

   /**
    * Store procedure for taking snap shot of vm.
    */
   class TakeSnapshotSP implements Callable<Void> {
      final String vmId;
      final String name;
      final String description;
      transient long snapId;

      public TakeSnapshotSP(String vmId, String name, String description) {
         this.vmId = vmId;
         this.name = name;
         this.description = description;
      }

      @Override
      public Void call() throws Exception {
         final VcVirtualMachine vm = VcCache.get(vmId);

         VcContext.inVcSessionDo(new VcSession<Void>() {
            @Override
            protected boolean isTaskSession() {
               return true;
            }

            @Override
            protected Void body() throws Exception {
               vm.createSnapshot(name, description);
               return null;
            }
         });
         return null;
      }
   }

   /**
    * Store procedure for removing snap shot of vm.
    */
   class RemoveSnapshotSP implements Callable<Void> {
      final String vmId;
      final String snapName;

      public RemoveSnapshotSP(String vmId, String snapName) {
         this.vmId = vmId;
         this.snapName = snapName;
      }

      @Override
      public Void call() throws Exception {
         VcContext.inVcSessionDo(new VcSession<Void>() {
            @Override
            protected boolean isTaskSession() {
               return true;
            }

            @Override
            protected Void body() throws Exception {
               VcVirtualMachine vm = VcCache.get(vmId);
               VcSnapshot snap = vm.getSnapshotByName(snapName);
               snap.remove();
               return null;
            }
         });
         return null;
      }
   }

   /**
    * Store procedure for cleaning up.
    */
   class CleanUpSP implements Callable<Void> {
      final String vmId;

      public CleanUpSP(String vmId) {
         this.vmId = vmId;
      }

      @Override
      public Void call() throws Exception {
         VcContext.inVcSessionDo(new VcSession<Void>() {
            @Override
            protected boolean isTaskSession() {
               return true;
            }

            @Override
            protected Void body() throws Exception {
               VcVirtualMachine vm = VcCache.get(vmId);
               vm.destroy();
               return null;
            }
         });
         return null;
      }
   }
}
TOP

Related Classes of com.vmware.aurora.composition.TestSP$RemoveSnapshotSP

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.