Package com.cloud.vmware

Source Code of com.cloud.vmware.TestVMWare$TrustAllManager

// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you 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.cloud.vmware;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;

import org.apache.log4j.xml.DOMConfigurator;

import com.cloud.utils.PropertiesUtil;
import com.vmware.apputils.version.ExtendedAppUtil;
import com.vmware.vim25.HostIpConfig;
import com.vmware.vim25.HostVirtualNicSpec;
import com.vmware.vim25.HostConfigManager;
import com.vmware.vim25.HostPortGroupSpec;
import com.vmware.vim25.HttpNfcLeaseDeviceUrl;
import com.vmware.vim25.HttpNfcLeaseInfo;
import com.vmware.vim25.HttpNfcLeaseState;
import com.vmware.vim25.OvfCreateImportSpecParams;
import com.vmware.vim25.OvfCreateImportSpecResult;
import com.vmware.vim25.OvfFileItem;
import com.vmware.vim25.OvfNetworkMapping;
import com.vmware.vim25.VirtualMachineConfigSpec;
import com.vmware.vim25.VirtualDeviceConfigSpecOperation;
import com.vmware.vim25.VirtualEthernetCard;
import com.vmware.vim25.VirtualEthernetCardNetworkBackingInfo;
import com.vmware.vim25.VirtualNicManagerNetConfig;
import com.vmware.vim25.VirtualPCNet32;
import com.vmware.vim25.VirtualDeviceConfigSpec;
import com.vmware.vim25.VirtualMachineCloneSpec;
import com.vmware.vim25.VirtualMachineRelocateSpec;
import com.vmware.vim25.ArrayOfManagedObjectReference;
import com.vmware.vim25.DatastoreInfo;
import com.vmware.vim25.DynamicProperty;
import com.vmware.vim25.InvalidProperty;
import com.vmware.vim25.ManagedObjectReference;
import com.vmware.vim25.ObjectContent;
import com.vmware.vim25.ObjectSpec;
import com.vmware.vim25.PropertyFilterSpec;
import com.vmware.vim25.PropertySpec;
import com.vmware.vim25.RuntimeFault;
import com.vmware.vim25.SelectionSpec;
import com.vmware.vim25.TraversalSpec;

public class TestVMWare {
  private static ExtendedAppUtil cb;
 
  static {
    try {
      javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
      javax.net.ssl.TrustManager tm = new TrustAllManager();
      trustAllCerts[0] = tm;
      javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
      sc.init(null, trustAllCerts, null);
      javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    } catch (Exception e) {
    }
  }
 
  private static void setupLog4j() {
     File file = PropertiesUtil.findConfigFile("log4j-cloud.xml");

     if(file != null) {
       System.out.println("Log4j configuration from : " + file.getAbsolutePath());
       DOMConfigurator.configureAndWatch(file.getAbsolutePath(), 10000);
     } else {
       System.out.println("Configure log4j with default properties");
     }
  }
 
