HI,
I have test.c VMware VIX script in execution node which look for running vm and if there is no running vm then it start a fedora vm. the test.c: #include <stdio.h> #include <stdlib.h> #include "vix.h" #define CONNTYPE VIX_SERVICEPROVIDER_VMWARE_PLAYER #define HOSTNAME NULL #define HOSTPORT 0 #define USERNAME NULL #define PASSWORD NULL #define VM_NUMBER 4 int vmHandleIndex = 0; int runningVMCount = 0; VixHandle hostHandle = VIX_INVALID_HANDLE; char *runningVM[VM_NUMBER]; static void find_runningVM(VixHandle jobHandle,VixEventType ev,VixHandle moreEvInfo,void *cd) { VixError err = VIX_OK; char *loc = NULL; if (VIX_EVENTTYPE_FIND_ITEM != ev) { return; } if (runningVMCount < VM_NUMBER) { err = Vix_GetProperties(moreEvInfo,VIX_PROPERTY_FOUND_ITEM_LOCATION,&loc,VIX_PROPERTY_NONE); if (VIX_SUCCEEDED(err)) { runningVM[runningVMCount] = loc; runningVMCount++; } else { fprintf(stderr,"GetProperties failed (%s)\n",Vix_GetErrorText(err, NULL)); } } else { fprintf(stderr, "Warning: found too many virtual machines!\n"); } } int main(int argc, char **argv) { VixError err; VixHandle jobHandle = VIX_INVALID_HANDLE; VixHandle vmHandle = VIX_INVALID_HANDLE; int i; jobHandle = VixHost_Connect(VIX_API_VERSION,CONNTYPE,HOSTNAME,HOSTPORT,USERNAME,PASSWORD,0,VIX_INVALID_HANDLE,NULL,NULL); err = VixJob_Wait(jobHandle,VIX_PROPERTY_JOB_RESULT_HANDLE,&hostHandle,VIX_PROPERTY_NONE); Vix_ReleaseHandle(jobHandle); if (VIX_FAILED(err)) { fprintf(stderr,"Failed to connect to host (%s)\n",Vix_GetErrorText(err, NULL)); goto abort; } printf("About to find running virtual machines\n"); jobHandle = VixHost_FindItems(hostHandle,VIX_FIND_RUNNING_VMS,VIX_INVALID_HANDLE, -1,find_runningVM,NULL); err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE); Vix_ReleaseHandle(jobHandle); if (VIX_FAILED(err)) { fprintf(stderr,"FindItems failed (%s)\n",Vix_GetErrorText(err, NULL)); goto abort; } printf("Listing running virtual machines\n"); printf("number of running virtual machine: %d\n", runningVMCount); for(i = 0; i < runningVMCount; ++i) { printf("%s\n",runningVM[i]); } if(runningVMCount > 0) { printf("can not start more virtual machine\n"); goto abort; } else { printf ("about to open \n"); jobHandle = VixVM_Open(hostHandle, "/home/condor/vmware/Fedora/Fedora.vmx",NULL,NULL); err = VixJob_Wait(jobHandle, VIX_PROPERTY_JOB_RESULT_HANDLE, &vmHandle, VIX_PROPERTY_NONE); Vix_ReleaseHandle(jobHandle); if (VIX_FAILED(err)) { fprintf(stderr, "failed to open virtual machine (%"FMT64"d %s)\n", err, Vix_GetErrorText(err, NULL)); goto abort; } printf ("opened (%d)\n", vmHandle); printf("powering on\n"); jobHandle = VixVM_PowerOn(vmHandle,VIX_VMPOWEROP_LAUNCH_GUI,VIX_INVALID_HANDLE,NULL,NULL); err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE); Vix_ReleaseHandle(jobHandle); if (VIX_FAILED(err)) { fprintf(stderr, "failed to power on virtual machine (%"FMT64"d %s)\n", err, Vix_GetErrorText(err, NULL)); goto abort; } printf("powered on\n"); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// abort: VixHost_Disconnect(hostHandle); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } to compile I use a make file: WRAPPER = -lvixAllProducts -ldl SERVER11 = /usr/lib/vmware-vix/lib/server-1/32bit/libvix.so WORKST60 = /usr/lib/vmware-vix/lib/ws-3/32bit/libvix.so SERVER20 = /usr/lib/vmware-vix/lib/VIServer-2.0.0/32bit/libvix.so WORKST65 = /usr/lib/vmware-vix/lib/Workstation-6.5.0/32bit/libvix.so WRAPORNOT = $(WRAPPER) VIXH = -I/usr/include/vmware-vix all:test test: test.c gcc $(VIXH) test.c -o test $(WRAPORNOT) clean: rm -f test when run on terminal it gives the following output and starts the vm: [condor@aopcach experiment]$ ./test About to find running virtual machines Listing running virtual machines number of running virtual machine: 0 about to open opened (34603069) powering on powered on [condor@aopcach experiment]$ when executed with condor using the following submit file: Universe = vanilla transfer_executable = false Executable = /home/condor/experiment/test Log = simple2.log Output = simple2.out Error = simple2.error Requirements = (Machine == "aopcach.uab.es") run_as_owner = true copy_to_spool = false Queue it gives the following output without starting the vm. here submit node and execute node is same: [condor@aopcach ~]$ cat simple2.out About to find running virtual machines Listing running virtual machines number of running virtual machine: 0 about to open opened (35651645) powering on [condor@aopcach ~]$ if I use the following submit file then the job keeps running for indefinite time: Universe = vanilla transfer_executable = false Executable = /home/condor/experiment/test Log = simple2.log Output = simple2.out Error = simple2.error Requirements = (Machine == "aopcach.uab.es") run_as_owner = true copy_to_spool = false should_transfer_files = YES when_to_transfer_output = ON_EXIT Queue with simple C program, everything runs fine. But with VIX, I am facing the problems. -Arindam |