Hi,
I am trying to list all VMs for a particular ESX server. I have written C code similare to "VI Perl SDK" method "Vim::find_entity_views(view_type => 'VirtualMachine');" (method in /usr/lib/perl5/5.8.8/VMware/VICommon.pm module......... attaching VIComman.pm with this thread) but code seems to be not working ... means not giving me expected reference to VirtualMachine Objects.
Following is the code snip that I am using :
...................................................................................................................................................................................................................................................................................
enum xsd__boolean skip = xsd__boolean__false_;
enum xsd__boolean all = xsd__boolean__true_;
resourcePoolTraversalSpec->name = "resourcePoolTraversalSpec";
resourcePoolTraversalSpec->type = "ResourcePool";
resourcePoolTraversalSpec->path = "resourcePool";
resourcePoolTraversalSpec->skip = &skip;
resourcePoolTraversalSpec->selectSet = (struct ns2__SelectionSpec *)malloc(2 * sizeof(struct ns2__SelectionSpec));
resourcePoolTraversalSpec->selectSet[0].name = resourcePoolTraversalSpec->name;
resourcePoolTraversalSpec->selectSet[0].dynamicType = resourcePoolTraversalSpec->dynamicType;
resourcePoolTraversalSpec->selectSet[0].__sizedynamicProperty = resourcePoolTraversalSpec->__sizedynamicProperty;
resourcePoolTraversalSpec->selectSet[0].dynamicProperty = resourcePoolTraversalSpec->dynamicProperty;
resourcePoolTraversalSpec->selectSet[1].name = resourcePoolVmTraversalSpec->name;
resourcePoolTraversalSpec->selectSet[1].dynamicType = resourcePoolVmTraversalSpec->dynamicType;
resourcePoolTraversalSpec->selectSet[1].__sizedynamicProperty = resourcePoolVmTraversalSpec->__sizedynamicProperty;
resourcePoolTraversalSpec->selectSet[1].dynamicProperty = resourcePoolVmTraversalSpec->dynamicProperty;
resourcePoolVmTraversalSpec->name = "resourcePoolVmTraversalSpec";
resourcePoolVmTraversalSpec->type = "ResourcePool";
resourcePoolVmTraversalSpec->path = "vm";
resourcePoolVmTraversalSpec->skip = &skip;
computeResourceRpTraversalSpec->name = "computeResourceRpTraversalSpec";
computeResourceRpTraversalSpec->type = "ComputeResource";
computeResourceRpTraversalSpec->path = "resourcePool";
computeResourceRpTraversalSpec->skip = &skip;
computeResourceRpTraversalSpec->selectSet = (struct ns2__SelectionSpec *)malloc(2 * sizeof(struct ns2__SelectionSpec));
computeResourceRpTraversalSpec->selectSet[0].name = resourcePoolTraversalSpec->name;
computeResourceRpTraversalSpec->selectSet[0].dynamicType = resourcePoolTraversalSpec->dynamicType;
computeResourceRpTraversalSpec->selectSet[0].__sizedynamicProperty = resourcePoolTraversalSpec->__sizedynamicProperty;
computeResourceRpTraversalSpec->selectSet[0].dynamicProperty = resourcePoolTraversalSpec->dynamicProperty;
computeResourceRpTraversalSpec->selectSet[1].name = resourcePoolVmTraversalSpec->name;
computeResourceRpTraversalSpec->selectSet[1].dynamicType = resourcePoolVmTraversalSpec->dynamicType;
computeResourceRpTraversalSpec->selectSet[1].__sizedynamicProperty = resourcePoolVmTraversalSpec->__sizedynamicProperty;
computeResourceRpTraversalSpec->selectSet[1].dynamicProperty = resourcePoolVmTraversalSpec->dynamicProperty;
computeResourceHostTraversalSpec->name = "computeResourceHostTraversalSpec";
computeResourceHostTraversalSpec->type = "ComputeResource";
computeResourceHostTraversalSpec->path = "host";
computeResourceHostTraversalSpec->skip = &skip;
datacenterHostTraversalSpec->name = "datacenterHostTraversalSpec";
datacenterHostTraversalSpec->type = "Datacenter";
datacenterHostTraversalSpec->path = "hostFolder";
datacenterHostTraversalSpec->skip = &skip;
datacenterHostTraversalSpec->selectSet = (struct ns2__SelectionSpec *)malloc(sizeof(struct ns2__SelectionSpec));
datacenterHostTraversalSpec->selectSet->name = folderTraversalSpec->name;
datacenterHostTraversalSpec->selectSet->dynamicType = folderTraversalSpec->dynamicType;
datacenterHostTraversalSpec->selectSet->__sizedynamicProperty = folderTraversalSpec->__sizedynamicProperty;
datacenterHostTraversalSpec->selectSet->dynamicProperty = folderTraversalSpec->dynamicProperty;
datacenterVmTraversalSpec->name = "datacenterVmTraversalSpec";
datacenterVmTraversalSpec->type = "Datacenter";
datacenterVmTraversalSpec->path = "vmFolder";
datacenterVmTraversalSpec->skip = &skip;
datacenterVmTraversalSpec->selectSet = (struct ns2__SelectionSpec *)malloc(sizeof(struct ns2__SelectionSpec));
datacenterVmTraversalSpec->selectSet->name = folderTraversalSpec->name;
datacenterVmTraversalSpec->selectSet->dynamicType = folderTraversalSpec->dynamicType;
datacenterVmTraversalSpec->selectSet->__sizedynamicProperty = folderTraversalSpec->__sizedynamicProperty;
datacenterVmTraversalSpec->selectSet->dynamicProperty = folderTraversalSpec->dynamicProperty;
hostVmTraversalSpec->name = "hostVmTraversalSpec";
hostVmTraversalSpec->type = "HostSystem";
hostVmTraversalSpec->path = "vm";
hostVmTraversalSpec->skip = &skip;
hostVmTraversalSpec->selectSet = (struct ns2__SelectionSpec *)malloc(sizeof(struct ns2__SelectionSpec));
hostVmTraversalSpec->selectSet->name = folderTraversalSpec->name;
hostVmTraversalSpec->selectSet->dynamicType = folderTraversalSpec->dynamicType;
hostVmTraversalSpec->selectSet->__sizedynamicProperty = folderTraversalSpec->__sizedynamicProperty;
hostVmTraversalSpec->selectSet->dynamicProperty = folderTraversalSpec->dynamicProperty;
folderTraversalSpec->name = "folderTraversalSpec";
folderTraversalSpec->type = "Folder";
folderTraversalSpec->path = "childEntity";
folderTraversalSpec->skip = &skip;
folderTraversalSpec->selectSet = (struct ns2__SelectionSpec *)malloc(7 * sizeof(struct ns2__SelectionSpec));
folderTraversalSpec->selectSet[0].name = folderTraversalSpec->name;
folderTraversalSpec->selectSet[0].dynamicType = folderTraversalSpec->dynamicType;
folderTraversalSpec->selectSet[0].__sizedynamicProperty = folderTraversalSpec->__sizedynamicProperty;
folderTraversalSpec->selectSet[0].dynamicProperty = folderTraversalSpec->dynamicProperty;
folderTraversalSpec->selectSet[1].name = datacenterHostTraversalSpec->name;
folderTraversalSpec->selectSet[1].dynamicType = datacenterHostTraversalSpec->dynamicType;
folderTraversalSpec->selectSet[1].__sizedynamicProperty = datacenterHostTraversalSpec->__sizedynamicProperty;
folderTraversalSpec->selectSet[1].dynamicProperty = datacenterHostTraversalSpec->dynamicProperty;
folderTraversalSpec->selectSet[2].name = datacenterVmTraversalSpec->name;
folderTraversalSpec->selectSet[2].dynamicType = datacenterVmTraversalSpec->dynamicType;
folderTraversalSpec->selectSet[2].__sizedynamicProperty = datacenterVmTraversalSpec->__sizedynamicProperty;
folderTraversalSpec->selectSet[2].dynamicProperty = datacenterVmTraversalSpec->dynamicProperty;
folderTraversalSpec->selectSet[3].name = computeResourceRpTraversalSpec->name;
folderTraversalSpec->selectSet[3].dynamicType = computeResourceRpTraversalSpec->dynamicType;
folderTraversalSpec->selectSet[3].__sizedynamicProperty = computeResourceRpTraversalSpec->__sizedynamicProperty;
folderTraversalSpec->selectSet[3].dynamicProperty = computeResourceRpTraversalSpec->dynamicProperty;
folderTraversalSpec->selectSet[4].name = computeResourceHostTraversalSpec->name;
folderTraversalSpec->selectSet[4].dynamicType = computeResourceHostTraversalSpec->dynamicType;
folderTraversalSpec->selectSet[4].__sizedynamicProperty = computeResourceHostTraversalSpec->__sizedynamicProperty;
folderTraversalSpec->selectSet[4].dynamicProperty = computeResourceHostTraversalSpec->dynamicProperty;
folderTraversalSpec->selectSet[5].name = hostVmTraversalSpec->name;
folderTraversalSpec->selectSet[5].dynamicType = hostVmTraversalSpec->dynamicType;
folderTraversalSpec->selectSet[5].__sizedynamicProperty = hostVmTraversalSpec->__sizedynamicProperty;
folderTraversalSpec->selectSet[5].dynamicProperty = hostVmTraversalSpec->dynamicProperty;
folderTraversalSpec->selectSet[6].name = resourcePoolVmTraversalSpec->name;
folderTraversalSpec->selectSet[6].dynamicType = resourcePoolVmTraversalSpec->dynamicType;
folderTraversalSpec->selectSet[6].__sizedynamicProperty = resourcePoolVmTraversalSpec->__sizedynamicProperty;
folderTraversalSpec->selectSet[6].dynamicProperty = resourcePoolVmTraversalSpec->dynamicProperty;
objSpec[0].skip = &skip;
objSpec[0].obj = sc->rootFolder;
objSpec[0].selectSet = (struct ns2__SelectionSpec *)malloc(8 * sizeof(struct ns2__SelectionSpec));
objSpec[0].selectSet[0].name = folderTraversalSpec->name;
objSpec[0].selectSet[0].dynamicType = folderTraversalSpec->dynamicType;
objSpec[0].selectSet[0].__sizedynamicProperty = folderTraversalSpec->__sizedynamicProperty;
objSpec[0].selectSet[0].dynamicProperty = folderTraversalSpec->dynamicProperty;
objSpec[0].selectSet[1].name = datacenterVmTraversalSpec->name;
objSpec[0].selectSet[1].dynamicType = datacenterVmTraversalSpec->dynamicType;
objSpec[0].selectSet[1].__sizedynamicProperty = datacenterVmTraversalSpec->__sizedynamicProperty;
objSpec[0].selectSet[1].dynamicProperty = datacenterVmTraversalSpec->dynamicProperty;
objSpec[0].selectSet[2].name = datacenterHostTraversalSpec->name;
objSpec[0].selectSet[2].dynamicType = datacenterHostTraversalSpec->dynamicType;
objSpec[0].selectSet[2].__sizedynamicProperty = datacenterHostTraversalSpec->__sizedynamicProperty;
objSpec[0].selectSet[2].dynamicProperty = datacenterHostTraversalSpec->dynamicProperty;
objSpec[0].selectSet[3].name = computeResourceHostTraversalSpec->name;
objSpec[0].selectSet[3].dynamicType = computeResourceHostTraversalSpec->dynamicType;
objSpec[0].selectSet[3].__sizedynamicProperty = computeResourceHostTraversalSpec->__sizedynamicProperty;
objSpec[0].selectSet[3].dynamicProperty = computeResourceHostTraversalSpec->dynamicProperty;
objSpec[0].selectSet[4].name = computeResourceRpTraversalSpec->name;
objSpec[0].selectSet[4].dynamicType = computeResourceRpTraversalSpec->dynamicType;
objSpec[0].selectSet[4].__sizedynamicProperty = computeResourceRpTraversalSpec->__sizedynamicProperty;
objSpec[0].selectSet[4].dynamicProperty = computeResourceRpTraversalSpec->dynamicProperty;
objSpec[0].selectSet[5].name = resourcePoolTraversalSpec->name;
objSpec[0].selectSet[5].dynamicType = resourcePoolTraversalSpec->dynamicType;
objSpec[0].selectSet[5].__sizedynamicProperty = resourcePoolTraversalSpec->__sizedynamicProperty;
objSpec[0].selectSet[5].dynamicProperty = resourcePoolTraversalSpec->dynamicProperty;
objSpec[0].selectSet[6].name = hostVmTraversalSpec->name;
objSpec[0].selectSet[6].dynamicType = hostVmTraversalSpec->dynamicType;
objSpec[0].selectSet[6].__sizedynamicProperty = hostVmTraversalSpec->__sizedynamicProperty;
objSpec[0].selectSet[6].dynamicProperty = hostVmTraversalSpec->dynamicProperty;
objSpec[0].selectSet[7].name = resourcePoolVmTraversalSpec->name;
objSpec[0].selectSet[7].dynamicType = resourcePoolVmTraversalSpec->dynamicType;
objSpec[0].selectSet[7].__sizedynamicProperty = resourcePoolVmTraversalSpec->__sizedynamicProperty;
objSpec[0].selectSet[7].dynamicProperty = resourcePoolVmTraversalSpec->dynamicProperty;
proSpec[0].type = "VirtualMachine";
proSpec[0].all = &all;
proFiltSpec[0].objectSet = objSpec;
proFiltSpec[0].__sizeobjectSet = MAX_OBJECT_SPEC;
proFiltSpec[0].propSet = proSpec;
proFiltSpec[0].__sizepropSet = MAX_PROPERTY_SPEC;
retProp._USCOREthis = sc->propertyCollector;
retProp.__sizespecSet = MAX_PROPERTY_FILTER_SPEC;
retProp.specSet = proFiltSpec;
if (SOAP_OK != soap_call___ns2__RetrieveProperties(soap, EndPoint, "", &retProp, &retPropResp))
{
if (soap->error) soap_print_fault(soap, stderr);
free(proFiltSpec);
free(objSpec);
free(proSpec);
return FALSE;
}
if (!retPropResp.returnval)
{
fprintf(stderr," ****** No Object found ********\n");
free(proFiltSpec);
free(objSpec);
free(proSpec);
return FALSE;
}
...................................................................................................................................................................................................................................................................................
Could anyone tell me what's wrong with the above code ??
Any body having the C code to find the list of VMs running on the Particular ESX ??
Does anyone have java or C# code similare to above C code snip ???
I was just googling and found your post.
I've had the same issues with TraversalSpec. The problem I'm seeing seems to be a type issue. I can't pass a TraversalSpec object to the ObjectSpec selectSet, only SelectionSpec. I've got similar Perl code passing TraversalSpec to the selectSet and it works fine. Unless someone else has a smooth way of doing it, I think you'll have to end up creating some custom soap functions and types to handle the case of the TraversalSpec.
Has anyone had any luck with this? Or found a smooth solution for getting a list of VMs or Hosts from Virtual Center without already knowing the Host(s)? Best I could come up with would be to just browse from the rootFolder collecting objects recursively. I'm working on trying out this approach as I type. But I don't like the extra overhead from all the http calls.
Just wanted to see if anyone else has found a solution to this issue. I'm sort of locked into using C for the project I'm working on, Java, C# and Perl are not available in the environment I'm creating these apps for.
R.
So for those who might still be looking, I solved this by switching to C++ with gSOAP. I was able to pass TraversalSpecs to the to the ObjectSpec selectSet vector. I've attached some working code for those who are curious. I also attached my Makefile. My project is on OS X Leopard, so no promises about other compiler handling of my setup. My sample also uses SSL so a heads up if you don't have openssl in your development environment.
I'll probably start diving further into handling the objects as I get more time. I figure I'll build a few View Classes similar to the Perl Toolkit views for wrapping the properties of objects requested during a Traversal.
(I could attached the cpp file, here's the 'vmware-test.cpp' file).
#include "soapVimBindingProxy.h"
#include "VimBinding.nsmap"
#include "soapH.h"
#include
using namespace std;
void sigpipe_handle(int x) { cout << "sigpipe " << x << endl; }
int main()
{
VimBinding vim;
ns1__ManagedObjectReference ManagedObjectRef;
ns1__RetrievePropertiesRequestType RetrievePropertiesReq;
ns1_RetrievePropertiesResponse RetrievePropertiesRes;
ns1__RetrieveServiceContentRequestType RetrieveServiceContentReq;
ns1_RetrieveServiceContentResponse RetrieveServiceContentRes;
ns1__ServiceContent *ServiceContent;
ns1__AboutInfo *AboutInfo;
ns1__LoginRequestType LoginReq;
ns1_LoginResponse LoginRes;
ns1__UserSession *UserSession;
ns1__TraversalSpec DataCenterVMTraversalSpec, FolderTraversalSpec;
ns1__SelectionSpec DataCenterVMTraversalSelectionSpec, FolderTraversalSelectionSpec;
ns1__PropertySpec PropertySpec;
ns1__ObjectSpec ObjectSpec;
ns1__PropertyFilterSpec PropertyFilterSpec;
ns1__DynamicProperty DynamicProperty;
bool xsd_true = 1;
bool xsd_false = 0;
int i = 0;
int j = 0;
xsd__string * name;
char* service_url = "https://xxxxxxx/sdk";
char* username = "xxxxxxx";
char* password = "xxxxxxx";
vim.endpoint = service_url;
soap_ssl_init();
if (soap_ssl_client_context(
vim.soap,
SOAP_SSL_NO_AUTHENTICATION,
NULL,
NULL,
NULL,
NULL,
NULL ))
{
cout << "SSL:";
soap_print_fault(vim.soap, stderr);
exit(1);
}
ManagedObjectRef.__item = "ServiceInstance";
ManagedObjectRef.type = new string("ServiceInstance");
RetrieveServiceContentReq._USCOREthis = &ManagedObjectRef;
if ( vim.__ns1__RetrieveServiceContent(&RetrieveServiceContentReq, &RetrieveServiceContentRes) == SOAP_OK )
{
cout << "RetrieveServiceContent - OK" << endl;
}
else
{
soap_print_fault(vim.soap,stderr);
exit(1);
}
ServiceContent = RetrieveServiceContentRes.returnval;
if (ServiceContent && ServiceContent->about)
{
AboutInfo = ServiceContent->about;
cout << "fullName: " << AboutInfo->fullName << endl;
}
if (ServiceContent && ServiceContent->sessionManager)
{
LoginReq._USCOREthis = ServiceContent->sessionManager;
LoginReq.userName = username;
LoginReq.password = password;
LoginReq.locale = NULL;
if( vim.__ns1__Login(&LoginReq, &LoginRes) == SOAP_OK )
{
UserSession = LoginRes.returnval;
cout << "Login Successful: " << UserSession->userName << endl;
cout << "Login Time: " << ctime(&UserSession->loginTime) << endl;
}
else
{
soap_print_fault(vim.soap, stderr);
}
FolderTraversalSelectionSpec.name = new string("FolderTraversalSpec");
DataCenterVMTraversalSelectionSpec.name = new string("DataCenterVMTraversalSpec");
DataCenterVMTraversalSpec.name = new string("DataCenterVMTraversalSpec");
DataCenterVMTraversalSpec.type = "Datacenter";
DataCenterVMTraversalSpec.path = "vmFolder";
DataCenterVMTraversalSpec.skip = &xsd_true;
FolderTraversalSpec.name = new string("FolderTraversalSpec");
FolderTraversalSpec.type = "Folder";
FolderTraversalSpec.path = "childEntity";
FolderTraversalSpec.skip = &xsd_true;
DataCenterVMTraversalSpec.selectSet.push_back(&FolderTraversalSelectionSpec);
FolderTraversalSpec.selectSet.push_back(&DataCenterVMTraversalSelectionSpec);
FolderTraversalSpec.selectSet.push_back(&FolderTraversalSelectionSpec);
PropertySpec.type = "VirtualMachine";
PropertySpec.all = &xsd_false;
PropertySpec.pathSet.push_back("name");
ObjectSpec.obj = ServiceContent->rootFolder;
ObjectSpec.skip = &xsd_true;
ObjectSpec.selectSet.push_back(&FolderTraversalSpec);
ObjectSpec.selectSet.push_back(&DataCenterVMTraversalSpec);
PropertyFilterSpec.propSet.push_back(&PropertySpec);
PropertyFilterSpec.objectSet.push_back(&ObjectSpec);
RetrievePropertiesReq._USCOREthis = ServiceContent->propertyCollector;
RetrievePropertiesReq.specSet.push_back(&PropertyFilterSpec);
if ( vim.__ns1__RetrieveProperties(&RetrievePropertiesReq, &RetrievePropertiesRes) == SOAP_OK )
{
cout << "Number of Objects " << RetrievePropertiesRes.returnval.size() << endl;
for (i=0; i < RetrievePropertiesRes.returnval.size(); i++)
{
cout << " Object Type: " << *RetrievePropertiesRes.returnval[i]->obj->type;
cout << " (" << RetrievePropertiesRes.returnval[i]->propSet.size() << " properties), ";
for (j=0; j < RetrievePropertiesRes.returnval[i]->propSet.size(); j++)
{
DynamicProperty = *RetrievePropertiesRes.returnval[i]->propSet[j];
if ( DynamicProperty.name == "name" )
{
name = (xsd__string *) DynamicProperty.val;
//cout << "Name = " << ((xsd__string *) DynamicProperty.val)->__item;
cout << "Name: " << name->__item;
}
}
cout << endl;
}
}
else
{
soap_print_fault(vim.soap, stderr);
}
}
delete FolderTraversalSelectionSpec.name;
delete DataCenterVMTraversalSelectionSpec.name;
delete FolderTraversalSpec.name;
delete DataCenterVMTraversalSpec.name;
delete ManagedObjectRef.type;
soap_done(vim.soap);
soap_end(vim.soap);
return 0;
}
g++ -DWITH_OPENSSL -DWITH_COOKIES -I/usr/include/glib-2.0/ -I /usr/lib/glib-2.0/include/ -I/usr/include/libxml2 -Wall -c vmware-test.cpp
vmware-test.cpp: In function ‘int main()’:
vmware-test.cpp:27: error: ‘ns1__ManagedObjectReference’ was not declared in this scope
vmware-test.cpp:27: error: expected `;' before ‘ManagedObjectRef’
vmware-test.cpp:29: error: ‘ns1__RetrievePropertiesRequestType’ was not declared in this scope
vmware-test.cpp:29: error: expected `;' before ‘RetrievePropertiesReq’
vmware-test.cpp:31: error: ‘_ns1__RetrievePropertiesResponse’ was not declared in this scope
vmware-test.cpp:31: error: expected `;' before ‘RetrievePropertiesRes’
vmware-test.cpp:33: error: ‘ns1__RetrieveServiceContentRequestType’ was not declared in this scope
vmware-test.cpp:33: error: expected `;' before ‘RetrieveServiceContentReq’
vmware-test.cpp:35: error: ‘_ns1__RetrieveServiceContentResponse’ was not declared in this scope
vmware-test.cpp:35: error: expected `;' before ‘RetrieveServiceContentRes’
vmware-test.cpp:37: error: ‘ns1__ServiceContent’ was not declared in this scope
vmware-test.cpp:37: error: ‘ServiceContent’ was not declared in this scope
vmware-test.cpp:39: error: ‘ns1__AboutInfo’ was not declared in this scope
vmware-test.cpp:39: error: ‘AboutInfo’ was not declared in this scope
vmware-test.cpp:41: error: ‘ns1__LoginRequestType’ was not declared in this scope
vmware-test.cpp:41: error: expected `;' before ‘LoginReq’
vmware-test.cpp:43: error: ‘_ns1__LoginResponse’ was not declared in this scope
vmware-test.cpp:43: error: expected `;' before ‘LoginRes’
vmware-test.cpp:45: error: ‘ns1__UserSession’ was not declared in this scope
vmware-test.cpp:45: error: ‘UserSession’ was not declared in this scope
vmware-test.cpp:49: error: ‘ns1__TraversalSpec’ was not declared in this scope
vmware-test.cpp:49: error: expected `;' before ‘DataCenterVMTraversalSpec’
vmware-test.cpp:51: error: ‘ns1__SelectionSpec’ was not declared in this scope
vmware-test.cpp:51: error: expected `;' before ‘DataCenterVMTraversalSelectionSpec’
vmware-test.cpp:53: error: ‘ns1__PropertySpec’ was not declared in this scope
vmware-test.cpp:53: error: expected `;' before ‘PropertySpec’
vmware-test.cpp:55: error: ‘ns1__ObjectSpec’ was not declared in this scope
vmware-test.cpp:55: error: expected `;' before ‘ObjectSpec’
vmware-test.cpp:57: error: ‘ns1__PropertyFilterSpec’ was not declared in this scope
vmware-test.cpp:57: error: expected `;' before ‘PropertyFilterSpec’
vmware-test.cpp:59: error: ‘ns1__DynamicProperty’ was not declared in this scope
vmware-test.cpp:59: error: expected `;' before ‘DynamicProperty’
vmware-test.cpp:121: error: ‘ManagedObjectRef’ was not declared in this scope
vmware-test.cpp:125: error: ‘RetrieveServiceContentReq’ was not declared in this scope
vmware-test.cpp:131: error: ‘class VimBinding’ has no member named ‘__ns1__RetrieveServiceContent’
vmware-test.cpp:131: error: ‘RetrieveServiceContentRes’ was not declared in this scope
vmware-test.cpp:153: error: ‘RetrieveServiceContentRes’ was not declared in this scope
vmware-test.cpp:177: error: ‘LoginReq’ was not declared in this scope
vmware-test.cpp:189: error: ‘class VimBinding’ has no member named ‘__ns1__Login’
vmware-test.cpp:189: error: ‘LoginRes’ was not declared in this scope
vmware-test.cpp:213: error: ‘FolderTraversalSelectionSpec’ was not declared in this scope
vmware-test.cpp:215: error: ‘DataCenterVMTraversalSelectionSpec’ was not declared in this scope
vmware-test.cpp:221: error: ‘DataCenterVMTraversalSpec’ was not declared in this scope
vmware-test.cpp:233: error: ‘FolderTraversalSpec’ was not declared in this scope
vmware-test.cpp:255: error: ‘PropertySpec’ was not declared in this scope
vmware-test.cpp:265: error: ‘ObjectSpec’ was not declared in this scope
vmware-test.cpp:279: error: ‘PropertyFilterSpec’ was not declared in this scope
vmware-test.cpp:289: error: ‘RetrievePropertiesReq’ was not declared in this scope
vmware-test.cpp:297: error: ‘class VimBinding’ has no member named ‘__ns1__RetrieveProperties’
vmware-test.cpp:297: error: ‘RetrievePropertiesRes’ was not declared in this scope
vmware-test.cpp:321: error: ‘DynamicProperty’ was not declared in this scope
vmware-test.cpp:371: error: ‘FolderTraversalSelectionSpec’ was not declared in this scope
vmware-test.cpp:373: error: ‘DataCenterVMTraversalSelectionSpec’ was not declared in this scope
vmware-test.cpp:375: error: ‘FolderTraversalSpec’ was not declared in this scope
vmware-test.cpp:377: error: ‘DataCenterVMTraversalSpec’ was not declared in this scope
make: *** http://vmware-test.o Error 1
g++ -DWITH_OPENSSL -DWITH_COOKIES -I/usr/include/glib-2.0/ -I /usr/lib/glib-2.0/include/ -I/usr/include/libxml2 -Wall -c soapC.cpp
g++ -DWITH_OPENSSL -DWITH_COOKIES -I/usr/include/glib-2.0/ -I /usr/lib/glib-2.0/include/ -I/usr/include/libxml2 -Wall -c vmware-test.cpp
vmware-test.cpp: In function ‘int main()’:
vmware-test.cpp:27: error: ‘ns1__ManagedObjectReference’ was not declared in this scope
vmware-test.cpp:27: error: expected `;' before ‘ManagedObjectRef’
vmware-test.cpp:29: error: ‘ns1__RetrievePropertiesRequestType’ was not declared in this scope
vmware-test.cpp:29: error: expected `;' before ‘RetrievePropertiesReq’
vmware-test.cpp:31: error: ‘_ns1__RetrievePropertiesResponse’ was not declared in this scope
vmware-test.cpp:31: error: expected `;' before ‘RetrievePropertiesRes’
vmware-test.cpp:33: error: ‘ns1__RetrieveServiceContentRequestType’ was not declared in this scope
vmware-test.cpp:33: error: expected `;' before ‘RetrieveServiceContentReq’
vmware-test.cpp:35: error: ‘_ns1__RetrieveServiceContentResponse’ was not declared in this scope
vmware-test.cpp:35: error: expected `;' before ‘RetrieveServiceContentRes’
vmware-test.cpp:37: error: ‘ns1__ServiceContent’ was not declared in this scope
vmware-test.cpp:37: error: ‘ServiceContent’ was not declared in this scope
vmware-test.cpp:39: error: ‘ns1__AboutInfo’ was not declared in this scope
vmware-test.cpp:39: error: ‘AboutInfo’ was not declared in this scope
vmware-test.cpp:41: error: ‘ns1__LoginRequestType’ was not declared in this scope
vmware-test.cpp:41: error: expected `;' before ‘LoginReq’
vmware-test.cpp:43: error: ‘_ns1__LoginResponse’ was not declared in this scope
vmware-test.cpp:43: error: expected `;' before ‘LoginRes’
vmware-test.cpp:45: error: ‘ns1__UserSession’ was not declared in this scope
vmware-test.cpp:45: error: ‘UserSession’ was not declared in this scope
vmware-test.cpp:49: error: ‘ns1__TraversalSpec’ was not declared in this scope
vmware-test.cpp:49: error: expected `;' before ‘DataCenterVMTraversalSpec’
vmware-test.cpp:51: error: ‘ns1__SelectionSpec’ was not declared in this scope
vmware-test.cpp:51: error: expected `;' before ‘DataCenterVMTraversalSelectionSpec’
vmware-test.cpp:53: error: ‘ns1__PropertySpec’ was not declared in this scope
vmware-test.cpp:53: error: expected `;' before ‘PropertySpec’
vmware-test.cpp:55: error: ‘ns1__ObjectSpec’ was not declared in this scope
vmware-test.cpp:55: error: expected `;' before ‘ObjectSpec’
vmware-test.cpp:57: error: ‘ns1__PropertyFilterSpec’ was not declared in this scope
vmware-test.cpp:57: error: expected `;' before ‘PropertyFilterSpec’
vmware-test.cpp:59: error: ‘ns1__DynamicProperty’ was not declared in this scope
vmware-test.cpp:59: error: expected `;' before ‘DynamicProperty’
vmware-test.cpp:121: error: ‘ManagedObjectRef’ was not declared in this scope
vmware-test.cpp:125: error: ‘RetrieveServiceContentReq’ was not declared in this scope
vmware-test.cpp:131: error: ‘class VimBinding’ has no member named ‘__ns1__RetrieveServiceContent’
vmware-test.cpp:131: error: ‘RetrieveServiceContentRes’ was not declared in this scope
vmware-test.cpp:153: error: ‘RetrieveServiceContentRes’ was not declared in this scope
vmware-test.cpp:177: error: ‘LoginReq’ was not declared in this scope
vmware-test.cpp:189: error: ‘class VimBinding’ has no member named ‘__ns1__Login’
vmware-test.cpp:189: error: ‘LoginRes’ was not declared in this scope
vmware-test.cpp:213: error: ‘FolderTraversalSelectionSpec’ was not declared in this scope
vmware-test.cpp:215: error: ‘DataCenterVMTraversalSelectionSpec’ was not declared in this scope
vmware-test.cpp:221: error: ‘DataCenterVMTraversalSpec’ was not declared in this scope
vmware-test.cpp:233: error: ‘FolderTraversalSpec’ was not declared in this scope
vmware-test.cpp:255: error: ‘PropertySpec’ was not declared in this scope
vmware-test.cpp:265: error: ‘ObjectSpec’ was not declared in this scope
vmware-test.cpp:279: error: ‘PropertyFilterSpec’ was not declared in this scope
vmware-test.cpp:289: error: ‘RetrievePropertiesReq’ was not declared in this scope
vmware-test.cpp:297: error: ‘class VimBinding’ has no member named ‘__ns1__RetrieveProperties’
vmware-test.cpp:297: error: ‘RetrievePropertiesRes’ was not declared in this scope
vmware-test.cpp:321: error: ‘DynamicProperty’ was not declared in this scope
vmware-test.cpp:371: error: ‘FolderTraversalSelectionSpec’ was not declared in this scope
vmware-test.cpp:373: error: ‘DataCenterVMTraversalSelectionSpec’ was not declared in this scope
vmware-test.cpp:375: error: ‘FolderTraversalSpec’ was not declared in this scope
vmware-test.cpp:377: error: ‘DataCenterVMTraversalSpec’ was not declared in this scope
make: *** http://vmware-test.o Error 1
hello,
I am not able to compile the given test program on my redhat linux 5.3 development machine. Pl see the compilation errors given below and let me know if there is any way i can get this to work. Also, I am interested in a C routine to list all ESX hosts added to vCenter 4.0 -if someone can provide me the same.
thanks
-kamal
-
It looks like you don't have your headers included or your gsoap compilation generated a different prefix than ns1.
I am kind of new to gSoap. Here is what i did to get this error:-
get vimService.wsdl and vim.wsdl from vmware's website. (note that vimservice.wsdl includes vim.wsdl)
wsdl2h -s vimService.wsdl
soapcopp2 vimService.h
make
If you there is a seperate procedure to build this sample application, pl let me know.
thanks
-kamal