  private void getAndPrintInventoryContents() throws Exception {
      TraversalSpec resourcePoolTraversalSpec = new TraversalSpec();
      resourcePoolTraversalSpec.setName("resourcePoolTraversalSpec");
      resourcePoolTraversalSpec.setType("ResourcePool");
      resourcePoolTraversalSpec.setPath("resourcePool");
      resourcePoolTraversalSpec.setSkip(new Boolean(false));
      resourcePoolTraversalSpec.setSelectSet(
      new SelectionSpec [] { new SelectionSpec(null,null,"resourcePoolTraversalSpec") });

      TraversalSpec computeResourceRpTraversalSpec = new TraversalSpec();
      computeResourceRpTraversalSpec.setName("computeResourceRpTraversalSpec");
      computeResourceRpTraversalSpec.setType("ComputeResource");
      computeResourceRpTraversalSpec.setPath("resourcePool");
      computeResourceRpTraversalSpec.setSkip(new Boolean(false));
      computeResourceRpTraversalSpec.setSelectSet(
      new SelectionSpec [] { new SelectionSpec(null,null,"resourcePoolTraversalSpec") });

      TraversalSpec computeResourceHostTraversalSpec = new TraversalSpec();
      computeResourceHostTraversalSpec.setName("computeResourceHostTraversalSpec");
      computeResourceHostTraversalSpec.setType("ComputeResource");
      computeResourceHostTraversalSpec.setPath("host");
      computeResourceHostTraversalSpec.setSkip(new Boolean(false));

      TraversalSpec datacenterHostTraversalSpec = new TraversalSpec();
      datacenterHostTraversalSpec.setName("datacenterHostTraversalSpec");
      datacenterHostTraversalSpec.setType("Datacenter");
      datacenterHostTraversalSpec.setPath("hostFolder");
      datacenterHostTraversalSpec.setSkip(new Boolean(false));
      datacenterHostTraversalSpec.setSelectSet(
      new SelectionSpec [] { new SelectionSpec(null,null,"folderTraversalSpec") });

      TraversalSpec datacenterVmTraversalSpec = new TraversalSpec();
      datacenterVmTraversalSpec.setName("datacenterVmTraversalSpec");
      datacenterVmTraversalSpec.setType("Datacenter");
      datacenterVmTraversalSpec.setPath("vmFolder");
      datacenterVmTraversalSpec.setSkip(new Boolean(false));
      datacenterVmTraversalSpec.setSelectSet(
      new SelectionSpec [] { new SelectionSpec(null,null,"folderTraversalSpec") });

      TraversalSpec folderTraversalSpec = new TraversalSpec();
      folderTraversalSpec.setName("folderTraversalSpec");
      folderTraversalSpec.setType("Folder");
      folderTraversalSpec.setPath("childEntity");
      folderTraversalSpec.setSkip(new Boolean(false));
      folderTraversalSpec.setSelectSet(
      new SelectionSpec [] { new SelectionSpec(null,null,"folderTraversalSpec"),
                             datacenterHostTraversalSpec,
                             datacenterVmTraversalSpec,
                             computeResourceRpTraversalSpec,
                             computeResourceHostTraversalSpec,
                             resourcePoolTraversalSpec });     

      PropertySpec[] propspecary = new PropertySpec[] { new PropertySpec() };
      propspecary[0].setAll(new Boolean(false));
      propspecary[0].setPathSet(new String[] { "name" });
      propspecary[0].setType("ManagedEntity");

      PropertyFilterSpec spec = new PropertyFilterSpec();
      spec.setPropSet(propspecary);
      spec.setObjectSet(new ObjectSpec[] { new ObjectSpec() });
      spec.getObjectSet(0).setObj(cb.getServiceConnection3().getRootFolder());
      spec.getObjectSet(0).setSkip(new Boolean(false));
      spec.getObjectSet(0).setSelectSet(
      new SelectionSpec[] { folderTraversalSpec });     

      // Recursively get all ManagedEntity ManagedObjectReferences
      // and the "name" property for all ManagedEntities retrieved
      ObjectContent[] ocary =
        cb.getServiceConnection3().getService().retrieveProperties(
        cb.getServiceConnection3().getServiceContent().getPropertyCollector(),
           new PropertyFilterSpec[] { spec }
      );

      // If we get contents back. print them out.
      if (ocary != null) {
         ObjectContent oc = null;
         ManagedObjectReference mor = null;
         DynamicProperty[] pcary = null;
         DynamicProperty pc = null;
         for (int oci = 0; oci < ocary.length; oci++) {
            oc = ocary[oci];
            mor = oc.getObj();
            pcary = oc.getPropSet();

            System.out.println("Object Type : " + mor.getType());
            System.out.println("Reference Value : " + mor.get_value());

            if (pcary != null) {
               for (int pci = 0; pci < pcary.length; pci++) {
                  pc = pcary[pci];
                  System.out.println("   Property Name : " + pc.getName());
                  if (pc != null) {
                     if (!pc.getVal().getClass().isArray()) {
                        System.out.println("   Property Value : " + pc.getVal());
                     }
                     else {
                        Object[] ipcary = (Object[])pc.getVal();
                        System.out.println("Val : " + pc.getVal());
                        for (int ii = 0; ii < ipcary.length; ii++) {
                           Object oval = ipcary[ii];
                           if (oval.getClass().getName().indexOf("ManagedObjectReference") >= 0) {
                              ManagedObjectReference imor = (ManagedObjectReference)oval;

                              System.out.println("Inner Object Type : " + imor.getType());
                              System.out.println("Inner Reference Value : " + imor.get_value());
                           }
                           else {
                              System.out.println("Inner Property Value : " + oval);
                           }
                        }
                     }
                  }
               }
            }
         }
      } else {
         System.out.println("No Managed Entities retrieved!");
      }
  }
 
  private void listDataCenters() {
    try {
      ManagedObjectReference[] morDatacenters = getDataCenterMors();
      if(morDatacenters != null) {
        for(ManagedObjectReference mor : morDatacenters) {
          System.out.println("Datacenter : " + mor.get_value());
         
          Map<String, Object> properites = new HashMap<String, Object>();
          properites.put("name", null);
          properites.put("vmFolder", null);
          properites.put("hostFolder", null);
         
          getProperites(mor, properites);
          for(Map.Entry<String, Object> entry : properites.entrySet()) {
            if(entry.getValue() instanceof ManagedObjectReference) {
              ManagedObjectReference morProp = (ManagedObjectReference)entry.getValue();
              System.out.println("\t" + entry.getKey() + ":(" + morProp.getType() + ", " + morProp.get_value() + ")");
            } else {
              System.out.println("\t" + entry.getKey() + ":" + entry.getValue());
            }
          }
         
          System.out.println("Datacenter clusters");
          ManagedObjectReference[] clusters = getDataCenterClusterMors(mor);
          if(clusters != null) {
            for(ManagedObjectReference morCluster : clusters) {
              Object[] props = this.getProperties(morCluster, new String[] {"name"});
              System.out.println("cluster : " + props[0]);
             
              System.out.println("cluster hosts");
              ManagedObjectReference[] hosts = getClusterHostMors(morCluster);
              if(hosts != null) {
                for(ManagedObjectReference morHost : hosts) {
                  Object[] props2 = this.getProperties(morHost, new String[] {"name"});
                  System.out.println("host : " + props2[0]);
                }
              }
            }
          }
         
          System.out.println("Datacenter standalone hosts");
          ManagedObjectReference[] hosts = getDataCenterStandaloneHostMors(mor);
          if(hosts != null) {
            for(ManagedObjectReference morHost : hosts) {
              Object[] props = this.getProperties(morHost, new String[] {"name"});
              System.out.println("host : " + props[0]);
            }
          }
         
          System.out.println("Datacenter datastores");
          ManagedObjectReference[] stores = getDataCenterDatastoreMors(mor);
          if(stores != null) {
            for(ManagedObjectReference morStore : stores) {
              // data store name property does not work for some reason
              Object[] props = getProperties(morStore, new String[] {"info" });
             
              System.out.println(morStore.getType() + ": " + ((DatastoreInfo)props[0]).getName());
            }
          }
         
          System.out.println("Datacenter VMs");
          ManagedObjectReference[] vms = getDataCenterVMMors(mor);
          if(stores != null) {
            for(ManagedObjectReference morVm : vms) {
              Object[] props = this.getProperties(morVm, new String[] {"name"});
              System.out.println("VM name: " + props[0] + ", ref val: " + morVm.get_value());
            }
          }
        }
      }
    } catch(RuntimeFault e) {
      e.printStackTrace();
    } catch(RemoteException e) {
      e.printStackTrace();
    }
  }
 
