<div dir="ltr"><div><div><div><div><div><div><div><div>Team,<br><br></div>I have continued new LBaaS API testing with Tempest. Status at this point is:<br><br></div>1) POST operations work for loadbalancers, healthmonitors, listeners, pools and members<br>
<br></div>2) GET, POST, PUT, DELETE operations work for loadbalancers<br><br></div>3) The only exception to point 2 is DELETE when it is preceded by a PUT. This is how the bug can be replicated:<br><br></div>PUT /lbaas/loadbalancers/<loadbalancer-id><br>
</div>Request body: {"loadbalancer": {"name": "nuevo_miguelito"}}<br><br></div>DELETE /lbaas/loadbalancers/<loadbalancer-id><br></div>Response:<span class=""><span style="width:130px" class=""> Status Code</span><span class="">: </span><span class="">500 Internal Server Error<br>
</span></span>{<br><div><div><div><div>  "NeutronError": {<br>    "message": "Invalid state PENDING_UPDATE of loadbalancer resource a300e907-d5ae-49b3-a607-0ebdb8f7cf5b",<br>    "type": "StateInvalid",<br>
    "detail": ""<br>  }<br>}<br><br></div><div>From the neutron server log:<br><br>2014-07-31 23:56:44.979 14528 DEBUG routes.middleware [req-8176b763-0792-432c-8432-c0e0c8a645dc ] Matched DELETE /lbaas/loadbalancers/a300e907-d5ae-49b3-a607-0ebdb8f7cf5b __call__ /usr/local/lib/python2.7/dist-packages/routes/middleware.py:100<br>
2014-07-31 23:56:44.979 14528 DEBUG routes.middleware [req-8176b763-0792-432c-8432-c0e0c8a645dc ] Route path: '/lbaas/loadbalancers/:(id)', defaults: {'action': u'delete', 'controller': <wsgify at 139834119733328 wrapping <function resource at 0x7f2dab0ed938>>} __call__ /usr/local/lib/python2.7/dist-packages/routes/middleware.py:102<br>
2014-07-31 23:56:44.980 14528 DEBUG routes.middleware [req-8176b763-0792-432c-8432-c0e0c8a645dc ] Match dict: {'action': u'delete', 'controller': <wsgify at 139834119733328 wrapping <function resource at 0x7f2dab0ed938>>, 'id': u'a300e907-d5ae-49b3-a607-0ebdb8f7cf5b'} __call__ /usr/local/lib/python2.7/dist-packages/routes/middleware.py:103<br>
2014-07-31 23:56:45.005 14528 ERROR neutron.api.v2.resource [req-8176b763-0792-432c-8432-c0e0c8a645dc None] delete failed<br>2014-07-31 23:56:45.005 14528 TRACE neutron.api.v2.resource Traceback (most recent call last):<br>
2014-07-31 23:56:45.005 14528 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/api/v2/resource.py", line 87, in resource<br>2014-07-31 23:56:45.005 14528 TRACE neutron.api.v2.resource     result = method(request=request, **args)<br>
2014-07-31 23:56:45.005 14528 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/api/v2/base.py", line 475, in delete<br>2014-07-31 23:56:45.005 14528 TRACE neutron.api.v2.resource     obj_deleter(request.context, id, **kwargs)<br>
2014-07-31 23:56:45.005 14528 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/services/loadbalancer/plugin.py", line 496, in delete_loadbalancer<br>2014-07-31 23:56:45.005 14528 TRACE neutron.api.v2.resource     constants.PENDING_DELETE)<br>
2014-07-31 23:56:45.005 14528 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/db/loadbalancer/loadbalancer_dbv2.py", line 434, in test_and_set_status<br>2014-07-31 23:56:45.005 14528 TRACE neutron.api.v2.resource     self.assert_modification_allowed(model_db)<br>
2014-07-31 23:56:45.005 14528 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/db/loadbalancer/loadbalancer_dbv2.py", line 429, in assert_modification_allowed<br>2014-07-31 23:56:45.005 14528 TRACE neutron.api.v2.resource     raise loadbalancerv2.StateInvalid(id=id, state=status)<br>
2014-07-31 23:56:45.005 14528 TRACE neutron.api.v2.resource StateInvalid: Invalid state PENDING_UPDATE of loadbalancer resource a300e907-d5ae-49b3-a607-0ebdb8f7cf5b<br>2014-07-31 23:56:45.005 14528 TRACE neutron.api.v2.resource <br>
2014-07-31 23:56:45.006 14528 INFO neutron.wsgi [req-8176b763-0792-432c-8432-c0e0c8a645dc None] 72.191.21.124 - - [31/Jul/2014 23:56:45] "DELETE /v2.0/lbaas/loadbalancers/a300e907-d5ae-49b3-a607-0ebdb8f7cf5b HTTP/1.1" 500 394 0.029316<br>
<br></div><div>Cheers<br></div></div></div></div></div>