Hi again! Great cleanups! Some other stuff I didn't catch ... 19 +.. 20 + 21 + Copyright (c) 2010 Citrix Systems, Inc. 22 + Copyright 2010 OpenStack LLC. That newline (line 20 in the diff) needs to be removed, otherwise the copyright notice is dumped into the doc output... The RST file could use a little cleanup, too, and I'll ask Anne Gentle to assist you on a future commit with those. :) 702 + FLAGS.vmwareapi_host_ip = 'test_url' 703 + FLAGS.vmwareapi_host_username = 'test_username' 704 + FLAGS.vmwareapi_host_password = 'test_pass' So, you are doing the above in the VMWareAPIVMTestCase.setUp() method. There is a subtle problem with that: it changes the value of those flags from their default value and does not reset the flag values to their default values after the tests complete. In other words, that makes the unit test have "side effects". While it's unlikely that other unit tests will need those flags, you may indeed add an additional unit test for VMWare stuff in the future, and you will rip your hair out trying to figure out the weirdness of why a FLAG value isn't what you expect. Believe me, I've been there! ;) The solution is to do the following, since your VMWareAPIVMTestCase class derives from nova.test.TestCase: def setUp(self): ... self.flags(vmwareapi_host_ip='test_url', vmwareapi_host_username='test_username', vmwareapi_host_password='test_pass') nova.test.TestCase.tearDown() automatically resets any changed flags back to their original values. 1151 + """VI Attribute Error.""" s/VI/VIM 1227 +A fake VMWare VI API implementation. s/VI/VIM 1259 + #We fake the datastore by keeping the file references as a list of 1260 + #names in the db 1617 + #Check if the remove is for a single file object or for a folder 1624 + #Removes the files in the folder and the folder too from the db 1850 + #This means that we are doing a search for the managed 1851 + #dataobects of the type in the inventory 1855 + #Create a temp Managed object which has the same ref 1856 + #as the parent object and copies just the properties 1857 + #asked for. We need .obj along with the propSet of 1858 + #just the properties asked for 1987 + #Meaning there are no networks on the host. suds responds with a "" 1988 + #in the parent property field rather than a [] in the 1989 + #ManagedObjectRefernce property field of the parent 2007 + #Get the list of vSwicthes on the Host System 2013 + #Meaning there are no vSwitches on the host. Shouldn't be the case, 2014 + #but just doing code check 2018 + #Get the vSwitch associated with the network adapter 2035 + #Meaning there are no physical nics on the host 2087 + #There can be a race condition when two instances try 2088 + #adding port groups at the same time. One succeeds, then 2089 + #the other one will get an exception. Since we are 2090 + #concerned with the port group being created, which is done 2091 + #by the other call, we can ignore the exception. 2480 + #For getting to hostFolder from datacnetr 2484 + #For getting to vmFolder from datacenter 2488 + #For getting Host System to virtual machine 2493 + #For getting to Host System from Compute Resource 2497 + #For getting to datastore from Compute Resource 2503 + #For getting to resource pool from Compute Resource 2508 + #For getting to child res pool from the parent res pool 2513 + #For getting to Virtual Machine from the Resource Pool 2518 + #Get the assorted traversal spec which takes care of the objects to 2519 + #be searched for from the root folder One space after # in all those comments, please :) 1851 + #dataobects of the type in the inventory s/dataobects/dataobjects 2283 +RESP_NOT_XML_ERROR = 'Response is "text/html", not "text/xml' Missing closing " on text/xml. Finally, unless I'm mistaken, you removed the io_util.py file, and you said you are using eventlet now, but I don't see where? The io_util.py file was good in that it created a thread for both the image reader and writer. All I was saying in the prior review was to use eventlet's queue/greenthreads classes instead. Did you remove the multi-threading entirely?