  private void listInventoryFolders() {
      TraversalSpec folderTraversalSpec = new TraversalSpec();
      folderTraversalSpec.setName("folderTraversalSpec");
      folderTraversalSpec.setType("Folder");
      folderTraversalSpec.setPath("childEntity");
      folderTraversalSpec.setSkip(new Boolean(false));
      folderTraversalSpec.setSelectSet(
        new SelectionSpec [] { new SelectionSpec(null, null, "folderTraversalSpec")}
      );
     
      PropertySpec[] propSpecs = new PropertySpec[] { new PropertySpec() };
      propSpecs[0].setAll(new Boolean(false));
      propSpecs[0].setPathSet(new String[] { "name" });
      propSpecs[0].setType("ManagedEntity");
     
      PropertyFilterSpec filterSpec = new PropertyFilterSpec();
      filterSpec.setPropSet(propSpecs);
      filterSpec.setObjectSet(new ObjectSpec[] { new ObjectSpec() });
      filterSpec.getObjectSet(0).setObj(cb.getServiceConnection3().getRootFolder());
      filterSpec.getObjectSet(0).setSkip(new Boolean(false));
      filterSpec.getObjectSet(0).setSelectSet(
        new SelectionSpec[] { folderTraversalSpec }
      );     
     
      try {
      ObjectContent[] objContent = cb.getServiceConnection3().getService().retrieveProperties(
        cb.getServiceConnection3().getServiceContent().getPropertyCollector(),
        new PropertyFilterSpec[] { filterSpec }
      );
      printContent(objContent);
    } catch (InvalidProperty e) {
      e.printStackTrace();
    } catch (RuntimeFault e) {
      e.printStackTrace();
    } catch (RemoteException e) {
      e.printStackTrace();
    }
  }
 
  private TraversalSpec getFolderRecursiveTraversalSpec() {
      SelectionSpec recurseFolders = new SelectionSpec();
      recurseFolders.setName("folder2childEntity");
       
      TraversalSpec folder2childEntity = new TraversalSpec();
      folder2childEntity.setType("Folder");
      folder2childEntity.setPath("childEntity");
      folder2childEntity.setName(recurseFolders.getName());
      folder2childEntity.setSelectSet(new SelectionSpec[] { recurseFolders });
     
      return folder2childEntity;
  }
 
  private ManagedObjectReference[] getDataCenterMors() throws RuntimeFault, RemoteException {
    PropertySpec pSpec = new PropertySpec();
      pSpec.setType("Datacenter");
      pSpec.setPathSet(new String[] { "name"} );

      ObjectSpec oSpec = new ObjectSpec();
      oSpec.setObj(cb.getServiceConnection3().getRootFolder());
      oSpec.setSkip(Boolean.TRUE);
      oSpec.setSelectSet(new SelectionSpec[] { getFolderRecursiveTraversalSpec() });

      PropertyFilterSpec pfSpec = new PropertyFilterSpec();
      pfSpec.setPropSet(new PropertySpec[] { pSpec });
      pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
       
      ObjectContent[] ocs = cb.getServiceConnection3().getService().retrieveProperties(
            cb.getServiceConnection3().getServiceContent().getPropertyCollector(),
            new PropertyFilterSpec[] { pfSpec });
     
      if(ocs != null) {
        ManagedObjectReference[] morDatacenters = new ManagedObjectReference[ocs.length];
        for(int i = 0; i < ocs.length; i++)
          morDatacenters[i] = ocs[i].getObj();
       
        return morDatacenters;
      }
      return null;
  }
 
  private ManagedObjectReference[] getDataCenterVMMors(ManagedObjectReference morDatacenter) throws RuntimeFault, RemoteException {
    PropertySpec pSpec = new PropertySpec();
      pSpec.setType("VirtualMachine");
      pSpec.setPathSet(new String[] { "name"} );

      ObjectSpec oSpec = new ObjectSpec();
      oSpec.setObj(morDatacenter);
      oSpec.setSkip(Boolean.TRUE);

      TraversalSpec tSpec = new TraversalSpec();
      tSpec.setName("dc2VMFolder");
      tSpec.setType("Datacenter");
      tSpec.setPath("vmFolder");
      tSpec.setSelectSet(new SelectionSpec[] { getFolderRecursiveTraversalSpec() } );
     
      oSpec.setSelectSet(new SelectionSpec[] { tSpec });

      PropertyFilterSpec pfSpec = new PropertyFilterSpec();
      pfSpec.setPropSet(new PropertySpec[] { pSpec });
      pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
       
      ObjectContent[] ocs = cb.getServiceConnection3().getService().retrieveProperties(
            cb.getServiceConnection3().getServiceContent().getPropertyCollector(),
            new PropertyFilterSpec[] { pfSpec });
     
      if(ocs != null) {
        ManagedObjectReference[] morVMs = new ManagedObjectReference[ocs.length];
        for(int i = 0; i < ocs.length; i++)
          morVMs[i] = ocs[i].getObj();
       
        return morVMs;
      }
      return null;
  }
 
  private ManagedObjectReference[] getDataCenterDatastoreMors(ManagedObjectReference morDatacenter) throws RuntimeFault, RemoteException {
    Object[] stores = getProperties(morDatacenter, new String[] { "datastore" });
    if(stores != null && stores.length == 1) {
      return ((ArrayOfManagedObjectReference)stores[0]).getManagedObjectReference();
    }
    return null;
  }
 
