Reply to Message

View discussion in a popup

Replying to:
asdt
Contributor
Contributor

But when I try to run the below code i.e to extract VM data only, I get no errors while running it.In this code, I am only extracting VM data. But when I use a code in which I extract Host, VM and Datastore data, i get error.

    public class VMListing

    {

        static VimService service;

        protected ManagedObjectReference _svcRef;

        private UserSession _session;

        ServiceContent _sic;

        private void VMList(string url, string usid, string pwd, string dcName)

        {

            ManagedObjectReference _svcRef = new ManagedObjectReference();

            //Gets service contents

            _svcRef.type = "ServiceInstance";

            _svcRef.Value = "ServiceInstance";

            service = new VimService();

            service.Url = url;

            service.CookieContainer = new CookieContainer();

            _sic = service.RetrieveServiceContent(_svcRef);

            service.LoginCompleted += new LoginCompletedEventHandler(serviceLoginCompleted);

            _session = service.Login(_sic.sessionManager, usid, pwd, null);

            //ObjectContent[] ocs = null;

            //ocs = getDatacenters(service, _sic);

           // printObjectContent(ocs, "All DataCenters");

            BuildVMLists();

            Console.ReadKey();

        }

        private TraversalSpec buildTSpec()

        {

            TraversalSpec rpToRp = new TraversalSpec();

            rpToRp.type = "ResourcePool";

            rpToRp.path = "resourcePool";

            rpToRp.skip = false;

            rpToRp.name = "rpToRp";

            rpToRp.selectSet = new SelectionSpec[] { new SelectionSpec(), new SelectionSpec() };

            rpToRp.selectSet[0].name = "rpToRp";

            rpToRp.selectSet[1].name = "rpToVm";

            TraversalSpec rpToVm = new TraversalSpec();

            rpToVm.type = "ResourcePool";

            rpToVm.path = "vm";

            rpToVm.skip = false;

            rpToVm.name = "rpToVm";

            rpToVm.selectSet = new SelectionSpec[] { };

            TraversalSpec crToRp = new TraversalSpec();

            crToRp.type = "ComputeResource";

            crToRp.path = "resourcePool";

            crToRp.skip = false;

            crToRp.name = "crToRp";

            crToRp.selectSet = new SelectionSpec[] { rpToRp, new SelectionSpec() };

            crToRp.selectSet[1].name = "rpToVm";

            TraversalSpec crToH = new TraversalSpec();

            crToH.type = "ComputeResource";

            crToH.path = "host";

            crToH.skip = false;

            crToH.name = "crToH";

            crToH.selectSet = new SelectionSpec[] { };

            TraversalSpec dcToHf = new TraversalSpec();

            dcToHf.type = "Datacenter";

            dcToHf.path = "hostFolder";

            dcToHf.skip = false;

            dcToHf.name = "dcToHf";

            dcToHf.selectSet = new SelectionSpec[] { new SelectionSpec() };

            dcToHf.selectSet[0].name = "visitFolders";

            TraversalSpec dcToVmf = new TraversalSpec();

            dcToVmf.type = "Datacenter";

            dcToVmf.path = "vmFolder";

            dcToVmf.skip = false;

            dcToVmf.name = "dcToVmf";

            dcToVmf.selectSet = new SelectionSpec[] { new SelectionSpec() };

            dcToVmf.selectSet[0].name = "visitFolders";

            TraversalSpec HToVm = new TraversalSpec();

            HToVm.type = "HostSystem";

            HToVm.path = "vm";

            HToVm.skip = false;

            HToVm.name = "HToVm";

            HToVm.selectSet = new SelectionSpec[] { new SelectionSpec() };

            HToVm.selectSet[0].name = "visitFolders";

            TraversalSpec visitFolders = new TraversalSpec();

            visitFolders.type = "Folder";

            visitFolders.path = "childEntity";

            visitFolders.skip = false;

            visitFolders.name = "visitFolders";

            visitFolders.selectSet = new SelectionSpec[] { new SelectionSpec(), dcToHf, dcToVmf, crToH, crToRp, HToVm, rpToVm };

            visitFolders.selectSet[0].name = "visitFolders";

            return visitFolders;

        }

        private void BuildVMLists()

        {

            TraversalSpec tSpec = buildTSpec();

            //PropertySpec[] propSpecArray = new PropertySpec[] { new PropertySpec() };

            Vim25Api.PropertySpec propSpecArray = new Vim25Api.PropertySpec();

            propSpecArray.type = "VirtualMachine";

            //propSpecArray[0].all = true;

            //propSpecArray[0].allSpecified = true;

            

            propSpecArray.pathSet = new string[] { "name",

                                           "summary.config.guestFullName",

                                           "summary.config.guestId",

                                           "summary.config.memorySizeMB",

                                           "summary.config.numCpu",

                                           "summary.config.numVirtualDisks",

                                           "summary.config.uuid",

                                           "summary.config.vmPathName",

                                           "summary.runtime.powerState", 

               

                                           "guest.hostName",                                          

                                           "guest.ipAddress",

                                           "guest.toolsStatus",

                                           "guest.toolsVersion",

                                           "guest.net",

                                           "config.hardware.device"

                                           };

            PropertyFilterSpec spec = new PropertyFilterSpec();

            spec.propSet = new Vim25Api.PropertySpec[] { propSpecArray }; ;

            spec.objectSet = new ObjectSpec[] { new ObjectSpec() };

            spec.objectSet[0].obj = _sic.rootFolder;

            spec.objectSet[0].skip = false;

            spec.objectSet[0].selectSet = new SelectionSpec[] {tSpec} ;

            ObjectContent[] ocArray =

                service.RetrieveProperties(_sic.propertyCollector, new PropertyFilterSpec[]{ spec });

            foreach (ObjectContent oc in ocArray)

            {

                DynamicProperty[] pcArray = oc.propSet;

                foreach (DynamicProperty d in pcArray)

                {

                    Console.WriteLine(d.name);

                    Console.WriteLine(d.val);

                    Console.ReadKey();

                    /*

                    if (d.name.Equals("name"))

                    {

                        String n = (String)d.val;

                        //lstVM.Items.Add(n);

                        System.Console.WriteLine("VM name:" + n);

                        Console.ReadKey();

                     */

                   // }

                }

            }

        }

     

        public static Object[] getProperties(ManagedObjectReference moRef, String[] properties)

        {

            // PropertySpec specifies what properties to

            // retrieve and from type of Managed Object

            PropertySpec pSpec = new PropertySpec();

            pSpec.type = moRef.type;

            pSpec.pathSet = properties;

            // ObjectSpec specifies the starting object and

            // any TraversalSpecs used to specify other objects

            // for consideration

            ObjectSpec oSpec = new ObjectSpec();

            oSpec.obj = moRef;

            // PropertyFilterSpec is used to hold the ObjectSpec and

            // PropertySpec for the call

            PropertyFilterSpec pfSpec = new PropertyFilterSpec();

            pfSpec.propSet = new PropertySpec[] { pSpec };

            pfSpec.objectSet = new ObjectSpec[] {oSpec};

            ManagedObjectReference _svcRef1 = new ManagedObjectReference();

            _svcRef1.type = "ServiceInstance";

            _svcRef1.Value = "ServiceInstance";

            ServiceContent sic1 = service.RetrieveServiceContent(_svcRef1);

            ObjectContent[] ocs = new ObjectContent[20];

            ocs = service.RetrieveProperties(sic1.propertyCollector, new PropertyFilterSpec[] {pfSpec} );

            // Return value, one object for each property specified

            Object[] ret = new Object[properties.Length];

            if (ocs != null)

            {

                for (int i = 0; i < ocs.Length; ++i)

                {

                    ObjectContent oc = ocs[i];

                    DynamicProperty[] dps = oc.propSet;

                    if (dps != null)

                    {

                        for (int j = 0; j < dps.Length; ++j)

                        {

                            DynamicProperty dp = dps[j];

                            // find property path index

                            for (int p = 0; p < ret.Length; ++p)

                            {

                                if (properties[p].Equals(dp.name))

                                {

                                    ret[p] = dp.val;

                                }

                            }

                        }

                    }

                }

            }

            return ret;

        }

        public static void Main(String[] args)

        {

     

            VMListing Vmlst = new VMListing();

            Vmlst.VMList(args[0], args[1], args[2], args[3]);

        }

Reply
0 Kudos