  private ManagedObjectReference[] getDataCenterClusterMors(ManagedObjectReference morDatacenter) throws RuntimeFault, RemoteException {
    PropertySpec pSpec = new PropertySpec();
      pSpec.setType("ClusterComputeResource");
      pSpec.setPathSet(new String[] { "name"} );

      ObjectSpec oSpec = new ObjectSpec();
      oSpec.setObj(morDatacenter);
      oSpec.setSkip(Boolean.TRUE);
     
      TraversalSpec tSpec = new TraversalSpec();
      tSpec.setName("traversalHostFolder");
      tSpec.setType("Datacenter");
      tSpec.setPath("hostFolder");
      tSpec.setSkip(false);
      tSpec.setSelectSet(new SelectionSpec[] { getFolderRecursiveTraversalSpec() });
     
      oSpec.setSelectSet(new TraversalSpec[] { tSpec });

      PropertyFilterSpec pfSpec = new PropertyFilterSpec();
      pfSpec.setPropSet(new PropertySpec[] { pSpec });
      pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
       
      ObjectContent[] ocs = cb.getServiceConnection3().getService().retrieveProperties(
            cb.getServiceConnection3().getServiceContent().getPropertyCollector(),
            new PropertyFilterSpec[] { pfSpec });
     
      if(ocs != null) {
        ManagedObjectReference[] morDatacenters = new ManagedObjectReference[ocs.length];
        for(int i = 0; i < ocs.length; i++)
          morDatacenters[i] = ocs[i].getObj();
       
        return morDatacenters;
      }
      return null;
  }
 
  private ManagedObjectReference[] getDataCenterStandaloneHostMors(ManagedObjectReference morDatacenter) throws RuntimeFault, RemoteException {
    PropertySpec pSpec = new PropertySpec();
      pSpec.setType("ComputeResource");
      pSpec.setPathSet(new String[] { "name"} );

      ObjectSpec oSpec = new ObjectSpec();
      oSpec.setObj(morDatacenter);
      oSpec.setSkip(Boolean.TRUE);
     
      TraversalSpec tSpec = new TraversalSpec();
      tSpec.setName("traversalHostFolder");
      tSpec.setType("Datacenter");
      tSpec.setPath("hostFolder");
      tSpec.setSkip(false);
      tSpec.setSelectSet(new SelectionSpec[] { getFolderRecursiveTraversalSpec() });
     
      oSpec.setSelectSet(new TraversalSpec[] { tSpec });

      PropertyFilterSpec pfSpec = new PropertyFilterSpec();
      pfSpec.setPropSet(new PropertySpec[] { pSpec });
      pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
       
      ObjectContent[] ocs = cb.getServiceConnection3().getService().retrieveProperties(
            cb.getServiceConnection3().getServiceContent().getPropertyCollector(),
            new PropertyFilterSpec[] { pfSpec });
     
      if(ocs != null) {
        List<ManagedObjectReference> listComputeResources = new ArrayList<ManagedObjectReference>();
        for(ObjectContent oc : ocs) {
          if(oc.getObj().getType().equalsIgnoreCase("ComputeResource"))
            listComputeResources.add(oc.getObj());
        }
       
        List<ManagedObjectReference> listHosts = new ArrayList<ManagedObjectReference>();
        for(ManagedObjectReference morComputeResource : listComputeResources) {
          ManagedObjectReference[] hosts = getComputeResourceHostMors(morComputeResource);
          if(hosts != null) {
            for(ManagedObjectReference host: hosts)
              listHosts.add(host);
          }
        }
       
        return listHosts.toArray(new ManagedObjectReference[0]);
      }
      return null;
  }
 
  private ManagedObjectReference[] getComputeResourceHostMors(ManagedObjectReference morCompute) throws RuntimeFault, RemoteException {
    PropertySpec pSpec = new PropertySpec();
      pSpec.setType("HostSystem");
      pSpec.setPathSet(new String[] { "name"} );

      ObjectSpec oSpec = new ObjectSpec();
      oSpec.setObj(morCompute);
      oSpec.setSkip(true);
     
      TraversalSpec tSpec = new TraversalSpec();
      tSpec.setName("computeResource2Host");
      tSpec.setType("ComputeResource");
      tSpec.setPath("host");
      tSpec.setSkip(false);
      oSpec.setSelectSet(new TraversalSpec[] { tSpec });

      PropertyFilterSpec pfSpec = new PropertyFilterSpec();
      pfSpec.setPropSet(new PropertySpec[] { pSpec });
      pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
     
      ObjectContent[] ocs = cb.getServiceConnection3().getService().retrieveProperties(
            cb.getServiceConnection3().getServiceContent().getPropertyCollector(),
            new PropertyFilterSpec[] { pfSpec });
     
      if(ocs != null) {
        ManagedObjectReference[] morDatacenters = new ManagedObjectReference[ocs.length];
        for(int i = 0; i < ocs.length; i++)
          morDatacenters[i] = ocs[i].getObj();
       
        return morDatacenters;
      }
      return null;
  }
 
  private ManagedObjectReference[] getClusterHostMors(ManagedObjectReference morCluster) throws RuntimeFault, RemoteException {
    // ClusterComputeResource inherits from ComputeResource
    return getComputeResourceHostMors(morCluster);
  }
 
  private ObjectContent[] getDataCenterProperites(String[] properites) throws RuntimeFault, RemoteException {
    PropertySpec pSpec = new PropertySpec();
      pSpec.setType("Datacenter");
      pSpec.setPathSet(properites );

      SelectionSpec recurseFolders = new SelectionSpec();
      recurseFolders.setName("folder2childEntity");
       
      TraversalSpec folder2childEntity = new TraversalSpec();
      folder2childEntity.setType("Folder");
      folder2childEntity.setPath("childEntity");
      folder2childEntity.setName(recurseFolders.getName());
      folder2childEntity.setSelectSet(new SelectionSpec[] { recurseFolders });

      ObjectSpec oSpec = new ObjectSpec();
      oSpec.setObj(cb.getServiceConnection3().getRootFolder());
      oSpec.setSkip(Boolean.TRUE);
      oSpec.setSelectSet(new SelectionSpec[] { folder2childEntity });

      PropertyFilterSpec pfSpec = new PropertyFilterSpec();
      pfSpec.setPropSet(new PropertySpec[] { pSpec });
      pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
       
      return cb.getServiceConnection3().getService().retrieveProperties(
            cb.getServiceConnection3().getServiceContent().getPropertyCollector(),
            new PropertyFilterSpec[] { pfSpec });
  }
 
  private void printContent(ObjectContent[] objContent) {
    if(objContent != null) {
      for(ObjectContent oc : objContent) {
        ManagedObjectReference mor = oc.getObj();
            DynamicProperty[] objProps = oc.getPropSet();

            System.out.println("Object type: " + mor.getType());
            if(objProps != null) {
              for(DynamicProperty objProp : objProps) {
                if(!objProp.getClass().isArray()) {
                  System.out.println("\t" + objProp.getName() + "=" + objProp.getVal());
                } else {
                          Object[] ipcary = (Object[])objProp.getVal();
                          System.out.print("\t" + objProp.getName() + "=[");
                          int i = 0;
                          for(Object item : ipcary) {
                              if (item.getClass().getName().indexOf("ManagedObjectReference") >= 0) {
                                  ManagedObjectReference imor = (ManagedObjectReference)item;
                                System.out.print("(" + imor.getType() + "," + imor.get_value() + ")");
                              } else {
                                System.out.print(item);
                              }
                             
                              if(i < ipcary.length - 1)
                                System.out.print(", ");
                              i++;
                          }
                         
                          System.out.println("]");
                }
              }
            }
      }
    }
  }
 
  private void getProperites(ManagedObjectReference mor, Map<String, Object> properties) throws RuntimeFault, RemoteException {
    PropertySpec pSpec = new PropertySpec();
    pSpec.setType(mor.getType());
    pSpec.setPathSet(properties.keySet().toArray(new String[0]));
   
    ObjectSpec oSpec = new ObjectSpec();
    oSpec.setObj(mor);
   
    PropertyFilterSpec pfSpec = new PropertyFilterSpec();
    pfSpec.setPropSet(new PropertySpec[] {pSpec} );
    pfSpec.setObjectSet(new ObjectSpec[] {oSpec} );
   
    ObjectContent[] ocs = cb.getServiceConnection3().getService().retrieveProperties(
           cb.getServiceConnection3().getServiceContent().getPropertyCollector(),
           new PropertyFilterSpec[] {pfSpec} );
   
    if(ocs != null) {
      for(ObjectContent oc : ocs) {
        DynamicProperty[] propSet = oc.getPropSet();
        if(propSet != null) {
          for(DynamicProperty prop : propSet) {
            properties.put(prop.getName(), prop.getVal());
          }
        }
      }
    }
  }
 
  private Object[] getProperties(ManagedObjectReference moRef, String[] properties) throws RuntimeFault, RemoteException {
    PropertySpec pSpec = new PropertySpec();
    pSpec.setType(moRef.getType());
    pSpec.setPathSet(properties);

    ObjectSpec oSpec = new ObjectSpec();
    // Set the starting object
    oSpec.setObj(moRef);
   
    PropertyFilterSpec pfSpec = new PropertyFilterSpec();
    pfSpec.setPropSet(new PropertySpec[] {pSpec} );
    pfSpec.setObjectSet(new ObjectSpec[] {oSpec} );
    ObjectContent[] ocs = cb.getServiceConnection3().getService().retrieveProperties(
           cb.getServiceConnection3().getServiceContent().getPropertyCollector(),
           new PropertyFilterSpec[] {pfSpec} );

    Object[] ret = new Object[properties.length];
    if(ocs != null) {
      for(int i = 0; i< ocs.length; ++i) {
        ObjectContent oc = ocs[i];
        DynamicProperty[] dps = oc.getPropSet();
        if(dps != null) {
          for(int j = 0; j < dps.length; ++j) {
            DynamicProperty dp = dps[j];
            for(int p = 0; p < ret.length; ++p) {
              if(properties[p].equals(dp.getName())) {
                ret[p] = dp.getVal();
              }
            }
          }
        }
      }
    }
    return ret;
  }

  private void powerOnVm() throws Exception {
    ManagedObjectReference morVm = new ManagedObjectReference();
    morVm.setType("VirtualMachine");
    morVm.set_value("vm-480");
   
    cb.getServiceConnection3().getService().powerOnVM_Task(morVm, null);
  }
 
  private void powerOffVm() throws Exception {
    ManagedObjectReference morVm = new ManagedObjectReference();
    morVm.setType("VirtualMachine");
    morVm.set_value("vm-66");
   
    cb.getServiceConnection3().getService().powerOffVM_Task(morVm);
  }
 
  private void createSnapshot() throws Exception {
    ManagedObjectReference morVm = new ManagedObjectReference();
    morVm.setType("VirtualMachine");
    morVm.set_value("vm-66");
    cb.getServiceConnection3().getService().createSnapshot_Task(morVm, "RunningSnapshotProg", "", false, false);
  }
 
  private void registerTemplate() throws Exception {
      ManagedObjectReference morFolder = new ManagedObjectReference();
      morFolder.setType("Folder");
      morFolder.set_value("group-v3");
     
      ManagedObjectReference morHost = new ManagedObjectReference();
      morHost.setType("HostSystem");
      morHost.set_value("host-48");

      System.out.println("Begin registerVM_Task");
      ManagedObjectReference taskmor = cb.getServiceConnection3().getService().registerVM_Task(
          morFolder, "[NFS datastore] Template-Fedora/Template-Fedora.vmtx", "Template-Fedora", true,
      null, morHost);
      System.out.println("End registerVM_Task");

      String result = cb.getServiceUtil3().waitForTask(taskmor);
      if (result.equalsIgnoreCase("Sucess")) {
        System.out.println("Registering The Virtual Machine ..........Done");
      } else {
        System.out.println("Some Exception While Registering The VM");
      }
  }
 
  private void createVmFromTemplate() throws Exception {
       VirtualMachineCloneSpec cloneSpec = new VirtualMachineCloneSpec();
      
       ManagedObjectReference morDatastore = new ManagedObjectReference();
       morDatastore.setType("Datastore");
       morDatastore.set_value("datastore-30");
      
       ManagedObjectReference morHost = new ManagedObjectReference();
       morHost.setType("HostSystem");
       morHost.set_value("host-48");
      
       ManagedObjectReference morPool = new ManagedObjectReference();
       morPool.setType("ResourcePool");
       morPool.set_value("resgroup-41");
      
       VirtualMachineRelocateSpec relocSpec = new VirtualMachineRelocateSpec();
       cloneSpec.setLocation(relocSpec);
       cloneSpec.setPowerOn(false);
       cloneSpec.setTemplate(false);
      
       relocSpec.setDatastore(morDatastore);
       relocSpec.setHost(morHost);
       relocSpec.setPool(morPool);
      
       ManagedObjectReference morTemplate = new ManagedObjectReference();
       morTemplate.setType("VirtualMachine");
       morTemplate.set_value("vm-76");
      
       ManagedObjectReference morFolder = new ManagedObjectReference();
       morFolder.setType("Folder");
       morFolder.set_value("group-v3");
       
         ManagedObjectReference cloneTask
            = cb.getServiceConnection3().getService().cloneVM_Task(morTemplate, morFolder,
              "Fedora-clone-test", cloneSpec);
        
         String status = cb.getServiceUtil3().waitForTask(cloneTask);
         if(status.equalsIgnoreCase("failure")) {
            System.out.println("Failure -: Virtual Machine cannot be cloned");
         }
                 
         if(status.equalsIgnoreCase("sucess")) {
            System.out.println("Virtual Machine Cloned  successfully.");
         }
  }
 
  private void addNic() throws Exception {
    ManagedObjectReference morVm = new ManagedObjectReference();
    morVm.setType("VirtualMachine");
    morVm.set_value("vm-77");
   
    ManagedObjectReference morNetwork = new ManagedObjectReference();
    morNetwork.setType("DistributedVirtualPortgroup");
    morNetwork.set_value("dvportgroup-56");
   
    VirtualDeviceConfigSpec nicSpec = new VirtualDeviceConfigSpec();
        nicSpec.setOperation(VirtualDeviceConfigSpecOperation.add);
        VirtualEthernetCard nic =  new VirtualPCNet32();
        VirtualEthernetCardNetworkBackingInfo nicBacking
           = new VirtualEthernetCardNetworkBackingInfo();
        nicBacking.setDeviceName("Adapter to dSwitch-vlan26");
        nicBacking.setNetwork(morNetwork);
       
        nic.setAddressType("generated");
        nic.setBacking(nicBacking);
        nic.setKey(4);
        nicSpec.setDevice(nic);
       
        VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec();
        VirtualDeviceConfigSpec [] nicSpecArray = {nicSpec};                    
        vmConfigSpec.setDeviceChange(nicSpecArray);
       
        ManagedObjectReference tmor
          = cb.getServiceConnection3().getService().reconfigVM_Task(
            morVm, vmConfigSpec);
       
        String status = cb.getServiceUtil3().waitForTask(tmor);
        if(status.equalsIgnoreCase("failure")) {
           System.out.println("Failure -: Virtual Machine cannot be cloned");
        }
                
        if(status.equalsIgnoreCase("sucess")) {
           System.out.println("Virtual Machine Cloned  successfully.");
        }
  }
 
  // add virtual NIC to vmkernel
  private void addNicToNetwork() throws Exception {
    ManagedObjectReference morHost = new ManagedObjectReference();
    morHost.setType("HostSystem");
    morHost.set_value("host-48");
   
        HostPortGroupSpec portgrp = new HostPortGroupSpec();
        portgrp.setName("VM Network vlan26");
   
        Object cmobj = cb.getServiceUtil3().getDynamicProperty(morHost, "configManager");
        HostConfigManager configMgr = (HostConfigManager)cmobj;
        ManagedObjectReference nwSystem = configMgr.getNetworkSystem();
       
        HostVirtualNicSpec vNicSpec = new HostVirtualNicSpec();
        HostIpConfig ipConfig = new HostIpConfig();
        ipConfig.setDhcp(false);
        ipConfig.setIpAddress("192.168.26.177");
        ipConfig.setSubnetMask("255.255.255.0");
       
        vNicSpec.setIp(ipConfig);
        vNicSpec.setPortgroup("VM Network vlan26");
       
        cb.getServiceConnection3().getService().addVirtualNic(nwSystem,
            "dvPortGroup-vlan26", vNicSpec);
  }
 
  private void createDatacenter() throws Exception {
    cb.getServiceConnection3().getService().createDatacenter(
      cb.getServiceConnection3().getRootFolder(),
      "cloud.dc.test");
  }
 
  private void getPropertyWithPath() throws Exception {
    ManagedObjectReference morHost = new ManagedObjectReference();
    morHost.setType("HostSystem");
    morHost.set_value("host-161");
   
    VirtualNicManagerNetConfig[] netConfigs = (VirtualNicManagerNetConfig[])cb.getServiceUtil3().getDynamicProperty(morHost, "config.virtualNicManagerInfo.netConfig");
  }
 
  private void getHostVMs() throws Exception {
    ManagedObjectReference morHost = new ManagedObjectReference();
    morHost.setType("HostSystem");
    morHost.set_value("host-48");
   
    PropertySpec pSpec = new PropertySpec();
    pSpec.setType("VirtualMachine");
    pSpec.setPathSet(new String[] { "name", "runtime.powerState", "config.template" });
   
      TraversalSpec host2VmTraversal = new TraversalSpec();
      host2VmTraversal.setType("HostSystem");
      host2VmTraversal.setPath("vm");
      host2VmTraversal.setName("host2VmTraversal");

      ObjectSpec oSpec = new ObjectSpec();
      oSpec.setObj(morHost);
      oSpec.setSkip(Boolean.TRUE);
      oSpec.setSelectSet(new SelectionSpec[] { host2VmTraversal });

      PropertyFilterSpec pfSpec = new PropertyFilterSpec();
      pfSpec.setPropSet(new PropertySpec[] { pSpec });
      pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
         
      ObjectContent[] ocs = cb.getServiceConnection3().getService().retrieveProperties(
            cb.getServiceConnection3().getServiceContent().getPropertyCollector(),
            new PropertyFilterSpec[] { pfSpec });
      this.printContent(ocs);
  }
 
  private void testFT() throws Exception {
   
    ManagedObjectReference morVm = new ManagedObjectReference();
    morVm.setType("VirtualMachine");
    morVm.set_value("vm-480");
   
    ManagedObjectReference morHost = new ManagedObjectReference();
    morHost.setType("HostSystem");
    morHost.set_value("host-470");

    System.out.println("Create secondary VM");
    ManagedObjectReference morTask = cb.getServiceConnection3().getService().createSecondaryVM_Task(morVm, morHost);
    String result = cb.getServiceUtil3().waitForTask(morTask);
   
    System.out.println("Create secondary VM resutl : " + result);
  }
 
  private void testFTEnable() throws Exception {
    ManagedObjectReference morVm = new ManagedObjectReference();
    morVm.setType("VirtualMachine");
    morVm.set_value("vm-480");
   
    ManagedObjectReference morHost = new ManagedObjectReference();
    morHost.setType("HostSystem");
    morHost.set_value("host-470");

    ManagedObjectReference morSecondaryVm = new ManagedObjectReference();
    morSecondaryVm.setType("VirtualMachine");
    morSecondaryVm.set_value("vm-485");
   
    System.out.println("Enable FT");
    ManagedObjectReference morTask = cb.getServiceConnection3().getService().enableSecondaryVM_Task(morVm,
      morSecondaryVm, morHost);
    String result = cb.getServiceUtil3().waitForTask(morTask);
   
    System.out.println("Enable FT resutl : " + result);
  }
 
  private void importOVF() throws Exception {
    ManagedObjectReference morHost = new ManagedObjectReference();
    morHost.setType("HostSystem");
    morHost.set_value("host-223");
   
    ManagedObjectReference morRp = new ManagedObjectReference();
    morRp.setType("ResourcePool");
    morRp.set_value("resgroup-222");
   
    ManagedObjectReference morDs = new ManagedObjectReference();
    morDs.setType("Datastore");
    morDs.set_value("datastore-30");
   
    ManagedObjectReference morVmFolder = new ManagedObjectReference();
    morVmFolder.setType("Folder");
    morVmFolder.set_value("group-v3");
   
    ManagedObjectReference morNetwork = new ManagedObjectReference();
    morNetwork.setType("Network");
    morNetwork.set_value("network-32");
   
    ManagedObjectReference morOvf = cb.getServiceConnection3().getServiceContent().getOvfManager();
   
    OvfCreateImportSpecParams importSpecParams = new OvfCreateImportSpecParams()
    importSpecParams.setHostSystem(morHost)
    importSpecParams.setLocale("US")
    importSpecParams.setEntityName("winxpsp3-ovf-deployed")
    importSpecParams.setDeploymentOption("");
    importSpecParams.setDiskProvisioning("thin");

/*   
    OvfNetworkMapping networkMapping = new OvfNetworkMapping(); 
    networkMapping.setName("VM Network"); 
    networkMapping.setNetwork(morNetwork); // network); 
    importSpecParams.setNetworkMapping(new OvfNetworkMapping[] { networkMapping });
*/   
    importSpecParams.setPropertyMapping(null);
   
    String ovfDescriptor = readOvfContent("C:\\research\\vmware\\winxpsp3-ovf\\winxpsp3-ovf.ovf");
    OvfCreateImportSpecResult ovfImportResult = cb.getServiceConnection3().getService().createImportSpec(
      morOvf, ovfDescriptor, morRp, morDs, importSpecParams);
   
    if(ovfImportResult != null) {
      long totalBytes = addTotalBytes(ovfImportResult);
     
      ManagedObjectReference morLease = cb.getServiceConnection3().getService().importVApp(morRp,
        ovfImportResult.getImportSpec(), morVmFolder, morHost);
     
      HttpNfcLeaseState state;
      for(;;) {
        state = (HttpNfcLeaseState)cb.getServiceUtil3().getDynamicProperty(morLease, "state");
        if(state == HttpNfcLeaseState.ready || state == HttpNfcLeaseState.error)
          break;
      }
     
      if(state == HttpNfcLeaseState.ready) {
        HttpNfcLeaseInfo httpNfcLeaseInfo = (HttpNfcLeaseInfo)cb.getServiceUtil3().getDynamicProperty(morLease, "info");
            HttpNfcLeaseDeviceUrl[] deviceUrls = httpNfcLeaseInfo.getDeviceUrl()
            long bytesAlreadyWritten = 0
            for (HttpNfcLeaseDeviceUrl deviceUrl : deviceUrls) {
             
              String deviceKey = deviceUrl.getImportKey()
              for (OvfFileItem ovfFileItem : ovfImportResult.getFileItem()) { 
                if (deviceKey.equals(ovfFileItem.getDeviceId())) { 
                  System.out.println("Import key==OvfFileItem device id: " + deviceKey);
                  System.out.println("device URL: " + deviceUrl.getUrl());
                 
                  String absoluteFile = "C:\\research\\vmware\\winxpsp3-ovf\\" + ovfFileItem.getPath();
                  String urlToPost = deviceUrl.getUrl().replace("*", "esxhost-1.lab.vmops.com")
                     
                    uploadVmdkFile(ovfFileItem.isCreate(), absoluteFile, urlToPost, bytesAlreadyWritten, totalBytes)
                    bytesAlreadyWritten += ovfFileItem.getSize()
                    System.out.println("Completed uploading the VMDK file:" + absoluteFile)
                
               } 
             }
             cb.getServiceConnection3().getService().httpNfcLeaseProgress(morLease, 100);
             cb.getServiceConnection3().getService().httpNfcLeaseComplete(morLease);
      }
    }
  }
 
   private static void uploadVmdkFile(boolean put, String diskFilePath, String urlStr, long bytesAlreadyWritten, long totalBytes) throws IOException
     HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { 
       public boolean verify(String urlHostName, SSLSession session) { 
         return true
      
     })

     HttpsURLConnection conn = (HttpsURLConnection) new URL(urlStr).openConnection();
    
     conn.setDoOutput(true)
     conn.setUseCaches(false);
    
     int CHUCK_LEN = 64*1024;
     conn.setChunkedStreamingMode(CHUCK_LEN)
     conn.setRequestMethod(put? "PUT" : "POST"); // Use a post method to write the file. 
     conn.setRequestProperty("Connection", "Keep-Alive")
     conn.setRequestProperty("Content-Type", "application/x-vnd.vmware-streamVmdk")
     conn.setRequestProperty("Content-Length", Long.toString(new File(diskFilePath).length()))
     BufferedOutputStream bos = new BufferedOutputStream(conn.getOutputStream())
     BufferedInputStream diskis = new BufferedInputStream(new FileInputStream(diskFilePath))
     int bytesAvailable = diskis.available()
     int bufferSize = Math.min(bytesAvailable, CHUCK_LEN)
     byte[] buffer = new byte[bufferSize]
     long totalBytesWritten = 0
     while (true) { 
       int bytesRead = diskis.read(buffer, 0, bufferSize)
       if (bytesRead == -1
       { 
         System.out.println("Total bytes written: " + totalBytesWritten)
         break
      
       totalBytesWritten += bytesRead; 
       bos.write(buffer, 0, bufferSize)
       bos.flush()
       System.out.println("Total bytes written: " + totalBytesWritten);
      
/*      
      int progressPercent = (int) (((bytesAlreadyWritten + totalBytesWritten) * 100) / totalBytes); 
         leaseUpdater.setPercent(progressPercent); 
*/       
    }
     diskis.close()
     bos.flush()
     bos.close()
     conn.disconnect()
  }
 
  public static long addTotalBytes(OvfCreateImportSpecResult ovfImportResult) { 
    OvfFileItem[] fileItemArr = ovfImportResult.getFileItem()
    long totalBytes = 0
    if (fileItemArr != null) { 
      for (OvfFileItem fi : fileItemArr) { 
        printOvfFileItem(fi)
        totalBytes += fi.getSize()
     
    } 
    return totalBytes; 
  }
 
  private static void printOvfFileItem(OvfFileItem fi) { 
    System.out.println("================ OvfFileItem ================")
    System.out.println("chunkSize: " + fi.getChunkSize())
    System.out.println("create: " + fi.isCreate())
    System.out.println("deviceId: " + fi.getDeviceId())
    System.out.println("path: " + fi.getPath())
    System.out.println("size: " + fi.getSize())
    System.out.println("==============================================")
 
 
  public static String readOvfContent(String ovfFilePath) throws IOException  
    StringBuffer strContent = new StringBuffer()
    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(ovfFilePath)))
    String lineStr; 
    while ((lineStr = in.readLine()) != null) { 
      strContent.append(lineStr)
   

    in.close()
    return strContent.toString()
  }
 
  public static String escapeSpecialChars(String str)  { 
    str = str.replaceAll("<", "&lt;")
    return str.replaceAll(">", "&gt;"); // do not escape "&" -> "&amp;", "\"" -> "&quot;" 
 
 
  public static void main(String[] args) throws Exception {
    setupLog4j();
    TestVMWare client = new TestVMWare();
    
    // skip certificate check
    System.setProperty("axis.socketSecureFactory", "org.apache.axis.components.net.SunFakeTrustSocketFactory");
    
    String serviceUrl = "https://" + args[0] + "/sdk/vimService";
   
    try {
      String[] params = new String[] {"--url", serviceUrl, "--username", args[1], "--password", args[2] };
    
      cb = ExtendedAppUtil.initialize("Connect", params);
      cb.connect();
      System.out.println("Connection Succesful.");

      // client.listInventoryFolders();
      // client.listDataCenters();
      // client.powerOnVm();
      // client.createSnapshot();
      // client.registerTemplate();
      // client.createVmFromTemplate();
      // client.addNic();
      // client.addNicToNetwork();

      // client.createDatacenter();
      // client.getPropertyWithPath();
      // client.getHostVMs();
      // client.testFT();
      // client.testFTEnable();
     
      client.importOVF();
   
      cb.disConnect();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 
  public static class TrustAllManager implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {
   
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
      return null;
    }
   
    public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) {
      return true;
    }
   
    public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) {
      return true;
    }
   
    public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
          throws java.security.cert.CertificateException {
      return;
    }
    public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
          throws java.security.cert.CertificateException {
      return;
    }
  }
}
TOP

Related Classes of com.cloud.vmware.TestVMWare$TrustAllManager

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.