)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"90ac707ae581699937b2cde01d3ff139cb27ddf0","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Displays physical ids of VDUs, CPs and VLs of a VNF."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I469b91c1a000e7a47ae1d4313ed83de26e1391b2"},{"line_number":12,"context_line":"Closes-Bug: #1602112"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1aa78d24_a7244cb2","line":12,"range":{"start_line":12,"start_character":11,"end_line":12,"end_character":12},"updated":"2016-07-14 14:23:48.000000000","message":"add APIImpact to indicate it impacts API. thanks","commit_id":"8f1ed9365638bc7f4fd221fc0237a2d47e2e2b3f"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"2cc9bd9ac5e19085e293d478301efc3ce7102a2f","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Displays physical ids of VDUs, CPs and VLs of a VNF."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I469b91c1a000e7a47ae1d4313ed83de26e1391b2"},{"line_number":12,"context_line":"Closes-Bug: #1602112"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1aa78d24_924a0354","line":12,"range":{"start_line":12,"start_character":11,"end_line":12,"end_character":12},"in_reply_to":"1aa78d24_a7244cb2","updated":"2016-07-15 09:15:13.000000000","message":"Done","commit_id":"8f1ed9365638bc7f4fd221fc0237a2d47e2e2b3f"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"b3a55b611371717fb640eb0570e509ac5377b139","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Janki Chhatbar \u003cjchhatba@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-15 09:28:20 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Display VNF nodes id and type"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Displays physical id and type of VDUs, CPs and VLs of a VNF."},{"line_number":10,"context_line":"Functional test case is also included."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"fad55976_69c4d35e","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":7},"updated":"2016-07-16 08:20:06.000000000","message":"This is not a tackerclient patchset, so display is not the correct word. Perhaps something like this,\n\n\"Add VNF resource details to get vnf api\"\n\nBTW, are you planning to push an equivalent python-tackerclient patchset to display these additional details.","commit_id":"5ef189716888f5ee29e86672a46d12132bac4e57"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"155e0ff2c7a67754909906391ad7ee6dc48d8e29","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Janki Chhatbar \u003cjchhatba@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-15 09:28:20 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Display VNF nodes id and type"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Displays physical id and type of VDUs, CPs and VLs of a VNF."},{"line_number":10,"context_line":"Functional test case is also included."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"dada55a8_85f93a83","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":7},"in_reply_to":"fad55976_69c4d35e","updated":"2016-07-19 05:41:56.000000000","message":"Done.\n\nvnf_details, by default, will be displayed on client. No additional patch is required for that.","commit_id":"5ef189716888f5ee29e86672a46d12132bac4e57"}],"releasenotes/notes/Add-API-to-get-VNF-details-b38a225d0020b812.yaml":[{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"e265ea831c96d32fba356c4c1b8e5dc8e8045958","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"9ad45d7e_3f7a8088","updated":"2016-08-11 18:02:52.000000000","message":"nit: I\u0027d suggest using lowercase filename,\n\nadd-get-vnf-details-api-b38a225d0020b812.yaml","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"dc22b5f94b24d49efb9fc11574433b0f7f3bcfd7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"3ac371cc_c4184c87","in_reply_to":"9ad45d7e_3f7a8088","updated":"2016-08-16 09:22:22.000000000","message":"Done","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"}],"tacker/db/vm/vm_db.py":[{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"e265ea831c96d32fba356c4c1b8e5dc8e8045958","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                        id\u003dstr(uuid.uuid4()), device_id\u003ddevice_id,"},{"line_number":359,"context_line":"                        key\u003dkey, value\u003dvalue)"},{"line_number":360,"context_line":"                    context.session.add(arg)"},{"line_number":361,"context_line":"        return self._make_device_dict(device_db)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    # called internally, not by REST API"},{"line_number":364,"context_line":"    # intsance_id \u003d None means error on creation"}],"source_content_type":"text/x-python","patch_set":18,"id":"9ad45d7e_699e0aba","line":361,"updated":"2016-08-11 18:02:52.000000000","message":"avoid spurious changes please","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"dc22b5f94b24d49efb9fc11574433b0f7f3bcfd7","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                        id\u003dstr(uuid.uuid4()), device_id\u003ddevice_id,"},{"line_number":359,"context_line":"                        key\u003dkey, value\u003dvalue)"},{"line_number":360,"context_line":"                    context.session.add(arg)"},{"line_number":361,"context_line":"        return self._make_device_dict(device_db)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    # called internally, not by REST API"},{"line_number":364,"context_line":"    # intsance_id \u003d None means error on creation"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_473bbed1","line":361,"in_reply_to":"9ad45d7e_699e0aba","updated":"2016-08-16 09:22:22.000000000","message":"Done","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"}],"tacker/extensions/vnfm.py":[{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"b3a55b611371717fb640eb0570e509ac5377b139","unresolved":false,"context_lines":[{"line_number":301,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":302,"context_line":"            \u0027is_visible\u0027: True,"},{"line_number":303,"context_line":"        },"},{"line_number":304,"context_line":"        \"nodes_details\": {"},{"line_number":305,"context_line":"            \u0027allow_post\u0027: False,"},{"line_number":306,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":307,"context_line":"            \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fad55976_e69c705f","line":304,"range":{"start_line":304,"start_character":9,"end_line":304,"end_character":14},"updated":"2016-07-16 08:20:06.000000000","message":"\"nodes\" indicates this being too tied to TOSCA terminology. There were few ideas floating early for Tacker to support other template formats beyond TOSCA like YANG or event HOT. So, instead of \"node_details\" I\u0027d suggest to use \"vnf_resource_details\" or \"vnf_details\" (kind of similar to the recent \"event_details\" introduced for audit-event log spec).","commit_id":"5ef189716888f5ee29e86672a46d12132bac4e57"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"1d8f203366ee7d0c48afcebabd93634076b161c6","unresolved":false,"context_lines":[{"line_number":301,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":302,"context_line":"            \u0027is_visible\u0027: True,"},{"line_number":303,"context_line":"        },"},{"line_number":304,"context_line":"        \"nodes_details\": {"},{"line_number":305,"context_line":"            \u0027allow_post\u0027: False,"},{"line_number":306,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":307,"context_line":"            \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_6beed0ed","line":304,"range":{"start_line":304,"start_character":9,"end_line":304,"end_character":14},"in_reply_to":"fad55976_e69c705f","updated":"2016-07-18 05:29:31.000000000","message":"vnf_details are nice.","commit_id":"5ef189716888f5ee29e86672a46d12132bac4e57"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"e62d91f565c98a689d70c222649ceb5c7812f10c","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":304,"context_line":"            \u0027is_visible\u0027: True,"},{"line_number":305,"context_line":"        },"},{"line_number":306,"context_line":"        \"vnf_details\": {"},{"line_number":307,"context_line":"            \u0027allow_post\u0027: False,"},{"line_number":308,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":309,"context_line":"            \u0027is_visible\u0027: True,"},{"line_number":310,"context_line":"        },"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    },"},{"line_number":313,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":16,"id":"9ad45d7e_f1ab7cd4","line":310,"range":{"start_line":306,"start_character":8,"end_line":310,"end_character":9},"updated":"2016-08-09 19:56:24.000000000","message":"please see my comment in plugin file. this should be made a sub resource attribute instead of having it directly under \u0027vnf\u0027 resource. This attribute is not sent back for CREATE, LIST, UPDATE calls in VNF response body and sent only for GET, which breaks API signature conformation. If you introduce a new attribute in the VNF API, all CRUD methods are expected to handle that attribute to conform to the signature.","commit_id":"71d32dbcfb07dd4415a0afe1085bfa8754223f11"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"1151ce32456e76362741e79e99c5b342df125bbe","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        \u0027members\u0027: {"},{"line_number":348,"context_line":"            \u0027details\u0027: {"},{"line_number":349,"context_line":"                \u0027parameters\u0027: {"},{"line_number":350,"context_line":"                    \u0027vnf_details\u0027: {"},{"line_number":351,"context_line":"                        \u0027allow_post\u0027: False,"},{"line_number":352,"context_line":"                        \u0027allow_put\u0027: False,"},{"line_number":353,"context_line":"                        \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_b2abe01c","line":350,"range":{"start_line":350,"start_character":21,"end_line":350,"end_character":32},"updated":"2016-08-15 23:53:44.000000000","message":"this is already a sub resource of \u0027vnf\u0027, not sure if we need to explicitly call out as \u0027vnf_details\u0027. can this be \u0027resource_details\u0027 because only this information is provided back to the API layer and not the vnf details.","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"dc22b5f94b24d49efb9fc11574433b0f7f3bcfd7","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        \u0027members\u0027: {"},{"line_number":348,"context_line":"            \u0027details\u0027: {"},{"line_number":349,"context_line":"                \u0027parameters\u0027: {"},{"line_number":350,"context_line":"                    \u0027vnf_details\u0027: {"},{"line_number":351,"context_line":"                        \u0027allow_post\u0027: False,"},{"line_number":352,"context_line":"                        \u0027allow_put\u0027: False,"},{"line_number":353,"context_line":"                        \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_72c5d63a","line":350,"range":{"start_line":350,"start_character":21,"end_line":350,"end_character":32},"in_reply_to":"3ac371cc_b2abe01c","updated":"2016-08-16 09:22:22.000000000","message":"will change it to resource_details. The whole info about the VNF + details are being returned from the plugin.","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"eb347b874b10df70558e8fa89ad9f358b50b4ad9","unresolved":false,"context_lines":[{"line_number":345,"context_line":"            \u0027member_name\u0027: \u0027vnf\u0027"},{"line_number":346,"context_line":"        },"},{"line_number":347,"context_line":"        \u0027members\u0027: {"},{"line_number":348,"context_line":"            \u0027vnf_details\u0027: {"},{"line_number":349,"context_line":"                \u0027parameters\u0027: {"},{"line_number":350,"context_line":"                    \u0027resource_details\u0027: {"},{"line_number":351,"context_line":"                        \u0027allow_post\u0027: False,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_6b02520d","line":348,"range":{"start_line":348,"start_character":13,"end_line":348,"end_character":24},"updated":"2016-08-18 19:58:02.000000000","message":"\u0027detail\u0027 is the member","commit_id":"442e5ab16aa50d3d73269021289bbbb68e79c35c"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"930ce4dcb76b1280ebd459a9264f755a9f582e61","unresolved":false,"context_lines":[{"line_number":345,"context_line":"            \u0027member_name\u0027: \u0027vnf\u0027"},{"line_number":346,"context_line":"        },"},{"line_number":347,"context_line":"        \u0027members\u0027: {"},{"line_number":348,"context_line":"            \u0027vnf_details\u0027: {"},{"line_number":349,"context_line":"                \u0027parameters\u0027: {"},{"line_number":350,"context_line":"                    \u0027resource_details\u0027: {"},{"line_number":351,"context_line":"                        \u0027allow_post\u0027: False,"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_9048792f","line":348,"range":{"start_line":348,"start_character":13,"end_line":348,"end_character":24},"in_reply_to":"3ac371cc_6b02520d","updated":"2016-08-19 20:51:59.000000000","message":"Done","commit_id":"442e5ab16aa50d3d73269021289bbbb68e79c35c"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"eb347b874b10df70558e8fa89ad9f358b50b4ad9","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        \u0027members\u0027: {"},{"line_number":348,"context_line":"            \u0027vnf_details\u0027: {"},{"line_number":349,"context_line":"                \u0027parameters\u0027: {"},{"line_number":350,"context_line":"                    \u0027resource_details\u0027: {"},{"line_number":351,"context_line":"                        \u0027allow_post\u0027: False,"},{"line_number":352,"context_line":"                        \u0027allow_put\u0027: False,"},{"line_number":353,"context_line":"                        \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_0e564c06","line":350,"range":{"start_line":350,"start_character":21,"end_line":350,"end_character":37},"updated":"2016-08-18 19:58:02.000000000","message":"resources \n(realized details is repeated at collection, member and in parameter)","commit_id":"442e5ab16aa50d3d73269021289bbbb68e79c35c"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"930ce4dcb76b1280ebd459a9264f755a9f582e61","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        \u0027members\u0027: {"},{"line_number":348,"context_line":"            \u0027vnf_details\u0027: {"},{"line_number":349,"context_line":"                \u0027parameters\u0027: {"},{"line_number":350,"context_line":"                    \u0027resource_details\u0027: {"},{"line_number":351,"context_line":"                        \u0027allow_post\u0027: False,"},{"line_number":352,"context_line":"                        \u0027allow_put\u0027: False,"},{"line_number":353,"context_line":"                        \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_d052f1dc","line":350,"range":{"start_line":350,"start_character":21,"end_line":350,"end_character":37},"in_reply_to":"3ac371cc_0e564c06","updated":"2016-08-19 20:51:59.000000000","message":"Done","commit_id":"442e5ab16aa50d3d73269021289bbbb68e79c35c"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"7581b13070a2ce54ee9a859e7462c5f4decda4f0","unresolved":false,"context_lines":[{"line_number":359,"context_line":"            }"},{"line_number":360,"context_line":"        }"},{"line_number":361,"context_line":"    },"},{"line_number":362,"context_line":"    \u0027resources\u0027: {"},{"line_number":363,"context_line":"        \u0027parent\u0027: {"},{"line_number":364,"context_line":"            \u0027collection_name\u0027: \u0027vnfs\u0027,"},{"line_number":365,"context_line":"            \u0027member_name\u0027: \u0027vnf\u0027"},{"line_number":366,"context_line":"        },"},{"line_number":367,"context_line":"        \u0027members\u0027: {"},{"line_number":368,"context_line":"            \u0027resource\u0027: {"},{"line_number":369,"context_line":"                \u0027parameters\u0027: {"},{"line_number":370,"context_line":"                    \u0027name\u0027: {"},{"line_number":371,"context_line":"                        \u0027allow_post\u0027: False,"},{"line_number":372,"context_line":"                        \u0027allow_put\u0027: False,"},{"line_number":373,"context_line":"                        \u0027is_visible\u0027: True,"},{"line_number":374,"context_line":"                    },"},{"line_number":375,"context_line":"                    \u0027type\u0027: {"},{"line_number":376,"context_line":"                        \u0027allow_post\u0027: False,"},{"line_number":377,"context_line":"                        \u0027allow_put\u0027: False,"},{"line_number":378,"context_line":"                        \u0027is_visible\u0027: True,"},{"line_number":379,"context_line":"                    },"},{"line_number":380,"context_line":"                    \u0027id\u0027: {"},{"line_number":381,"context_line":"                        \u0027allow_post\u0027: False,"},{"line_number":382,"context_line":"                        \u0027allow_put\u0027: False,"},{"line_number":383,"context_line":"                        \u0027is_visible\u0027: True,"},{"line_number":384,"context_line":"                    },"},{"line_number":385,"context_line":"                    \u0027error_reason\u0027: {"},{"line_number":386,"context_line":"                        \u0027allow_post\u0027: False,"},{"line_number":387,"context_line":"                        \u0027allow_put\u0027: False,"},{"line_number":388,"context_line":"                        \u0027is_visible\u0027: True,"},{"line_number":389,"context_line":"                    },"},{"line_number":390,"context_line":"                }"},{"line_number":391,"context_line":"            }"},{"line_number":392,"context_line":"        }"},{"line_number":393,"context_line":"    }"},{"line_number":394,"context_line":"}"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1ac06dbe_b57bb1f3","line":392,"range":{"start_line":362,"start_character":1,"end_line":392,"end_character":9},"updated":"2016-08-25 14:46:02.000000000","message":"looks good","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"}],"tacker/tests/functional/vnfm/test_vnf.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"c86c79162f01520480b9193c776cf772cfd3068d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            self.assertEqual(vim_id, vnf_instance[\u0027vnf\u0027][\u0027vim_id\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get VNF node details"},{"line_number":57,"context_line":"        nodes_details \u003d self.client.show_vnf(vnf_id)[\u0027vnf\u0027][\u0027vnf_details\u0027]"},{"line_number":58,"context_line":"        self.assertTrue(nodes_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_646fdfc5","line":57,"range":{"start_line":57,"start_character":8,"end_line":57,"end_character":21},"updated":"2016-07-19 09:27:47.000000000","message":"nit:\nnodes_details -\u003e vnf_details","commit_id":"a94e2044f31c6e1a44be99c47dd11ca1d3ed7152"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"1151ce32456e76362741e79e99c5b342df125bbe","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get VNF node details"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.show_vnf(vnf_id)[\u0027vnf\u0027][\u0027vnf_details\u0027]"},{"line_number":58,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"},{"line_number":61,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_52854cab","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":36},"updated":"2016-08-15 23:53:44.000000000","message":"this is breaking the gate. you need to have separate test case for vnf_details","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"7cf2ca6327b993c6b54752d2265d297c85e5e2ce","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get VNF node details"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.show_vnf(vnf_id)[\u0027vnf\u0027][\u0027vnf_details\u0027]"},{"line_number":58,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"},{"line_number":61,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"9ad45d7e_ad8f5b73","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":36},"updated":"2016-08-12 00:23:09.000000000","message":"use assertIsNotNone instead.  Also assertIsInstance(dict)","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"dc22b5f94b24d49efb9fc11574433b0f7f3bcfd7","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get VNF node details"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.show_vnf(vnf_id)[\u0027vnf\u0027][\u0027vnf_details\u0027]"},{"line_number":58,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"},{"line_number":61,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_a43430fb","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":36},"in_reply_to":"3ac371cc_52854cab","updated":"2016-08-16 09:22:22.000000000","message":"This was as a separate test initially. This meant duplicating code to create and delete VNF. Addressing a comment on PS7, I had this combined with an existing test. Will make it separate.","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"e8410f2cb15da959a5b497988ee3bce20564a2cd","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get VNF node details"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.show_vnf(vnf_id)[\u0027vnf\u0027][\u0027vnf_details\u0027]"},{"line_number":58,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"},{"line_number":61,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_579ce8bf","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":36},"in_reply_to":"3ac371cc_a43430fb","updated":"2016-08-16 19:15:54.000000000","message":"okay, since vnf_details is a separate API call you can reuse the existing created vnfs and later pass the vnf id to fetch details and validate it. so you dont need to have a new test case for creation and deletion of VNFs","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"dc22b5f94b24d49efb9fc11574433b0f7f3bcfd7","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get VNF node details"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.show_vnf(vnf_id)[\u0027vnf\u0027][\u0027vnf_details\u0027]"},{"line_number":58,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"},{"line_number":61,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_043c24e1","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":36},"in_reply_to":"9ad45d7e_ad8f5b73","updated":"2016-08-16 09:22:22.000000000","message":"Done","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"4d77dc09173c6c87929bce9933b495f29b5bd0dd","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get vnf details"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":58,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"},{"line_number":61,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa7ab95a_f08c9781","line":58,"range":{"start_line":58,"start_character":35,"end_line":58,"end_character":36},"updated":"2016-08-31 10:26:06.000000000","message":"had better to verify the key {\u0027id\u0027, \u0027name\u0027, \u0027type\u0027} in it.\nthis is the API defined.","commit_id":"875842f9f3d813daa20f1e41592f84d4c07caa8f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"4fe96c84afef31aaebfe8f0e045300e060866197","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get vnf details"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":58,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"},{"line_number":61,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa7ab95a_c19263f6","line":58,"range":{"start_line":58,"start_character":35,"end_line":58,"end_character":36},"in_reply_to":"fa7ab95a_615b572f","updated":"2016-08-31 11:11:38.000000000","message":"Empty is not passing self.assertTrue, right?","commit_id":"875842f9f3d813daa20f1e41592f84d4c07caa8f"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"da85db6aae1ff020d344509357e706ecae9b3098","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get vnf details"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":58,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"},{"line_number":61,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a89bdaa_f95e12e8","line":58,"range":{"start_line":58,"start_character":35,"end_line":58,"end_character":36},"in_reply_to":"fa7ab95a_6178b490","updated":"2016-09-06 04:30:04.000000000","message":"@Janki - i think this is not a valid concern. Many our tests will fail if Heat functionality fails, which will anyway cause func test failure. So I\u0027d suggest we go ahead and assert for the contents of the vnf_details as well.","commit_id":"875842f9f3d813daa20f1e41592f84d4c07caa8f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"b3ab34d0332c336c60f615bac387814c817113be","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get vnf details"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":58,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"},{"line_number":61,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa7ab95a_f0c38555","line":58,"range":{"start_line":58,"start_character":35,"end_line":58,"end_character":36},"in_reply_to":"fa7ab95a_6178b490","updated":"2016-08-31 23:44:11.000000000","message":"if Active vnf still is able to return empty vnf_details, then self.assertTrue will probably fail, right?\n\nAnd is active vnf able to return empty vnf_details?","commit_id":"875842f9f3d813daa20f1e41592f84d4c07caa8f"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"30a423f2d5d08c73fe46355b9960b383f870153d","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get vnf details"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":58,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"},{"line_number":61,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa7ab95a_6178b490","line":58,"range":{"start_line":58,"start_character":35,"end_line":58,"end_character":36},"in_reply_to":"fa7ab95a_7c6780ea","updated":"2016-08-31 11:49:06.000000000","message":"we can get empty response when VNF is \"ACTIVE\" but heat-api is not available.","commit_id":"875842f9f3d813daa20f1e41592f84d4c07caa8f"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"1b7cc73332c57032874df0c4faaf5e3d6d739665","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get vnf details"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":58,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"},{"line_number":61,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa7ab95a_7c6780ea","line":58,"range":{"start_line":58,"start_character":35,"end_line":58,"end_character":36},"in_reply_to":"fa7ab95a_c19263f6","updated":"2016-08-31 11:16:11.000000000","message":"Agree with @gongsh, as we are asserting  \"ACTIVE\" already, anycase where we get empty resources when VNF status is \"ACTIVE\"?","commit_id":"875842f9f3d813daa20f1e41592f84d4c07caa8f"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"30a423f2d5d08c73fe46355b9960b383f870153d","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get vnf details"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":58,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"},{"line_number":61,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa7ab95a_5e99d11e","line":58,"range":{"start_line":58,"start_character":35,"end_line":58,"end_character":36},"in_reply_to":"fa7ab95a_c19263f6","updated":"2016-08-31 11:49:06.000000000","message":"yes, assertTrue is not passing vnf_details \u003d []. What would be appropriate here then? assertIsNotNone works fine with empty.\n\nplugin will return either [] or [{\u0027name\u0027,\u0027id\u0027, \u0027type\u0027}]","commit_id":"875842f9f3d813daa20f1e41592f84d4c07caa8f"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"6239773326e987ea534d81e0282ec322a7d7275e","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get vnf details"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":58,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Delete vnf_instance with vnf_id"},{"line_number":61,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa7ab95a_615b572f","line":58,"range":{"start_line":58,"start_character":35,"end_line":58,"end_character":36},"in_reply_to":"fa7ab95a_f08c9781","updated":"2016-08-31 11:01:12.000000000","message":"@gongysh, by verifying the keys, the test will fail if vnf_details is empty (plugin.py L609)","commit_id":"875842f9f3d813daa20f1e41592f84d4c07caa8f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"04bcab5374bf5ea668b746789badcbd3977b3aff","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Get vnf details when vnf is in active state"},{"line_number":57,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)[\u0027resources\u0027][0]"},{"line_number":58,"context_line":"        self.assertIsNotNone(vnf_details)"},{"line_number":59,"context_line":"        self.assertIn(\u0027name\u0027, vnf_details)"},{"line_number":60,"context_line":"        self.assertIn(\u0027id\u0027, vnf_details)"},{"line_number":61,"context_line":"        self.assertIn(\u0027type\u0027, vnf_details)"}],"source_content_type":"text/x-python","patch_set":30,"id":"9a89bdaa_ddf816c6","line":58,"range":{"start_line":58,"start_character":13,"end_line":58,"end_character":28},"updated":"2016-09-07 07:07:40.000000000","message":"no need of this line","commit_id":"9dd90ca0ce2cca8a28d15286944940927e256662"}],"tacker/tests/functional/vnfm/test_vnf_details.py":[{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"928b00945225eb7007b6cc959f0b6a3f78275618","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            vnf_name\u003d\u0027test_vnf_with_cirros_no_monitoring\u0027)"},{"line_number":72,"context_line":"        # Get VNF details"},{"line_number":73,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":74,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":75,"context_line":"        self._test_delete_vnf(vnf_id, vnfd_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ac06dbe_3b6326de","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":36},"updated":"2016-08-25 17:20:12.000000000","message":"And it is show_vnf_details.","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"176f4e68b3becd28c342280c5d63fd99020532c0","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        vnf_id, vnfd_id \u003d self._test_create_vnf("},{"line_number":71,"context_line":"            vnf_name\u003d\u0027test_vnf_with_cirros_no_monitoring\u0027)"},{"line_number":72,"context_line":"        # Get VNF details"},{"line_number":73,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":74,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":75,"context_line":"        self._test_delete_vnf(vnf_id, vnfd_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ac06dbe_43ba820b","line":74,"range":{"start_line":73,"start_character":0,"end_line":74,"end_character":36},"updated":"2016-08-25 15:51:07.000000000","message":"why can\u0027t you do this test at https://github.com/openstack/tacker/blob/master/tacker/tests/functional/vnfm/test_vnf.py#L55 because the functional tests are costly","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"5383e22cfbb0b4b08e575b2ba09659cca0f617d3","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            vnf_name\u003d\u0027test_vnf_with_cirros_no_monitoring\u0027)"},{"line_number":72,"context_line":"        # Get VNF details"},{"line_number":73,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":74,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":75,"context_line":"        self._test_delete_vnf(vnf_id, vnfd_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_88f874e7","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":36},"in_reply_to":"1ac06dbe_3b6326de","updated":"2016-08-26 12:50:19.000000000","message":"With changes in the API function [1], it is now list_vnf_resources.\n\n[1]. https://review.openstack.org/#/c/360197/","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"fcefc7a32a58efdabb458649040d50906ba58c38","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        vnf_id, vnfd_id \u003d self._test_create_vnf("},{"line_number":71,"context_line":"            vnf_name\u003d\u0027test_vnf_with_cirros_no_monitoring\u0027)"},{"line_number":72,"context_line":"        # Get VNF details"},{"line_number":73,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":74,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":75,"context_line":"        self._test_delete_vnf(vnf_id, vnfd_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ac06dbe_e4dd7443","line":74,"range":{"start_line":73,"start_character":0,"end_line":74,"end_character":36},"in_reply_to":"1ac06dbe_43ba820b","updated":"2016-08-25 16:57:22.000000000","message":"Doing this at the said location is breaking the gate as per Sripriya\u0027s comment on PS18.","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"5383e22cfbb0b4b08e575b2ba09659cca0f617d3","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        vnf_id, vnfd_id \u003d self._test_create_vnf("},{"line_number":71,"context_line":"            vnf_name\u003d\u0027test_vnf_with_cirros_no_monitoring\u0027)"},{"line_number":72,"context_line":"        # Get VNF details"},{"line_number":73,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":74,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":75,"context_line":"        self._test_delete_vnf(vnf_id, vnfd_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_e85580c6","line":74,"range":{"start_line":73,"start_character":0,"end_line":74,"end_character":36},"in_reply_to":"1ac06dbe_9b0cda3c","updated":"2016-08-26 12:50:19.000000000","message":"yes, missed that comment. will add it with test_vnf UT.","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"928b00945225eb7007b6cc959f0b6a3f78275618","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        vnf_id, vnfd_id \u003d self._test_create_vnf("},{"line_number":71,"context_line":"            vnf_name\u003d\u0027test_vnf_with_cirros_no_monitoring\u0027)"},{"line_number":72,"context_line":"        # Get VNF details"},{"line_number":73,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":74,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":75,"context_line":"        self._test_delete_vnf(vnf_id, vnfd_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ac06dbe_9b0cda3c","line":74,"range":{"start_line":73,"start_character":0,"end_line":74,"end_character":36},"in_reply_to":"1ac06dbe_e4dd7443","updated":"2016-08-25 17:20:12.000000000","message":"But sripriya again replied not to have new test case I guess.","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"b301dd97d4b16a8f90ce7d108192c92d9f75cb12","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            vnf_name\u003d\u0027test_vnf_with_cirros_no_monitoring\u0027)"},{"line_number":72,"context_line":"        # Get VNF details"},{"line_number":73,"context_line":"        vnf_details \u003d self.client.list_vnf_resources(vnf_id)"},{"line_number":74,"context_line":"        self.assertTrue(vnf_details)"},{"line_number":75,"context_line":"        self._test_delete_vnf(vnf_id, vnfd_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_dd822752","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":36},"in_reply_to":"fa7ab95a_88f874e7","updated":"2016-08-26 17:31:59.000000000","message":"got it","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"}],"tacker/tests/functional/vnfm/test_vnf_nodes_details.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"1d8f203366ee7d0c48afcebabd93634076b161c6","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class VnfTestNodesDetails(base.BaseTackerTest):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _test_create_vnf(self, vnf_name, vim_id\u003dNone):"},{"line_number":28,"context_line":"        data \u003d dict()"},{"line_number":29,"context_line":"        data[\u0027tosca\u0027] \u003d read_file(\u0027sample_cirros_vnf_no_monitoring.yaml\u0027)"},{"line_number":30,"context_line":"        vnfd_name \u003d \u0027sample_cirros_vnf_no_monitoring\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_8bc86476","line":27,"range":{"start_line":27,"start_character":8,"end_line":27,"end_character":24},"updated":"2016-07-18 05:29:31.000000000","message":"no need to duplicate this codes. I think we can just add this case into \nhttps://github.com/openstack/tacker/blob/master/tacker/tests/functional/vnfm/test_vnf.py","commit_id":"5ef189716888f5ee29e86672a46d12132bac4e57"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"1d8f203366ee7d0c48afcebabd93634076b161c6","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            vnf_name\u003d\u0027test_vnf_with_cirros_no_monitoring\u0027)"},{"line_number":73,"context_line":"        # Get VNF along with nodes id"},{"line_number":74,"context_line":"        nodes_details \u003d self.client.show_vnf(vnf_id)[\u0027vnf\u0027][\u0027nodes_details\u0027]"},{"line_number":75,"context_line":"        self.assertTrue(nodes_details)"},{"line_number":76,"context_line":"        self._test_delete_vnf(vnf_id, vnfd_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_0babd48a","line":75,"range":{"start_line":75,"start_character":13,"end_line":75,"end_character":23},"updated":"2016-07-18 05:29:31.000000000","message":"can we make sure what is in the detail? to just assertTrue is too simple.","commit_id":"5ef189716888f5ee29e86672a46d12132bac4e57"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"155e0ff2c7a67754909906391ad7ee6dc48d8e29","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            vnf_name\u003d\u0027test_vnf_with_cirros_no_monitoring\u0027)"},{"line_number":73,"context_line":"        # Get VNF along with nodes id"},{"line_number":74,"context_line":"        nodes_details \u003d self.client.show_vnf(vnf_id)[\u0027vnf\u0027][\u0027nodes_details\u0027]"},{"line_number":75,"context_line":"        self.assertTrue(nodes_details)"},{"line_number":76,"context_line":"        self._test_delete_vnf(vnf_id, vnfd_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_45ff4267","line":75,"range":{"start_line":75,"start_character":13,"end_line":75,"end_character":23},"in_reply_to":"dada55a8_0babd48a","updated":"2016-07-19 05:41:56.000000000","message":"with assertTrue, test will pass only is nodes_details is not empty. That is sufficient to check the functionality. I have tested this in case when nodes_details is empty and test fails. Also, nodes_details contents depends on the VNF and hence no other parameter could be hard-coded to check the conditions.","commit_id":"5ef189716888f5ee29e86672a46d12132bac4e57"}],"tacker/tests/unit/vm/test_plugin.py":[{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"536b0dc028d5fb96d5199cc7ae6f0d35b7f52ffa","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        result \u003d self.vnfm_plugin.create_vnf(self.context, vnf_obj)"},{"line_number":215,"context_line":"        resources \u003d self.vnfm_plugin.get_vnf_resources(self.context,"},{"line_number":216,"context_line":"                                                       result[\u0027id\u0027])"},{"line_number":217,"context_line":"        self.assertIsNotNone(resources)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def test_delete_vnf(self):"},{"line_number":220,"context_line":"        self._insert_dummy_device_template()"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ac06dbe_c3b792f3","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":39},"updated":"2016-08-25 15:56:02.000000000","message":"It will be nice to have some more assertions on resources","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"5383e22cfbb0b4b08e575b2ba09659cca0f617d3","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        result \u003d self.vnfm_plugin.create_vnf(self.context, vnf_obj)"},{"line_number":215,"context_line":"        resources \u003d self.vnfm_plugin.get_vnf_resources(self.context,"},{"line_number":216,"context_line":"                                                       result[\u0027id\u0027])"},{"line_number":217,"context_line":"        self.assertIsNotNone(resources)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def test_delete_vnf(self):"},{"line_number":220,"context_line":"        self._insert_dummy_device_template()"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_5e8386cc","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":39},"in_reply_to":"1ac06dbe_7bd0fe53","updated":"2016-08-26 12:50:19.000000000","message":"Its a list. So how about assertListEqual?","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"fcefc7a32a58efdabb458649040d50906ba58c38","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        result \u003d self.vnfm_plugin.create_vnf(self.context, vnf_obj)"},{"line_number":215,"context_line":"        resources \u003d self.vnfm_plugin.get_vnf_resources(self.context,"},{"line_number":216,"context_line":"                                                       result[\u0027id\u0027])"},{"line_number":217,"context_line":"        self.assertIsNotNone(resources)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def test_delete_vnf(self):"},{"line_number":220,"context_line":"        self._insert_dummy_device_template()"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ac06dbe_e45a9482","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":39},"in_reply_to":"1ac06dbe_c3b792f3","updated":"2016-08-25 16:57:22.000000000","message":"resources in every case will be dict {\u0027name\u0027: name, \u0027type\u0027: type, \u0027id\u0027: id, \u0027error_reason\u0027: reason} due to the logic implemented in plugin. It doesnot make much sense to have more assertions.","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"928b00945225eb7007b6cc959f0b6a3f78275618","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        result \u003d self.vnfm_plugin.create_vnf(self.context, vnf_obj)"},{"line_number":215,"context_line":"        resources \u003d self.vnfm_plugin.get_vnf_resources(self.context,"},{"line_number":216,"context_line":"                                                       result[\u0027id\u0027])"},{"line_number":217,"context_line":"        self.assertIsNotNone(resources)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def test_delete_vnf(self):"},{"line_number":220,"context_line":"        self._insert_dummy_device_template()"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ac06dbe_7bd0fe53","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":39},"in_reply_to":"1ac06dbe_e45a9482","updated":"2016-08-25 17:20:12.000000000","message":"it is not good to have assumptions in UTs. you can compare the resources with expected dict.","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"b301dd97d4b16a8f90ce7d108192c92d9f75cb12","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        result \u003d self.vnfm_plugin.create_vnf(self.context, vnf_obj)"},{"line_number":215,"context_line":"        resources \u003d self.vnfm_plugin.get_vnf_resources(self.context,"},{"line_number":216,"context_line":"                                                       result[\u0027id\u0027])"},{"line_number":217,"context_line":"        self.assertIsNotNone(resources)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def test_delete_vnf(self):"},{"line_number":220,"context_line":"        self._insert_dummy_device_template()"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_3df793f6","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":39},"in_reply_to":"fa7ab95a_5e8386cc","updated":"2016-08-26 17:31:59.000000000","message":"I mean to assert the contents","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"2b4991f317de675bf4083946de18950dbeed2fde","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class FakeDriverManager(mock.Mock):"},{"line_number":32,"context_line":"    def invoke(self, *args, **kwargs):"},{"line_number":33,"context_line":"        if \u0027create\u0027 in args:"},{"line_number":34,"context_line":"            return str(uuid.uuid4())"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"fa7ab95a_d129bc9c","line":32,"range":{"start_line":32,"start_character":8,"end_line":32,"end_character":15},"updated":"2016-09-02 14:56:22.000000000","message":"Add a condition for \u0027get_resource_info\u0027 and return a dict and assert for this dict in your unit test,","commit_id":"875842f9f3d813daa20f1e41592f84d4c07caa8f"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"1b7cc73332c57032874df0c4faaf5e3d6d739665","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        result \u003d self.vnfm_plugin.create_vnf(self.context, vnf_obj)"},{"line_number":215,"context_line":"        resources \u003d self.vnfm_plugin.get_vnf_resources(self.context,"},{"line_number":216,"context_line":"                                                       result[\u0027id\u0027])"},{"line_number":217,"context_line":"        self.assertIsNotNone(resources)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def test_delete_vnf(self):"},{"line_number":220,"context_line":"        self._insert_dummy_device_template()"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa7ab95a_9c92849e","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":39},"updated":"2016-08-31 11:16:11.000000000","message":"same comment for what we have in functional tests","commit_id":"875842f9f3d813daa20f1e41592f84d4c07caa8f"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"30a423f2d5d08c73fe46355b9960b383f870153d","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        result \u003d self.vnfm_plugin.create_vnf(self.context, vnf_obj)"},{"line_number":215,"context_line":"        resources \u003d self.vnfm_plugin.get_vnf_resources(self.context,"},{"line_number":216,"context_line":"                                                       result[\u0027id\u0027])"},{"line_number":217,"context_line":"        self.assertIsNotNone(resources)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def test_delete_vnf(self):"},{"line_number":220,"context_line":"        self._insert_dummy_device_template()"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa7ab95a_c14a6027","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":39},"in_reply_to":"fa7ab95a_9c92849e","updated":"2016-08-31 11:49:06.000000000","message":"I think here we are not asserting \"ACTIVE\" state anywhere. This is to address the empty resources too.","commit_id":"875842f9f3d813daa20f1e41592f84d4c07caa8f"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"b226f11cca911df3acd5eecd7389187015ddf4e4","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        result \u003d self.vnfm_plugin.create_vnf(self.context, vnf_obj)"},{"line_number":215,"context_line":"        resources \u003d self.vnfm_plugin.get_vnf_resources(self.context,"},{"line_number":216,"context_line":"                                                       result[\u0027id\u0027])"},{"line_number":217,"context_line":"        self.assertIsNotNone(resources)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def test_delete_vnf(self):"},{"line_number":220,"context_line":"        self._insert_dummy_device_template()"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa7ab95a_8e1b031c","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":39},"in_reply_to":"fa7ab95a_c14a6027","updated":"2016-09-01 01:22:23.000000000","message":"sorry I overlooked the code, but we can assert what exact value we want.","commit_id":"875842f9f3d813daa20f1e41592f84d4c07caa8f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"b3ab34d0332c336c60f615bac387814c817113be","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        result \u003d self.vnfm_plugin.create_vnf(self.context, vnf_obj)"},{"line_number":215,"context_line":"        resources \u003d self.vnfm_plugin.get_vnf_resources(self.context,"},{"line_number":216,"context_line":"                                                       result[\u0027id\u0027])"},{"line_number":217,"context_line":"        self.assertIsNotNone(resources)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def test_delete_vnf(self):"},{"line_number":220,"context_line":"        self._insert_dummy_device_template()"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa7ab95a_d003e1b6","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":39},"in_reply_to":"fa7ab95a_c14a6027","updated":"2016-08-31 23:44:11.000000000","message":"what do you mean by IsNotNone?\nyou should mock heat-api to return exact what we want.","commit_id":"875842f9f3d813daa20f1e41592f84d4c07caa8f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"04bcab5374bf5ea668b746789badcbd3977b3aff","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        active_vnf \u003d self._insert_dummy_device()"},{"line_number":225,"context_line":"        resources \u003d self.vnfm_plugin.get_vnf_resources(self.context,"},{"line_number":226,"context_line":"                                                       active_vnf[\u0027id\u0027])[0]"},{"line_number":227,"context_line":"        self.assertIsNotNone(resources)"},{"line_number":228,"context_line":"        self.assertIn(\u0027name\u0027, resources)"},{"line_number":229,"context_line":"        self.assertIn(\u0027type\u0027, resources)"},{"line_number":230,"context_line":"        self.assertIn(\u0027id\u0027, resources)"}],"source_content_type":"text/x-python","patch_set":30,"id":"9a89bdaa_fd479ab9","line":227,"range":{"start_line":227,"start_character":13,"end_line":227,"end_character":28},"updated":"2016-09-07 07:07:40.000000000","message":"no need for this","commit_id":"9dd90ca0ce2cca8a28d15286944940927e256662"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"04bcab5374bf5ea668b746789badcbd3977b3aff","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        self.assertIn(\u0027name\u0027, resources)"},{"line_number":229,"context_line":"        self.assertIn(\u0027type\u0027, resources)"},{"line_number":230,"context_line":"        self.assertIn(\u0027id\u0027, resources)"},{"line_number":231,"context_line":"        self._device_manager.invoke.assert_called_with(mock.ANY, mock.ANY,"},{"line_number":232,"context_line":"                                                       plugin\u003dmock.ANY,"},{"line_number":233,"context_line":"                                                       context\u003dmock.ANY,"},{"line_number":234,"context_line":"                                                       vnf_info\u003dmock.ANY,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9a89bdaa_9d384e3f","line":231,"range":{"start_line":231,"start_character":65,"end_line":231,"end_character":69},"updated":"2016-09-07 07:07:40.000000000","message":"which one is get_resource_info?","commit_id":"9dd90ca0ce2cca8a28d15286944940927e256662"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"04bcab5374bf5ea668b746789badcbd3977b3aff","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                                                       vnf_info\u003dmock.ANY,"},{"line_number":235,"context_line":"                                                       auth_attr\u003dmock.ANY)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def test_delete_vnf(self):"},{"line_number":238,"context_line":"        self._insert_dummy_device_template()"},{"line_number":239,"context_line":"        dummy_device_obj \u003d self._insert_dummy_device()"},{"line_number":240,"context_line":"        self.vnfm_plugin.delete_vnf(self.context, dummy_device_obj["}],"source_content_type":"text/x-python","patch_set":30,"id":"9a89bdaa_fd4cfac9","line":237,"range":{"start_line":237,"start_character":4,"end_line":237,"end_character":7},"updated":"2016-09-07 07:07:40.000000000","message":"add one case for heat API not available, thanks","commit_id":"9dd90ca0ce2cca8a28d15286944940927e256662"}],"tacker/vm/infra_drivers/abstract_driver.py":[{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"eb347b874b10df70558e8fa89ad9f358b50b4ad9","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    @abc.abstractmethod"},{"line_number":73,"context_line":"    def get_resource_info(self, plugin, context, vnf_info, auth_attr,"},{"line_number":74,"context_line":"                    region_name\u003dNone):"},{"line_number":75,"context_line":"        \u0027\u0027\u0027Fetches optional details of a VNF\u0027\u0027\u0027"},{"line_number":76,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_4e4a0429","line":75,"range":{"start_line":75,"start_character":9,"end_line":75,"end_character":47},"updated":"2016-08-18 19:58:02.000000000","message":"is this method optional?","commit_id":"442e5ab16aa50d3d73269021289bbbb68e79c35c"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"930ce4dcb76b1280ebd459a9264f755a9f582e61","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    @abc.abstractmethod"},{"line_number":73,"context_line":"    def get_resource_info(self, plugin, context, vnf_info, auth_attr,"},{"line_number":74,"context_line":"                    region_name\u003dNone):"},{"line_number":75,"context_line":"        \u0027\u0027\u0027Fetches optional details of a VNF\u0027\u0027\u0027"},{"line_number":76,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_5c60dd35","line":75,"range":{"start_line":75,"start_character":9,"end_line":75,"end_character":47},"in_reply_to":"3ac371cc_4e4a0429","updated":"2016-08-19 20:51:59.000000000","message":"Yes. This is optional. Called only with --show-details flag","commit_id":"442e5ab16aa50d3d73269021289bbbb68e79c35c"}],"tacker/vm/infra_drivers/heat/heat.py":[{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"128733294d5a32ddc112e7bb8b51e47478071b68","unresolved":false,"context_lines":[{"line_number":557,"context_line":"            raise vnfm.DeviceCreateWaitFailed(device_id\u003ddevice_id,"},{"line_number":558,"context_line":"                                              reason\u003derror_reason)"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"    def get_resource_list(self, plugin, context, stack_id, auth_attr,"},{"line_number":561,"context_line":"                    region_name\u003dNone):"},{"line_number":562,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":563,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_292266a3","line":560,"range":{"start_line":560,"start_character":21,"end_line":560,"end_character":25},"updated":"2016-07-12 16:29:56.000000000","message":"you return a dictionary, but the name of the method implies a list.  Maybe just change this to \"get_resource_mapping\"","commit_id":"87f4565a76f30d4499a6695c0313f256c85e19fc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"77d257f1783864f3c91591898b011cc7e26a942a","unresolved":false,"context_lines":[{"line_number":557,"context_line":"            raise vnfm.DeviceCreateWaitFailed(device_id\u003ddevice_id,"},{"line_number":558,"context_line":"                                              reason\u003derror_reason)"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"    def get_resource_list(self, plugin, context, stack_id, auth_attr,"},{"line_number":561,"context_line":"                    region_name\u003dNone):"},{"line_number":562,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":563,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_5113f064","line":560,"range":{"start_line":560,"start_character":21,"end_line":560,"end_character":25},"in_reply_to":"1aa78d24_292266a3","updated":"2016-07-13 10:47:59.000000000","message":"Done","commit_id":"87f4565a76f30d4499a6695c0313f256c85e19fc"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"128733294d5a32ddc112e7bb8b51e47478071b68","unresolved":false,"context_lines":[{"line_number":561,"context_line":"                    region_name\u003dNone):"},{"line_number":562,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":563,"context_line":"        try:"},{"line_number":564,"context_line":"            resource_id \u003d heatclient_.resource_list(stack_id)"},{"line_number":565,"context_line":"            details_dict \u003d {each.resource_name:"},{"line_number":566,"context_line":"                           {\"id\": each.physical_resource_id,"},{"line_number":567,"context_line":"                           \"type\": each.resource_type}"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_4e57f859","line":564,"range":{"start_line":564,"start_character":12,"end_line":564,"end_character":23},"updated":"2016-07-12 16:29:56.000000000","message":"seems like this should be \"resource_ids\" since it contains more than one","commit_id":"87f4565a76f30d4499a6695c0313f256c85e19fc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"77d257f1783864f3c91591898b011cc7e26a942a","unresolved":false,"context_lines":[{"line_number":561,"context_line":"                    region_name\u003dNone):"},{"line_number":562,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":563,"context_line":"        try:"},{"line_number":564,"context_line":"            resource_id \u003d heatclient_.resource_list(stack_id)"},{"line_number":565,"context_line":"            details_dict \u003d {each.resource_name:"},{"line_number":566,"context_line":"                           {\"id\": each.physical_resource_id,"},{"line_number":567,"context_line":"                           \"type\": each.resource_type}"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_f1049c18","line":564,"range":{"start_line":564,"start_character":12,"end_line":564,"end_character":23},"in_reply_to":"1aa78d24_4e57f859","updated":"2016-07-13 10:47:59.000000000","message":"Done","commit_id":"87f4565a76f30d4499a6695c0313f256c85e19fc"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"128733294d5a32ddc112e7bb8b51e47478071b68","unresolved":false,"context_lines":[{"line_number":565,"context_line":"            details_dict \u003d {each.resource_name:"},{"line_number":566,"context_line":"                           {\"id\": each.physical_resource_id,"},{"line_number":567,"context_line":"                           \"type\": each.resource_type}"},{"line_number":568,"context_line":"                           for each in resource_id}"},{"line_number":569,"context_line":"            return details_dict"},{"line_number":570,"context_line":"        except Exception:"},{"line_number":571,"context_line":"            LOG.error(_(\"Couldnot retrieve resource physical IDs.\"))"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_0e4b3088","line":568,"range":{"start_line":568,"start_character":31,"end_line":568,"end_character":35},"updated":"2016-07-12 16:29:56.000000000","message":"imo, using \"each\" as a name here is not indictive of the object being manipulated.  Maybe using something like \"resource\" would make the code more obvious.","commit_id":"87f4565a76f30d4499a6695c0313f256c85e19fc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"77d257f1783864f3c91591898b011cc7e26a942a","unresolved":false,"context_lines":[{"line_number":565,"context_line":"            details_dict \u003d {each.resource_name:"},{"line_number":566,"context_line":"                           {\"id\": each.physical_resource_id,"},{"line_number":567,"context_line":"                           \"type\": each.resource_type}"},{"line_number":568,"context_line":"                           for each in resource_id}"},{"line_number":569,"context_line":"            return details_dict"},{"line_number":570,"context_line":"        except Exception:"},{"line_number":571,"context_line":"            LOG.error(_(\"Couldnot retrieve resource physical IDs.\"))"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_0c04af12","line":568,"range":{"start_line":568,"start_character":31,"end_line":568,"end_character":35},"in_reply_to":"1aa78d24_0e4b3088","updated":"2016-07-13 10:47:59.000000000","message":"Done","commit_id":"87f4565a76f30d4499a6695c0313f256c85e19fc"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"b3a55b611371717fb640eb0570e509ac5377b139","unresolved":false,"context_lines":[{"line_number":557,"context_line":"            raise vnfm.DeviceCreateWaitFailed(device_id\u003ddevice_id,"},{"line_number":558,"context_line":"                                              reason\u003derror_reason)"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"    def get_nodes_mapping(self, plugin, context, stack_id, auth_attr,"},{"line_number":561,"context_line":"                    region_name\u003dNone):"},{"line_number":562,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":563,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fad55976_c6316c0d","line":560,"range":{"start_line":560,"start_character":12,"end_line":560,"end_character":17},"updated":"2016-07-16 08:20:06.000000000","message":"\"vnf_resource\" ?","commit_id":"5ef189716888f5ee29e86672a46d12132bac4e57"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"155e0ff2c7a67754909906391ad7ee6dc48d8e29","unresolved":false,"context_lines":[{"line_number":557,"context_line":"            raise vnfm.DeviceCreateWaitFailed(device_id\u003ddevice_id,"},{"line_number":558,"context_line":"                                              reason\u003derror_reason)"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"    def get_nodes_mapping(self, plugin, context, stack_id, auth_attr,"},{"line_number":561,"context_line":"                    region_name\u003dNone):"},{"line_number":562,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":563,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_c5c5f23c","line":560,"range":{"start_line":560,"start_character":12,"end_line":560,"end_character":17},"in_reply_to":"fad55976_c6316c0d","updated":"2016-07-19 05:41:56.000000000","message":"Done","commit_id":"5ef189716888f5ee29e86672a46d12132bac4e57"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"b3a55b611371717fb640eb0570e509ac5377b139","unresolved":false,"context_lines":[{"line_number":568,"context_line":"                           for resource in resources_ids}"},{"line_number":569,"context_line":"            return details_dict"},{"line_number":570,"context_line":"        except Exception:"},{"line_number":571,"context_line":"            LOG.error(_(\"Couldnot retrieve resource physical IDs.\"))"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"class HeatClient(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fad55976_e6b9107b","line":571,"range":{"start_line":571,"start_character":25,"end_line":571,"end_character":33},"updated":"2016-07-16 08:20:06.000000000","message":"nit: \"Could not\"","commit_id":"5ef189716888f5ee29e86672a46d12132bac4e57"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"155e0ff2c7a67754909906391ad7ee6dc48d8e29","unresolved":false,"context_lines":[{"line_number":568,"context_line":"                           for resource in resources_ids}"},{"line_number":569,"context_line":"            return details_dict"},{"line_number":570,"context_line":"        except Exception:"},{"line_number":571,"context_line":"            LOG.error(_(\"Couldnot retrieve resource physical IDs.\"))"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"class HeatClient(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_a5c0be2b","line":571,"range":{"start_line":571,"start_character":25,"end_line":571,"end_character":33},"in_reply_to":"fad55976_e6b9107b","updated":"2016-07-19 05:41:56.000000000","message":"Done","commit_id":"5ef189716888f5ee29e86672a46d12132bac4e57"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"2949a9ccd7ff4015d35a2675551678102fb1a9c6","unresolved":false,"context_lines":[{"line_number":602,"context_line":"                           for resource in resources_ids}"},{"line_number":603,"context_line":"            return details_dict"},{"line_number":604,"context_line":"        except Exception:"},{"line_number":605,"context_line":"            LOG.error(_(\"Could not retrieve resource physical IDs.\"))"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"class HeatClient(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"dada55a8_29ddc014","line":605,"range":{"start_line":605,"start_character":53,"end_line":605,"end_character":61},"updated":"2016-07-25 06:52:59.000000000","message":"failed to retrieve resource physical IDs -\u003e heat stack resource IDs and types.","commit_id":"6db71ba48bad5e39e6b425038ca8efdf8db43d67"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"e924f11a417db4bd5c50a331bfa1bba39b76ebc6","unresolved":false,"context_lines":[{"line_number":602,"context_line":"                           for resource in resources_ids}"},{"line_number":603,"context_line":"            return details_dict"},{"line_number":604,"context_line":"        except Exception:"},{"line_number":605,"context_line":"            LOG.error(_(\"Could not retrieve resource physical IDs.\"))"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"class HeatClient(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"dada55a8_2d99d0c4","line":605,"range":{"start_line":605,"start_character":53,"end_line":605,"end_character":61},"in_reply_to":"dada55a8_29ddc014","updated":"2016-07-27 08:23:04.000000000","message":"Done","commit_id":"6db71ba48bad5e39e6b425038ca8efdf8db43d67"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"5eb433af48c49a823ac1ab93a4e6affa9cc99366","unresolved":false,"context_lines":[{"line_number":852,"context_line":""},{"line_number":853,"context_line":"        return jsonutils.dumps(mgmt_ips)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"    def get_vnf_details(self, plugin, context, stack_id, auth_attr,"},{"line_number":856,"context_line":"                    region_name\u003dNone):"},{"line_number":857,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":858,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9ad45d7e_e9100cab","line":855,"updated":"2016-08-08 12:26:19.000000000","message":"is it ok \nto make as driver interface and \nchange stack_id to device_id or vnf_instance_id","commit_id":"1d1f3747a455205d78f82a59fc5997b0302a1e05"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"cc55b44f85a51daa2ed11dea970d86509d69e562","unresolved":false,"context_lines":[{"line_number":852,"context_line":""},{"line_number":853,"context_line":"        return jsonutils.dumps(mgmt_ips)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"    def get_vnf_details(self, plugin, context, stack_id, auth_attr,"},{"line_number":856,"context_line":"                    region_name\u003dNone):"},{"line_number":857,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":858,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9ad45d7e_3ffecd6b","line":855,"in_reply_to":"9ad45d7e_e9100cab","updated":"2016-08-08 14:09:02.000000000","message":"stack_id is used to reference the heat stack on which further operations would be done","commit_id":"1d1f3747a455205d78f82a59fc5997b0302a1e05"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"5eb433af48c49a823ac1ab93a4e6affa9cc99366","unresolved":false,"context_lines":[{"line_number":859,"context_line":"            resources_ids \u003d heatclient_.resource_list(stack_id)"},{"line_number":860,"context_line":"            details_dict \u003d {resource.resource_name:"},{"line_number":861,"context_line":"                           {\"id\": resource.physical_resource_id,"},{"line_number":862,"context_line":"                           \"type\": resource.resource_type}"},{"line_number":863,"context_line":"                           for resource in resources_ids}"},{"line_number":864,"context_line":"            return details_dict"},{"line_number":865,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9ad45d7e_894eb0bf","line":862,"updated":"2016-08-08 12:26:19.000000000","message":"is it ok to add the resoruce link, which helps to retrive the actual resource. otherwise, user should know some impl on the infra whether its heat, nova or something else and how to from that url to retrieve the resource.","commit_id":"1d1f3747a455205d78f82a59fc5997b0302a1e05"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"cc55b44f85a51daa2ed11dea970d86509d69e562","unresolved":false,"context_lines":[{"line_number":859,"context_line":"            resources_ids \u003d heatclient_.resource_list(stack_id)"},{"line_number":860,"context_line":"            details_dict \u003d {resource.resource_name:"},{"line_number":861,"context_line":"                           {\"id\": resource.physical_resource_id,"},{"line_number":862,"context_line":"                           \"type\": resource.resource_type}"},{"line_number":863,"context_line":"                           for resource in resources_ids}"},{"line_number":864,"context_line":"            return details_dict"},{"line_number":865,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9ad45d7e_3fb08ddd","line":862,"in_reply_to":"9ad45d7e_894eb0bf","updated":"2016-08-08 14:09:02.000000000","message":"To get these detials, user needs \"vnf-show\". These details are not accessible to user directly as an API. These details are fetched from heat.\n\nI hope this is what you meant.","commit_id":"1d1f3747a455205d78f82a59fc5997b0302a1e05"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"5eb433af48c49a823ac1ab93a4e6affa9cc99366","unresolved":false,"context_lines":[{"line_number":865,"context_line":"        except Exception:"},{"line_number":866,"context_line":"            LOG.error(_(\"Could not retrieve heat stack resource IDs and\""},{"line_number":867,"context_line":"                        \"  types. Please check Heat API service status.\"))"},{"line_number":868,"context_line":"            return \"VNF details could not be retrieved. Please check logs.\""},{"line_number":869,"context_line":""},{"line_number":870,"context_line":""},{"line_number":871,"context_line":"class HeatClient(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9ad45d7e_09e8007c","line":868,"range":{"start_line":868,"start_character":55,"end_line":868,"end_character":73},"updated":"2016-08-08 12:26:19.000000000","message":"kindly remove . as its not relavent to the user. i feel.","commit_id":"1d1f3747a455205d78f82a59fc5997b0302a1e05"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"2aae363e4cab321a9d32a176908b0613904b5af5","unresolved":false,"context_lines":[{"line_number":865,"context_line":"        except Exception:"},{"line_number":866,"context_line":"            LOG.error(_(\"Could not retrieve heat stack resource IDs and\""},{"line_number":867,"context_line":"                        \"  types. Please check Heat API service status.\"))"},{"line_number":868,"context_line":"            return \"VNF details could not be retrieved. Please check logs.\""},{"line_number":869,"context_line":""},{"line_number":870,"context_line":""},{"line_number":871,"context_line":"class HeatClient(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9ad45d7e_9c00a7ac","line":868,"range":{"start_line":868,"start_character":55,"end_line":868,"end_character":73},"in_reply_to":"9ad45d7e_09e8007c","updated":"2016-08-08 13:59:40.000000000","message":"+1","commit_id":"1d1f3747a455205d78f82a59fc5997b0302a1e05"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"cc55b44f85a51daa2ed11dea970d86509d69e562","unresolved":false,"context_lines":[{"line_number":865,"context_line":"        except Exception:"},{"line_number":866,"context_line":"            LOG.error(_(\"Could not retrieve heat stack resource IDs and\""},{"line_number":867,"context_line":"                        \"  types. Please check Heat API service status.\"))"},{"line_number":868,"context_line":"            return \"VNF details could not be retrieved. Please check logs.\""},{"line_number":869,"context_line":""},{"line_number":870,"context_line":""},{"line_number":871,"context_line":"class HeatClient(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9ad45d7e_bf1abd15","line":868,"range":{"start_line":868,"start_character":55,"end_line":868,"end_character":73},"in_reply_to":"9ad45d7e_9c00a7ac","updated":"2016-08-08 14:09:02.000000000","message":"This line gets printed on the client side as a result of vnf-show. Added this just if the user wants to find out why the details were not fetched.","commit_id":"1d1f3747a455205d78f82a59fc5997b0302a1e05"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"2aae363e4cab321a9d32a176908b0613904b5af5","unresolved":false,"context_lines":[{"line_number":914,"context_line":"    def resource_get(self, stack_id, rsc_name):"},{"line_number":915,"context_line":"        return self.heat.resources.get(stack_id, rsc_name)"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"    def resource_list(self, stack_id):"},{"line_number":918,"context_line":"        return self.resources.list(stack_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9ad45d7e_3cd1bbce","line":917,"range":{"start_line":917,"start_character":8,"end_line":917,"end_character":21},"updated":"2016-08-08 13:59:40.000000000","message":"why do we need this method, as we already have method for that at L907? And you can remove \"self.resources\" instance variable too.","commit_id":"1d1f3747a455205d78f82a59fc5997b0302a1e05"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"cc55b44f85a51daa2ed11dea970d86509d69e562","unresolved":false,"context_lines":[{"line_number":914,"context_line":"    def resource_get(self, stack_id, rsc_name):"},{"line_number":915,"context_line":"        return self.heat.resources.get(stack_id, rsc_name)"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"    def resource_list(self, stack_id):"},{"line_number":918,"context_line":"        return self.resources.list(stack_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9ad45d7e_7f72057e","line":917,"range":{"start_line":917,"start_character":8,"end_line":917,"end_character":21},"in_reply_to":"9ad45d7e_3cd1bbce","updated":"2016-08-08 14:09:02.000000000","message":"Method at L907 got added as recent patch merge. It wasn\u0027t there initially. Will remove it here.","commit_id":"1d1f3747a455205d78f82a59fc5997b0302a1e05"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"e62d91f565c98a689d70c222649ceb5c7812f10c","unresolved":false,"context_lines":[{"line_number":852,"context_line":""},{"line_number":853,"context_line":"        return jsonutils.dumps(mgmt_ips)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"    def get_vnf_details(self, plugin, context, stack_id, auth_attr,"},{"line_number":856,"context_line":"                    region_name\u003dNone):"},{"line_number":857,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":858,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":16,"id":"9ad45d7e_949caec1","line":855,"range":{"start_line":855,"start_character":8,"end_line":855,"end_character":23},"updated":"2016-08-09 19:56:24.000000000","message":"are we going to mandate infra drivers to implement this method? if yes, we should add this to abstract_device_driver?","commit_id":"71d32dbcfb07dd4415a0afe1085bfa8754223f11"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"1151ce32456e76362741e79e99c5b342df125bbe","unresolved":false,"context_lines":[{"line_number":852,"context_line":""},{"line_number":853,"context_line":"        return jsonutils.dumps(mgmt_ips)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"    def vnf_details(self, plugin, context, stack_id, auth_attr,"},{"line_number":856,"context_line":"                    region_name\u003dNone):"},{"line_number":857,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":858,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_f2639818","line":855,"range":{"start_line":855,"start_character":8,"end_line":855,"end_character":11},"updated":"2016-08-15 23:53:44.000000000","message":"get_resource_info","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"dc22b5f94b24d49efb9fc11574433b0f7f3bcfd7","unresolved":false,"context_lines":[{"line_number":852,"context_line":""},{"line_number":853,"context_line":"        return jsonutils.dumps(mgmt_ips)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"    def vnf_details(self, plugin, context, stack_id, auth_attr,"},{"line_number":856,"context_line":"                    region_name\u003dNone):"},{"line_number":857,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":858,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_2778422b","line":855,"range":{"start_line":855,"start_character":8,"end_line":855,"end_character":11},"in_reply_to":"3ac371cc_f2639818","updated":"2016-08-16 09:22:22.000000000","message":"Done","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"7cf2ca6327b993c6b54752d2265d297c85e5e2ce","unresolved":false,"context_lines":[{"line_number":865,"context_line":"        except Exception:"},{"line_number":866,"context_line":"            LOG.error(_(\"Could not retrieve heat stack resource IDs and\""},{"line_number":867,"context_line":"                        \"  types. Please check Heat API service status.\"))"},{"line_number":868,"context_line":"            return \"VNF details could not be retrieved.\""},{"line_number":869,"context_line":""},{"line_number":870,"context_line":""},{"line_number":871,"context_line":"class HeatClient(object):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9ad45d7e_4d497f30","line":868,"range":{"start_line":868,"start_character":11,"end_line":868,"end_character":56},"updated":"2016-08-12 00:23:09.000000000","message":"Do not return anything if there are no details.  It also gives a false positive for your unit test case. You can either return None or raise an exception.","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"dc22b5f94b24d49efb9fc11574433b0f7f3bcfd7","unresolved":false,"context_lines":[{"line_number":865,"context_line":"        except Exception:"},{"line_number":866,"context_line":"            LOG.error(_(\"Could not retrieve heat stack resource IDs and\""},{"line_number":867,"context_line":"                        \"  types. Please check Heat API service status.\"))"},{"line_number":868,"context_line":"            return \"VNF details could not be retrieved.\""},{"line_number":869,"context_line":""},{"line_number":870,"context_line":""},{"line_number":871,"context_line":"class HeatClient(object):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_c7884e25","line":868,"range":{"start_line":868,"start_character":11,"end_line":868,"end_character":56},"in_reply_to":"9ad45d7e_4d497f30","updated":"2016-08-16 09:22:22.000000000","message":"Done","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"eb347b874b10df70558e8fa89ad9f358b50b4ad9","unresolved":false,"context_lines":[{"line_number":866,"context_line":"        except Exception:"},{"line_number":867,"context_line":"            LOG.error(_(\"Could not retrieve heat stack resource IDs and\""},{"line_number":868,"context_line":"                        \"  types. Please check Heat API service status.\"))"},{"line_number":869,"context_line":"            return None"},{"line_number":870,"context_line":""},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"class HeatClient(object):"}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_017bbd7c","line":869,"range":{"start_line":869,"start_character":12,"end_line":869,"end_character":23},"updated":"2016-08-18 19:58:02.000000000","message":"not required","commit_id":"442e5ab16aa50d3d73269021289bbbb68e79c35c"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"930ce4dcb76b1280ebd459a9264f755a9f582e61","unresolved":false,"context_lines":[{"line_number":866,"context_line":"        except Exception:"},{"line_number":867,"context_line":"            LOG.error(_(\"Could not retrieve heat stack resource IDs and\""},{"line_number":868,"context_line":"                        \"  types. Please check Heat API service status.\"))"},{"line_number":869,"context_line":"            return None"},{"line_number":870,"context_line":""},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"class HeatClient(object):"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_70821d02","line":869,"range":{"start_line":869,"start_character":12,"end_line":869,"end_character":23},"in_reply_to":"3ac371cc_017bbd7c","updated":"2016-08-19 20:51:59.000000000","message":"Done","commit_id":"442e5ab16aa50d3d73269021289bbbb68e79c35c"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"729c2b93fb811bf48aa2f3e5cb5ab1b93287694d","unresolved":false,"context_lines":[{"line_number":853,"context_line":"        return jsonutils.dumps(mgmt_ips)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"    def get_resource_info(self, plugin, context, vnf_info, auth_attr,"},{"line_number":856,"context_line":"                    region_name\u003dNone):"},{"line_number":857,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":858,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":859,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_79c6624a","line":856,"range":{"start_line":856,"start_character":20,"end_line":856,"end_character":38},"updated":"2016-08-22 02:20:21.000000000","message":"nit: shouldn\u0027t this be aligned with \"self\"?  I wonder why pep8 didn\u0027t complain.","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"62ea2250c59fae7e06701ffb524cb08bceb9733b","unresolved":false,"context_lines":[{"line_number":853,"context_line":"        return jsonutils.dumps(mgmt_ips)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"    def get_resource_info(self, plugin, context, vnf_info, auth_attr,"},{"line_number":856,"context_line":"                    region_name\u003dNone):"},{"line_number":857,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":858,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":859,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_ac189585","line":856,"range":{"start_line":856,"start_character":20,"end_line":856,"end_character":38},"in_reply_to":"1ac06dbe_03e9bc80","updated":"2016-08-22 07:12:40.000000000","message":"I think Tim is talking about code alignment to something like this,\n\n    def get_resource_info(self, plugin, context, vnf_info, auth_attr,\n                          region_name\u003dNone):\n\n.. which, btw, I don\u0027t think pep8 mandates anything in this area [1]\n\n[1] http://legacy.python.org/dev/peps/pep-0008/#indentation","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"a3c3e39f7af6c1cbe15d05feadb4129395421ea1","unresolved":false,"context_lines":[{"line_number":853,"context_line":"        return jsonutils.dumps(mgmt_ips)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"    def get_resource_info(self, plugin, context, vnf_info, auth_attr,"},{"line_number":856,"context_line":"                    region_name\u003dNone):"},{"line_number":857,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":858,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":859,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_03e9bc80","line":856,"range":{"start_line":856,"start_character":20,"end_line":856,"end_character":38},"in_reply_to":"1ac06dbe_79c6624a","updated":"2016-08-22 05:15:51.000000000","message":"self is not needed.","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"7426155c571d950dd7d3aa33624c2ff9900a6be1","unresolved":false,"context_lines":[{"line_number":853,"context_line":"        return jsonutils.dumps(mgmt_ips)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"    def get_resource_info(self, plugin, context, vnf_info, auth_attr,"},{"line_number":856,"context_line":"                    region_name\u003dNone):"},{"line_number":857,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":858,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"},{"line_number":859,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_52b5382f","line":856,"range":{"start_line":856,"start_character":20,"end_line":856,"end_character":38},"in_reply_to":"1ac06dbe_ac189585","updated":"2016-08-22 07:35:12.000000000","message":"ohh, you are talking about indentation. Got it. Will do it.","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"7cfc3a0a89b7a6ee2d2536580b287bd66aaf32d4","unresolved":false,"context_lines":[{"line_number":852,"context_line":""},{"line_number":853,"context_line":"        return jsonutils.dumps(mgmt_ips)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"    def get_resource_info(self, plugin, context, vnf_info, auth_attr,"},{"line_number":856,"context_line":"                    region_name\u003dNone):"},{"line_number":857,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":858,"context_line":"        heatclient_ \u003d HeatClient(auth_attr, region_name)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1ac06dbe_511695f1","line":855,"range":{"start_line":855,"start_character":32,"end_line":855,"end_character":47},"updated":"2016-08-23 04:56:54.000000000","message":"unused","commit_id":"5741c57aca6ded408ab7400a24cce9a9d4ee95ab"}],"tacker/vm/plugin.py":[{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"128733294d5a32ddc112e7bb8b51e47478071b68","unresolved":false,"context_lines":[{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    def get_vnf(self, context, vnf_id, fields\u003dNone):"},{"line_number":430,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id, fields)"},{"line_number":431,"context_line":"        if fields \u003d\u003d []:"},{"line_number":432,"context_line":"            vnf_info[\u0027resource_ids\u0027] \u003d self.get_vnf_details(context, vnf_id,"},{"line_number":433,"context_line":"                                                            vnf_info)"},{"line_number":434,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_09d16a57","line":431,"range":{"start_line":431,"start_character":8,"end_line":431,"end_character":24},"updated":"2016-07-12 16:29:56.000000000","message":"what if requested field is \u0027resource_ids\u0027","commit_id":"87f4565a76f30d4499a6695c0313f256c85e19fc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"77d257f1783864f3c91591898b011cc7e26a942a","unresolved":false,"context_lines":[{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    def get_vnf(self, context, vnf_id, fields\u003dNone):"},{"line_number":430,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id, fields)"},{"line_number":431,"context_line":"        if fields \u003d\u003d []:"},{"line_number":432,"context_line":"            vnf_info[\u0027resource_ids\u0027] \u003d self.get_vnf_details(context, vnf_id,"},{"line_number":433,"context_line":"                                                            vnf_info)"},{"line_number":434,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_8c653fe2","line":431,"range":{"start_line":431,"start_character":8,"end_line":431,"end_character":24},"in_reply_to":"1aa78d24_09d16a57","updated":"2016-07-13 10:47:59.000000000","message":"Have tried to include this case. This means calling same function twice. Not sure if this a nice practice.","commit_id":"87f4565a76f30d4499a6695c0313f256c85e19fc"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"ba458423dba42e21294948b399dc4f130a424076","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":440,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":441,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":442,"context_line":"        return self._device_manager.invoke(\u0027heat\u0027, \u0027get_resourceid_mapping\u0027,"},{"line_number":443,"context_line":"                                           plugin\u003dself, context\u003dcontext,"},{"line_number":444,"context_line":"                                           stack_id\u003dstack_id,"},{"line_number":445,"context_line":"                                           auth_attr\u003dauth)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_ac047b49","line":442,"range":{"start_line":442,"start_character":42,"end_line":442,"end_character":44},"updated":"2016-07-13 11:03:42.000000000","message":"we should differentiate among infra_drivers.","commit_id":"aaccd9b526fec03e7bc62a4e5ba67e474fcefbbc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"216b9729d5073a49f15afcbb46e06714115449c5","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":440,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":441,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":442,"context_line":"        return self._device_manager.invoke(\u0027heat\u0027, \u0027get_resourceid_mapping\u0027,"},{"line_number":443,"context_line":"                                           plugin\u003dself, context\u003dcontext,"},{"line_number":444,"context_line":"                                           stack_id\u003dstack_id,"},{"line_number":445,"context_line":"                                           auth_attr\u003dauth)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_a96b9a1e","line":442,"range":{"start_line":442,"start_character":42,"end_line":442,"end_character":44},"in_reply_to":"1aa78d24_266535e0","updated":"2016-07-14 04:58:21.000000000","message":"Nice point Tim. This would also apply to \"resource_ids\" to be changed to \"nodes_id\" in the output. I will chnage it.","commit_id":"aaccd9b526fec03e7bc62a4e5ba67e474fcefbbc"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"1ac8b021e81b1a8b4d56313b50c3541fcb6c86e3","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":440,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":441,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":442,"context_line":"        return self._device_manager.invoke(\u0027heat\u0027, \u0027get_resourceid_mapping\u0027,"},{"line_number":443,"context_line":"                                           plugin\u003dself, context\u003dcontext,"},{"line_number":444,"context_line":"                                           stack_id\u003dstack_id,"},{"line_number":445,"context_line":"                                           auth_attr\u003dauth)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_86216dff","line":442,"range":{"start_line":442,"start_character":42,"end_line":442,"end_character":44},"in_reply_to":"1aa78d24_266535e0","updated":"2016-07-14 04:08:58.000000000","message":"cannot we get driver from vnf or vnfd definition?","commit_id":"aaccd9b526fec03e7bc62a4e5ba67e474fcefbbc"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"95498355415c8fa99d966e774f5357962bd750d6","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":440,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":441,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":442,"context_line":"        return self._device_manager.invoke(\u0027heat\u0027, \u0027get_resourceid_mapping\u0027,"},{"line_number":443,"context_line":"                                           plugin\u003dself, context\u003dcontext,"},{"line_number":444,"context_line":"                                           stack_id\u003dstack_id,"},{"line_number":445,"context_line":"                                           auth_attr\u003dauth)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_266535e0","line":442,"range":{"start_line":442,"start_character":42,"end_line":442,"end_character":44},"in_reply_to":"1aa78d24_83150d41","updated":"2016-07-13 16:12:35.000000000","message":"I think what gongysh is referring to is that the term \"resource\" is specific to heat, and we should use a function name that doesn\u0027t imply heat.  In the ETSI MANO spec, items like virtual links, conneciton points, vdus, are considered a type \"Element\".  Maybe we could use \"get_vnf_element_mapping\"?","commit_id":"aaccd9b526fec03e7bc62a4e5ba67e474fcefbbc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"216b9729d5073a49f15afcbb46e06714115449c5","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":440,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":441,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":442,"context_line":"        return self._device_manager.invoke(\u0027heat\u0027, \u0027get_resourceid_mapping\u0027,"},{"line_number":443,"context_line":"                                           plugin\u003dself, context\u003dcontext,"},{"line_number":444,"context_line":"                                           stack_id\u003dstack_id,"},{"line_number":445,"context_line":"                                           auth_attr\u003dauth)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_c91b86c9","line":442,"range":{"start_line":442,"start_character":42,"end_line":442,"end_character":44},"in_reply_to":"1aa78d24_86216dff","updated":"2016-07-14 04:58:21.000000000","message":"Yes, we can get the driver from vnf. Since, the only possible driver here is \"heat\", I directly mentioned that. Can change it if needed.","commit_id":"aaccd9b526fec03e7bc62a4e5ba67e474fcefbbc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"e1243e4bd5d1613804d690ed21efe7fdd997cc78","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":440,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":441,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":442,"context_line":"        return self._device_manager.invoke(\u0027heat\u0027, \u0027get_resourceid_mapping\u0027,"},{"line_number":443,"context_line":"                                           plugin\u003dself, context\u003dcontext,"},{"line_number":444,"context_line":"                                           stack_id\u003dstack_id,"},{"line_number":445,"context_line":"                                           auth_attr\u003dauth)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_83150d41","line":442,"range":{"start_line":442,"start_character":42,"end_line":442,"end_character":44},"in_reply_to":"1aa78d24_ac047b49","updated":"2016-07-13 11:28:32.000000000","message":"Mentioned \"heat\" directly because Nova driver is already deprecated from Mitaka [1]. I hope this is what you meant.\n\n[1] https://github.com/openstack/tacker/blob/master/etc/tacker/tacker.conf#L388","commit_id":"aaccd9b526fec03e7bc62a4e5ba67e474fcefbbc"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"9cbcadfcca23e2ee5f0cd4fe1314b9d018d66a77","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":440,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":441,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":442,"context_line":"        return self._device_manager.invoke(\u0027heat\u0027, \u0027get_resourceid_mapping\u0027,"},{"line_number":443,"context_line":"                                           plugin\u003dself, context\u003dcontext,"},{"line_number":444,"context_line":"                                           stack_id\u003dstack_id,"},{"line_number":445,"context_line":"                                           auth_attr\u003dauth)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_5e4bbd5f","line":442,"range":{"start_line":442,"start_character":42,"end_line":442,"end_character":44},"in_reply_to":"1aa78d24_bfb46835","updated":"2016-07-14 10:06:39.000000000","message":"+1","commit_id":"aaccd9b526fec03e7bc62a4e5ba67e474fcefbbc"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"90b47360407e3a500ae93c992f5758e79d935510","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":440,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":441,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":442,"context_line":"        return self._device_manager.invoke(\u0027heat\u0027, \u0027get_resourceid_mapping\u0027,"},{"line_number":443,"context_line":"                                           plugin\u003dself, context\u003dcontext,"},{"line_number":444,"context_line":"                                           stack_id\u003dstack_id,"},{"line_number":445,"context_line":"                                           auth_attr\u003dauth)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_bfb46835","line":442,"range":{"start_line":442,"start_character":42,"end_line":442,"end_character":44},"in_reply_to":"1aa78d24_c91b86c9","updated":"2016-07-14 05:56:42.000000000","message":"I think we should change it to comply with arch. thanks","commit_id":"aaccd9b526fec03e7bc62a4e5ba67e474fcefbbc"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"16617813d88b5e6a046b8a34f05a9ae5a8a16eb6","unresolved":false,"context_lines":[{"line_number":432,"context_line":"            pass"},{"line_number":433,"context_line":"        else:"},{"line_number":434,"context_line":"            if fields \u003d\u003d [] or \u0027node_ids\u0027 in fields:"},{"line_number":435,"context_line":"                vnf_info[\u0027node_ids\u0027] \u003d self.get_vnf_details(context, vnf_id)"},{"line_number":436,"context_line":"        return vnf_info"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    def get_vnf_details(self, context, vnf_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_444ac6ad","line":435,"range":{"start_line":435,"start_character":24,"end_line":435,"end_character":26},"updated":"2016-07-14 14:21:48.000000000","message":"it seems the get_reourceid_mapping is:\n            details_dict \u003d {resource.resource_name:\n                           {\"id\": resource.physical_resource_id,\n                           \"type\": resource.resource_type}\n                           for resource in resources_ids}\nso it is not just ids.","commit_id":"8f1ed9365638bc7f4fd221fc0237a2d47e2e2b3f"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"2cc9bd9ac5e19085e293d478301efc3ce7102a2f","unresolved":false,"context_lines":[{"line_number":432,"context_line":"            pass"},{"line_number":433,"context_line":"        else:"},{"line_number":434,"context_line":"            if fields \u003d\u003d [] or \u0027node_ids\u0027 in fields:"},{"line_number":435,"context_line":"                vnf_info[\u0027node_ids\u0027] \u003d self.get_vnf_details(context, vnf_id)"},{"line_number":436,"context_line":"        return vnf_info"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    def get_vnf_details(self, context, vnf_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_f26f07c2","line":435,"range":{"start_line":435,"start_character":24,"end_line":435,"end_character":26},"in_reply_to":"1aa78d24_444ac6ad","updated":"2016-07-15 09:15:13.000000000","message":"Done","commit_id":"8f1ed9365638bc7f4fd221fc0237a2d47e2e2b3f"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"b3a55b611371717fb640eb0570e509ac5377b139","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":443,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":444,"context_line":"        return self._device_manager.invoke(infra_driver,"},{"line_number":445,"context_line":"                                           \u0027get_nodes_mapping\u0027,"},{"line_number":446,"context_line":"                                           plugin\u003dself,"},{"line_number":447,"context_line":"                                           context\u003dcontext,"},{"line_number":448,"context_line":"                                           stack_id\u003dstack_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fad55976_a93a4b96","line":445,"range":{"start_line":445,"start_character":44,"end_line":445,"end_character":61},"updated":"2016-07-16 08:20:06.000000000","message":"Conside making this into a generic plugin -\u003e infra_driver interface like,\n\n\"get_vnf_details()\"\n\n.. which can be extended in the future. Also, I\u0027d suggest you to merge these two methods in L429 and L439 into one common get_vnf() for better code readability.","commit_id":"5ef189716888f5ee29e86672a46d12132bac4e57"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"4642b98e60979f0ef6a02ac7f2feee4c586a20cd","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":443,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":444,"context_line":"        return self._device_manager.invoke(infra_driver,"},{"line_number":445,"context_line":"                                           \u0027get_nodes_mapping\u0027,"},{"line_number":446,"context_line":"                                           plugin\u003dself,"},{"line_number":447,"context_line":"                                           context\u003dcontext,"},{"line_number":448,"context_line":"                                           stack_id\u003dstack_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_4f20269c","line":445,"range":{"start_line":445,"start_character":44,"end_line":445,"end_character":61},"in_reply_to":"fad55976_a93a4b96","updated":"2016-07-18 13:34:11.000000000","message":"Merging L429 and L439 would mean changing L430 to not include \"fields\" and implement a logic to just return \"field values\" (this corresponds to -F flag in vnf-show) or rerun L430 without \"fields\" flag to get \"instance_id\" (basically stack id) and infra_driver value from DB.","commit_id":"5ef189716888f5ee29e86672a46d12132bac4e57"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"c86c79162f01520480b9193c776cf772cfd3068d","unresolved":false,"context_lines":[{"line_number":438,"context_line":"                                      stack_id\u003dstack_id,"},{"line_number":439,"context_line":"                                      auth_attr\u003dauth)"},{"line_number":440,"context_line":"        if fields:"},{"line_number":441,"context_line":"            vnf_info \u003d {fields[0]: vnf_info[fields[0]]}"},{"line_number":442,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_24b7a7d9","line":441,"range":{"start_line":441,"start_character":22,"end_line":441,"end_character":23},"updated":"2016-07-19 09:27:47.000000000","message":"I cannot follow lines 440-442.\n\nhow about adding a case for it?","commit_id":"a94e2044f31c6e1a44be99c47dd11ca1d3ed7152"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"02a44e36b684006708d0e939a44d98c056c5f25b","unresolved":false,"context_lines":[{"line_number":438,"context_line":"                                      stack_id\u003dstack_id,"},{"line_number":439,"context_line":"                                      auth_attr\u003dauth)"},{"line_number":440,"context_line":"        if fields:"},{"line_number":441,"context_line":"            vnf_info \u003d {fields[0]: vnf_info[fields[0]]}"},{"line_number":442,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_a861a5aa","line":441,"range":{"start_line":441,"start_character":22,"end_line":441,"end_character":23},"in_reply_to":"dada55a8_24b7a7d9","updated":"2016-07-19 10:59:00.000000000","message":"vnf-show command has a flag -F which gives info for a single value. example: \"vnf-show -F status vnf_name\" gives just the current status of vnf. This \"status\" on server is reflected in \"fields\". L440-442 implements this -F functionality. Initially, it was implemented at L430 but had to change so as to merge \"get_vnf_details\" into \"get_vnf\". I hope this explanation is clear. \n\nIMO, a test case is not required for this. We already have a case for \"get_vnf\".","commit_id":"a94e2044f31c6e1a44be99c47dd11ca1d3ed7152"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"385cc15f3f2de26ff74b3ec75949a18d0b1e6e25","unresolved":false,"context_lines":[{"line_number":438,"context_line":"                                      stack_id\u003dstack_id,"},{"line_number":439,"context_line":"                                      auth_attr\u003dauth)"},{"line_number":440,"context_line":"        if fields:"},{"line_number":441,"context_line":"            vnf_info \u003d {fields[0]: vnf_info[fields[0]]}"},{"line_number":442,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":10,"id":"dada55a8_f67d2d1d","line":441,"range":{"start_line":441,"start_character":11,"end_line":441,"end_character":55},"updated":"2016-07-19 16:36:13.000000000","message":"Correct me if I\u0027m wrong here, but fields are a list of things you want to find when calling get_vnf.  Shouldn\u0027t you be iterating over fields here instead of just the first one?","commit_id":"2c2cab2be06bfab84dc57b9e5a8774613624d70e"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"9c0a5f84574b0e0ad57a1bebca4e6eeecb1ea5af","unresolved":false,"context_lines":[{"line_number":438,"context_line":"                                      stack_id\u003dstack_id,"},{"line_number":439,"context_line":"                                      auth_attr\u003dauth)"},{"line_number":440,"context_line":"        if fields:"},{"line_number":441,"context_line":"            vnf_info \u003d {fields[0]: vnf_info[fields[0]]}"},{"line_number":442,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":10,"id":"dada55a8_5ca2414c","line":441,"range":{"start_line":441,"start_character":11,"end_line":441,"end_character":55},"in_reply_to":"dada55a8_f67d2d1d","updated":"2016-07-20 05:58:15.000000000","message":"\"fields\" corresponds to the argument for \"-F\" flag in \"vnf-show\" command. It allows for only 1 argument and hence iterating is not required. The logic here is:\n1. vnf-show vnf_name will execute L429-439, skip \"if\" and run L442 returning all vnf related info including vnf_details.\n2. vnf-show -F status (for eg). will run L429 to L442 returning just the status of vnf. \"fields[0]\" in this case would be \"status\"\n\n\"fields\" is an already defined variable (in db/vm/vm_db.py)\nI hope this is clear.","commit_id":"2c2cab2be06bfab84dc57b9e5a8774613624d70e"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"2949a9ccd7ff4015d35a2675551678102fb1a9c6","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":438,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":439,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":440,"context_line":"        vnf_info[\u0027vnf_details\u0027] \u003d self._device_manager.invoke(infra_driver,"},{"line_number":441,"context_line":"                                      \u0027get_vnf_details\u0027,"},{"line_number":442,"context_line":"                                      plugin\u003dself,"},{"line_number":443,"context_line":"                                      context\u003dcontext,"}],"source_content_type":"text/x-python","patch_set":11,"id":"dada55a8_c944e4b8","line":440,"range":{"start_line":440,"start_character":18,"end_line":440,"end_character":29},"updated":"2016-07-25 06:52:59.000000000","message":"can we set vnf_info[\u0027vnf_details\u0027] to ERROR if infra_driver\u0027s get_vnf_details raise error?","commit_id":"6db71ba48bad5e39e6b425038ca8efdf8db43d67"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"e924f11a417db4bd5c50a331bfa1bba39b76ebc6","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":438,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":439,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":440,"context_line":"        vnf_info[\u0027vnf_details\u0027] \u003d self._device_manager.invoke(infra_driver,"},{"line_number":441,"context_line":"                                      \u0027get_vnf_details\u0027,"},{"line_number":442,"context_line":"                                      plugin\u003dself,"},{"line_number":443,"context_line":"                                      context\u003dcontext,"}],"source_content_type":"text/x-python","patch_set":11,"id":"dada55a8_ed07b815","line":440,"range":{"start_line":440,"start_character":18,"end_line":440,"end_character":29},"in_reply_to":"dada55a8_c944e4b8","updated":"2016-07-27 08:23:04.000000000","message":"Done","commit_id":"6db71ba48bad5e39e6b425038ca8efdf8db43d67"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"2949a9ccd7ff4015d35a2675551678102fb1a9c6","unresolved":false,"context_lines":[{"line_number":444,"context_line":"                                      stack_id\u003dstack_id,"},{"line_number":445,"context_line":"                                      auth_attr\u003dauth)"},{"line_number":446,"context_line":"        if fields:"},{"line_number":447,"context_line":"            vnf_info \u003d {fields[0]: vnf_info[fields[0]]}"},{"line_number":448,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":11,"id":"dada55a8_49859405","line":447,"range":{"start_line":447,"start_character":32,"end_line":447,"end_character":34},"updated":"2016-07-25 06:52:59.000000000","message":"what will happen if I passed two fields: such as tacker vnf-get -f f1, -f f2 \u003cvnfid\u003e","commit_id":"6db71ba48bad5e39e6b425038ca8efdf8db43d67"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"e924f11a417db4bd5c50a331bfa1bba39b76ebc6","unresolved":false,"context_lines":[{"line_number":444,"context_line":"                                      stack_id\u003dstack_id,"},{"line_number":445,"context_line":"                                      auth_attr\u003dauth)"},{"line_number":446,"context_line":"        if fields:"},{"line_number":447,"context_line":"            vnf_info \u003d {fields[0]: vnf_info[fields[0]]}"},{"line_number":448,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":11,"id":"dada55a8_6a9e0e64","line":447,"range":{"start_line":447,"start_character":32,"end_line":447,"end_character":34},"in_reply_to":"dada55a8_49859405","updated":"2016-07-27 08:23:04.000000000","message":"Done","commit_id":"6db71ba48bad5e39e6b425038ca8efdf8db43d67"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"2aae363e4cab321a9d32a176908b0613904b5af5","unresolved":false,"context_lines":[{"line_number":629,"context_line":"        if fields:"},{"line_number":630,"context_line":"            vnf_field_info \u003d {}"},{"line_number":631,"context_line":"            for field in fields:"},{"line_number":632,"context_line":"                vnf_field_info[field] \u003d vnf_info[field]"},{"line_number":633,"context_line":"            return vnf_field_info"},{"line_number":634,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":15,"id":"9ad45d7e_fc30c309","line":632,"updated":"2016-08-08 13:59:40.000000000","message":"qq: are we validating the \"field\" anywhere?","commit_id":"1d1f3747a455205d78f82a59fc5997b0302a1e05"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"e62d91f565c98a689d70c222649ceb5c7812f10c","unresolved":false,"context_lines":[{"line_number":615,"context_line":""},{"line_number":616,"context_line":"        return scale[\u0027scale\u0027]"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def get_vnf(self, context, vnf_id, fields\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":620,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":621,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"9ad45d7e_8f1bfe1a","line":618,"range":{"start_line":618,"start_character":8,"end_line":618,"end_character":15},"updated":"2016-08-09 19:56:24.000000000","message":"this method will be invoked not just by vnffg plugin but also regular GET on a VNF. it may not be a good idea to invoke hear driver client every time, to fetch vnf resource details during normal VNF GET operation. I would suggest to make these details be fetched as an option and have \u0027detail\u0027 as a sub resource under \u0027vnf\u0027 as:\n\n/vnfs/\u003cuuid\u003e/detail \n\nand have separate method as \u0027get_vnf_detail\u0027","commit_id":"71d32dbcfb07dd4415a0afe1085bfa8754223f11"},{"author":{"_account_id":20986,"name":"Manikantha Srinivas Tadi","email":"manikantha.tadi@gmail.com","username":"mtadi"},"change_message_id":"93b1296ec7ddacd09d93e0f84c2b83c9eac8db1d","unresolved":false,"context_lines":[{"line_number":615,"context_line":""},{"line_number":616,"context_line":"        return scale[\u0027scale\u0027]"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def get_vnf(self, context, vnf_id, fields\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":620,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":621,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"9ad45d7e_9de67313","line":618,"range":{"start_line":618,"start_character":8,"end_line":618,"end_character":15},"in_reply_to":"9ad45d7e_8f1bfe1a","updated":"2016-08-10 10:17:04.000000000","message":"+1","commit_id":"71d32dbcfb07dd4415a0afe1085bfa8754223f11"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"3338feea048a5a608edac94d3733d3bc82c3bb4a","unresolved":false,"context_lines":[{"line_number":615,"context_line":""},{"line_number":616,"context_line":"        return scale[\u0027scale\u0027]"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def get_vnf(self, context, vnf_id, fields\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":620,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":621,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"9ad45d7e_da50f1d6","line":618,"range":{"start_line":618,"start_character":8,"end_line":618,"end_character":15},"in_reply_to":"9ad45d7e_8f1bfe1a","updated":"2016-08-10 14:30:25.000000000","message":"Won\u0027t this result in duplication as get_vnf need to be called from get_vnf_detail. get_vnf_detail should reply normal values (as replied by get_vnf) + vnf details\n\nAlso with this, vnf-show -F vnf_details wont work.","commit_id":"71d32dbcfb07dd4415a0afe1085bfa8754223f11"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"7b267ed7ffc7c55d0dc99c5f98444bfa97db492a","unresolved":false,"context_lines":[{"line_number":615,"context_line":""},{"line_number":616,"context_line":"        return scale[\u0027scale\u0027]"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def get_vnf(self, context, vnf_id, fields\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":620,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":621,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"9ad45d7e_06afbde2","line":618,"range":{"start_line":618,"start_character":8,"end_line":618,"end_character":15},"in_reply_to":"9ad45d7e_da50f1d6","updated":"2016-08-10 17:38:24.000000000","message":"get_vnf does normal resource fetch and get_vnf_detail does normal resource fetch+additional queries, it is better to keep them separate. if get_vnf_details also just retrieved additional vnf information from db and dumped it, it  was fine to merge both of them. the operation it does is to fetch heat stack details which is already readily available for the end user and is unnecessary to add this to normal get_vnf. \n\nyou can use the existing --show-details option in vnf-show command","commit_id":"71d32dbcfb07dd4415a0afe1085bfa8754223f11"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"e62d91f565c98a689d70c222649ceb5c7812f10c","unresolved":false,"context_lines":[{"line_number":626,"context_line":"                                      context\u003dcontext,"},{"line_number":627,"context_line":"                                      stack_id\u003dstack_id,"},{"line_number":628,"context_line":"                                      auth_attr\u003dauth)"},{"line_number":629,"context_line":"        if fields:"},{"line_number":630,"context_line":"            vnf_field_info \u003d {}"},{"line_number":631,"context_line":"            for field in fields:"},{"line_number":632,"context_line":"                vnf_field_info[field] \u003d vnf_info[field]"},{"line_number":633,"context_line":"            return vnf_field_info"},{"line_number":634,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":16,"id":"9ad45d7e_ae2403af","line":634,"range":{"start_line":629,"start_character":8,"end_line":634,"end_character":23},"updated":"2016-08-09 19:56:24.000000000","message":"you can use existing fields method from [1]\n\n[1] https://github.com/openstack/tacker/blob/master/tacker/db/db_base.py#L106","commit_id":"71d32dbcfb07dd4415a0afe1085bfa8754223f11"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"3338feea048a5a608edac94d3733d3bc82c3bb4a","unresolved":false,"context_lines":[{"line_number":626,"context_line":"                                      context\u003dcontext,"},{"line_number":627,"context_line":"                                      stack_id\u003dstack_id,"},{"line_number":628,"context_line":"                                      auth_attr\u003dauth)"},{"line_number":629,"context_line":"        if fields:"},{"line_number":630,"context_line":"            vnf_field_info \u003d {}"},{"line_number":631,"context_line":"            for field in fields:"},{"line_number":632,"context_line":"                vnf_field_info[field] \u003d vnf_info[field]"},{"line_number":633,"context_line":"            return vnf_field_info"},{"line_number":634,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":16,"id":"9ad45d7e_c02804e5","line":634,"range":{"start_line":629,"start_character":8,"end_line":634,"end_character":23},"in_reply_to":"9ad45d7e_ae2403af","updated":"2016-08-10 14:30:25.000000000","message":"Sure. Will use it. 2 ways though:\n1. to make _fields static\n2. to instantiate the CommonDbMixin class and then call the method\n\nNot sure which one to follow.","commit_id":"71d32dbcfb07dd4415a0afe1085bfa8754223f11"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"7b267ed7ffc7c55d0dc99c5f98444bfa97db492a","unresolved":false,"context_lines":[{"line_number":626,"context_line":"                                      context\u003dcontext,"},{"line_number":627,"context_line":"                                      stack_id\u003dstack_id,"},{"line_number":628,"context_line":"                                      auth_attr\u003dauth)"},{"line_number":629,"context_line":"        if fields:"},{"line_number":630,"context_line":"            vnf_field_info \u003d {}"},{"line_number":631,"context_line":"            for field in fields:"},{"line_number":632,"context_line":"                vnf_field_info[field] \u003d vnf_info[field]"},{"line_number":633,"context_line":"            return vnf_field_info"},{"line_number":634,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":16,"id":"9ad45d7e_a6bcf1dc","line":634,"range":{"start_line":629,"start_character":8,"end_line":634,"end_character":23},"in_reply_to":"9ad45d7e_c02804e5","updated":"2016-08-10 17:38:24.000000000","message":"this is already available for the plugin. just do\nreturn self._fields(vnf_info, fields)","commit_id":"71d32dbcfb07dd4415a0afe1085bfa8754223f11"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"7cf2ca6327b993c6b54752d2265d297c85e5e2ce","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        return scale[\u0027scale\u0027]"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def get_vnf_details(self, context, vnf_id, fields\u003dNone, filters\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id, fields\u003dNone)"},{"line_number":620,"context_line":"        LOG.debug(\"\\n 1st vnf_info\", vnf_info, \"\\n\")"},{"line_number":621,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":622,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"9ad45d7e_2d81abfb","line":619,"range":{"start_line":619,"start_character":52,"end_line":619,"end_character":63},"updated":"2016-08-12 00:23:09.000000000","message":"either use the fields arg from get_vnf_details method, or drop the argument from get_device call and get_vnf_details","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"f47cf31990d151cec37f2b7c4ab588231370af72","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        return scale[\u0027scale\u0027]"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def get_vnf_details(self, context, vnf_id, fields\u003dNone, filters\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id, fields\u003dNone)"},{"line_number":620,"context_line":"        LOG.debug(\"\\n 1st vnf_info\", vnf_info, \"\\n\")"},{"line_number":621,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":622,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"9ad45d7e_ac228bff","line":619,"range":{"start_line":619,"start_character":52,"end_line":619,"end_character":63},"in_reply_to":"9ad45d7e_2d81abfb","updated":"2016-08-16 08:48:43.000000000","message":"Done","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"7cf2ca6327b993c6b54752d2265d297c85e5e2ce","unresolved":false,"context_lines":[{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def get_vnf_details(self, context, vnf_id, fields\u003dNone, filters\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id, fields\u003dNone)"},{"line_number":620,"context_line":"        LOG.debug(\"\\n 1st vnf_info\", vnf_info, \"\\n\")"},{"line_number":621,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":622,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":623,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9ad45d7e_adac7b8c","line":620,"range":{"start_line":620,"start_character":8,"end_line":620,"end_character":52},"updated":"2016-08-12 00:23:09.000000000","message":"Take a look at how other debug logs are done using i18n formatting.","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"f47cf31990d151cec37f2b7c4ab588231370af72","unresolved":false,"context_lines":[{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def get_vnf_details(self, context, vnf_id, fields\u003dNone, filters\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id, fields\u003dNone)"},{"line_number":620,"context_line":"        LOG.debug(\"\\n 1st vnf_info\", vnf_info, \"\\n\")"},{"line_number":621,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":622,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":623,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9ad45d7e_6c025371","line":620,"range":{"start_line":620,"start_character":8,"end_line":620,"end_character":52},"in_reply_to":"9ad45d7e_adac7b8c","updated":"2016-08-16 08:48:43.000000000","message":"This was for my reference. Missed deleting it while submitting.","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"1151ce32456e76362741e79e99c5b342df125bbe","unresolved":false,"context_lines":[{"line_number":618,"context_line":"    def get_vnf_details(self, context, vnf_id, fields\u003dNone, filters\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id, fields\u003dNone)"},{"line_number":620,"context_line":"        LOG.debug(\"\\n 1st vnf_info\", vnf_info, \"\\n\")"},{"line_number":621,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":622,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":623,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":624,"context_line":"        vnf_info[\u0027vnf_details\u0027] \u003d self._device_manager.invoke(infra_driver,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_525a6c51","line":621,"range":{"start_line":621,"start_character":8,"end_line":621,"end_character":42},"updated":"2016-08-15 23:53:44.000000000","message":"pass the vnf_info to infra driver and let it do the required processing. please do not bring stack level details on to the plugin.","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"dc22b5f94b24d49efb9fc11574433b0f7f3bcfd7","unresolved":false,"context_lines":[{"line_number":618,"context_line":"    def get_vnf_details(self, context, vnf_id, fields\u003dNone, filters\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id, fields\u003dNone)"},{"line_number":620,"context_line":"        LOG.debug(\"\\n 1st vnf_info\", vnf_info, \"\\n\")"},{"line_number":621,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":622,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":623,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":624,"context_line":"        vnf_info[\u0027vnf_details\u0027] \u003d self._device_manager.invoke(infra_driver,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_2785e2ac","line":621,"range":{"start_line":621,"start_character":8,"end_line":621,"end_character":42},"in_reply_to":"3ac371cc_525a6c51","updated":"2016-08-16 09:22:22.000000000","message":"Done","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"1151ce32456e76362741e79e99c5b342df125bbe","unresolved":false,"context_lines":[{"line_number":621,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":622,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":623,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":624,"context_line":"        vnf_info[\u0027vnf_details\u0027] \u003d self._device_manager.invoke(infra_driver,"},{"line_number":625,"context_line":"                                      \u0027vnf_details\u0027,"},{"line_number":626,"context_line":"                                      plugin\u003dself,"},{"line_number":627,"context_line":"                                      context\u003dcontext,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_123f54d7","line":624,"range":{"start_line":624,"start_character":8,"end_line":624,"end_character":16},"updated":"2016-08-15 23:53:44.000000000","message":"\u0027vnf_details\u0027 is the only key passed back to the API layer and not rest of vnf_info","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"dc22b5f94b24d49efb9fc11574433b0f7f3bcfd7","unresolved":false,"context_lines":[{"line_number":621,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":622,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":623,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":624,"context_line":"        vnf_info[\u0027vnf_details\u0027] \u003d self._device_manager.invoke(infra_driver,"},{"line_number":625,"context_line":"                                      \u0027vnf_details\u0027,"},{"line_number":626,"context_line":"                                      plugin\u003dself,"},{"line_number":627,"context_line":"                                      context\u003dcontext,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_92d69225","line":624,"range":{"start_line":624,"start_character":8,"end_line":624,"end_character":16},"in_reply_to":"3ac371cc_123f54d7","updated":"2016-08-16 09:22:22.000000000","message":"return vnf_info (L630) returns all info about the VNF + details fetched at L624..","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"e8410f2cb15da959a5b497988ee3bce20564a2cd","unresolved":false,"context_lines":[{"line_number":621,"context_line":"        stack_id \u003d vnf_info[\u0027instance_id\u0027]"},{"line_number":622,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":623,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":624,"context_line":"        vnf_info[\u0027vnf_details\u0027] \u003d self._device_manager.invoke(infra_driver,"},{"line_number":625,"context_line":"                                      \u0027vnf_details\u0027,"},{"line_number":626,"context_line":"                                      plugin\u003dself,"},{"line_number":627,"context_line":"                                      context\u003dcontext,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_372a0c7f","line":624,"range":{"start_line":624,"start_character":8,"end_line":624,"end_character":16},"in_reply_to":"3ac371cc_92d69225","updated":"2016-08-16 19:15:54.000000000","message":"no, all attributes are extracted out in the api layer as \u0027vnf_details\u0027 is the only valid attribute part of \u0027details\u0027 resource and will be the one sent back.","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"e265ea831c96d32fba356c4c1b8e5dc8e8045958","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":623,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":624,"context_line":"        vnf_info[\u0027vnf_details\u0027] \u003d self._device_manager.invoke(infra_driver,"},{"line_number":625,"context_line":"                                      \u0027vnf_details\u0027,"},{"line_number":626,"context_line":"                                      plugin\u003dself,"},{"line_number":627,"context_line":"                                      context\u003dcontext,"},{"line_number":628,"context_line":"                                      stack_id\u003dstack_id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9ad45d7e_1f34dcdb","line":625,"range":{"start_line":625,"start_character":39,"end_line":625,"end_character":50},"updated":"2016-08-11 18:02:52.000000000","message":"you need to add a method in the abstract driver [1] for this new plugin -\u003e infra driver interface. Please an appropriate method description something like,\n\u0027Optional infra specific details of the vnf\u0027\n\n[1] https://github.com/openstack/tacker/blob/master/tacker/vm/infra_drivers/abstract_driver.py","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"dc22b5f94b24d49efb9fc11574433b0f7f3bcfd7","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":623,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":624,"context_line":"        vnf_info[\u0027vnf_details\u0027] \u003d self._device_manager.invoke(infra_driver,"},{"line_number":625,"context_line":"                                      \u0027vnf_details\u0027,"},{"line_number":626,"context_line":"                                      plugin\u003dself,"},{"line_number":627,"context_line":"                                      context\u003dcontext,"},{"line_number":628,"context_line":"                                      stack_id\u003dstack_id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_e7446a1c","line":625,"range":{"start_line":625,"start_character":39,"end_line":625,"end_character":50},"in_reply_to":"9ad45d7e_1f34dcdb","updated":"2016-08-16 09:22:22.000000000","message":"Done","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"1151ce32456e76362741e79e99c5b342df125bbe","unresolved":false,"context_lines":[{"line_number":627,"context_line":"                                      context\u003dcontext,"},{"line_number":628,"context_line":"                                      stack_id\u003dstack_id,"},{"line_number":629,"context_line":"                                      auth_attr\u003dauth)"},{"line_number":630,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_d2981c1e","line":630,"range":{"start_line":630,"start_character":15,"end_line":630,"end_character":23},"updated":"2016-08-15 23:53:44.000000000","message":"get_vnf_details is a LIST operation on \u0027vnf\u0027 \u0027details\u0027 sub resource and is not a SHOW. So the response here needs to be a list instead of dictionary. \nthis is causing the response for get_vnf_details to error out.","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"e8410f2cb15da959a5b497988ee3bce20564a2cd","unresolved":false,"context_lines":[{"line_number":627,"context_line":"                                      context\u003dcontext,"},{"line_number":628,"context_line":"                                      stack_id\u003dstack_id,"},{"line_number":629,"context_line":"                                      auth_attr\u003dauth)"},{"line_number":630,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_6b4b0788","line":630,"range":{"start_line":630,"start_character":15,"end_line":630,"end_character":23},"in_reply_to":"3ac371cc_c4e96c1c","updated":"2016-08-16 19:15:54.000000000","message":"a GET on URL such as : /vnfs/\u003cuuid\u003e/details is an index call and not a show in WSGI layer. if the url had a resource id associated at the end, this would have been a SHOW call. it is fine to use the vnf-show on the cli and invoke this call on the API since get is the only operation support for details sub resource.\n\nthe reasoning behind returning this as \u0027list\u0027 is because of few validations that happen in the API Layer (carried over from neutron) which searches for 1st element in the list. see [1] . so L630 should do a return as: \n\nreturn [vnf_details, ]\n\n[1] https://github.com/openstack/tacker/blob/master/tacker/api/v1/base.py#L249","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"f47cf31990d151cec37f2b7c4ab588231370af72","unresolved":false,"context_lines":[{"line_number":627,"context_line":"                                      context\u003dcontext,"},{"line_number":628,"context_line":"                                      stack_id\u003dstack_id,"},{"line_number":629,"context_line":"                                      auth_attr\u003dauth)"},{"line_number":630,"context_line":"        return vnf_info"}],"source_content_type":"text/x-python","patch_set":18,"id":"3ac371cc_c4e96c1c","line":630,"range":{"start_line":630,"start_character":15,"end_line":630,"end_character":23},"in_reply_to":"3ac371cc_d2981c1e","updated":"2016-08-16 08:48:43.000000000","message":"Sripriya, thanks for looking into the issue. The response needs to be a dictionary like this\n{\"VDU1\": {\u0027id\u0027: \u003cuuid\u003e, \u0027type\u0027: NOva server, \"CP1\": {\"id\":, \u0027type\u0027: ..}...\n\nHow to make it a SHOW instead of LIST. I have made changes on the SHOW command on the client side.","commit_id":"016f1e3d3d78f360c6a9197e31d71f6b230146cc"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"729c2b93fb811bf48aa2f3e5cb5ab1b93287694d","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        return scale[\u0027scale\u0027]"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def get_vnf_details(self, context, vnf_id, fields\u003dNone, filters\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":620,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":621,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":622,"context_line":"        vnf_details \u003d {\u0027resources\u0027: self._device_manager.invoke("}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_79cdc25c","line":619,"range":{"start_line":619,"start_character":24,"end_line":619,"end_character":51},"updated":"2016-08-22 02:20:21.000000000","message":"Sridhar: won\u0027t this change with the device-\u003eVNF refactor?  Can we just use get_vnf() here instead?","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"a3c3e39f7af6c1cbe15d05feadb4129395421ea1","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        return scale[\u0027scale\u0027]"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def get_vnf_details(self, context, vnf_id, fields\u003dNone, filters\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":620,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":621,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":622,"context_line":"        vnf_details \u003d {\u0027resources\u0027: self._device_manager.invoke("}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_c37964fe","line":619,"range":{"start_line":619,"start_character":24,"end_line":619,"end_character":51},"in_reply_to":"1ac06dbe_79cdc25c","updated":"2016-08-22 05:15:51.000000000","message":"Done","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"62ea2250c59fae7e06701ffb524cb08bceb9733b","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        return scale[\u0027scale\u0027]"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def get_vnf_details(self, context, vnf_id, fields\u003dNone, filters\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":620,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":621,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"},{"line_number":622,"context_line":"        vnf_details \u003d {\u0027resources\u0027: self._device_manager.invoke("}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_6c821d96","line":619,"range":{"start_line":619,"start_character":24,"end_line":619,"end_character":51},"in_reply_to":"1ac06dbe_79cdc25c","updated":"2016-08-22 07:12:40.000000000","message":"Yep, need to change to vnf","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"729c2b93fb811bf48aa2f3e5cb5ab1b93287694d","unresolved":false,"context_lines":[{"line_number":626,"context_line":"                       context\u003dcontext,"},{"line_number":627,"context_line":"                       vnf_info\u003dvnf_info,"},{"line_number":628,"context_line":"                       auth_attr\u003dauth)}"},{"line_number":629,"context_line":"        return [vnf_details, ]"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_197acef1","line":629,"range":{"start_line":629,"start_character":8,"end_line":629,"end_character":30},"updated":"2016-08-22 02:20:21.000000000","message":"Why do you return this as a list?  I think you should just return it as a dictionary, since you are only getting *one* vnf\u0027s details.  Also, if you return a list you don\u0027t need the comma there.","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"b1746ef959bc6fe47dea86b1e74874888e0bee79","unresolved":false,"context_lines":[{"line_number":626,"context_line":"                       context\u003dcontext,"},{"line_number":627,"context_line":"                       vnf_info\u003dvnf_info,"},{"line_number":628,"context_line":"                       auth_attr\u003dauth)}"},{"line_number":629,"context_line":"        return [vnf_details, ]"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_76b8ac75","line":629,"range":{"start_line":629,"start_character":8,"end_line":629,"end_character":30},"in_reply_to":"1ac06dbe_0b3d13c4","updated":"2016-08-23 19:20:41.000000000","message":"what heat driver returns is the value for the \u0027resources\u0027 parameter of the details API.  if we return the output of heat driver directly to the details API, the details API will then be a very loosely defined API resource which can literally return anything as a list for the details.","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"a3c3e39f7af6c1cbe15d05feadb4129395421ea1","unresolved":false,"context_lines":[{"line_number":626,"context_line":"                       context\u003dcontext,"},{"line_number":627,"context_line":"                       vnf_info\u003dvnf_info,"},{"line_number":628,"context_line":"                       auth_attr\u003dauth)}"},{"line_number":629,"context_line":"        return [vnf_details, ]"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_631cf0c1","line":629,"range":{"start_line":629,"start_character":8,"end_line":629,"end_character":30},"in_reply_to":"1ac06dbe_197acef1","updated":"2016-08-22 05:15:51.000000000","message":"API layer expects it to be a list. Hence, returning a list. Having a comma or not is just a syntax. Will remove it.","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"dae10e887c6f07d178cb57965b527b1543697501","unresolved":false,"context_lines":[{"line_number":626,"context_line":"                       context\u003dcontext,"},{"line_number":627,"context_line":"                       vnf_info\u003dvnf_info,"},{"line_number":628,"context_line":"                       auth_attr\u003dauth)}"},{"line_number":629,"context_line":"        return [vnf_details, ]"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_bcb1b549","line":629,"range":{"start_line":629,"start_character":8,"end_line":629,"end_character":30},"in_reply_to":"1ac06dbe_197acef1","updated":"2016-08-22 18:38:24.000000000","message":"Tim, this was discussed extensively in earlier patches and also on irc. with few current limitations in the way API layer is wired, the return response of an index url is always expected to be a list which searches for 1st element always, hence the plugin logic here \"tries\" to keep up to the api layer by morphing the dict to a list. let us revisit this \u0027details\u0027 workflow in follow ons.","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"0ee142488f7982729b8209ac49761dff885aebc8","unresolved":false,"context_lines":[{"line_number":626,"context_line":"                       context\u003dcontext,"},{"line_number":627,"context_line":"                       vnf_info\u003dvnf_info,"},{"line_number":628,"context_line":"                       auth_attr\u003dauth)}"},{"line_number":629,"context_line":"        return [vnf_details, ]"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_6dca5270","line":629,"range":{"start_line":629,"start_character":8,"end_line":629,"end_character":30},"in_reply_to":"1ac06dbe_24d07ec9","updated":"2016-08-24 19:01:48.000000000","message":"what is being suggested here is to return the infra driver resources all the way to the VNFM api to be treated as subresource of VNF itself instead of as a parameter under \u0027details\u0027 subresource. if it is justified to bring the \u0027resources\u0027 as a subresource of vnf, the new uri will have to be constructed as:\n\n\n/vnfs/\u003cuuid\u003e/resources  -fetch list of resources\n/vnfs/\u003cuuid\u003e/resources/\u003cunique resource name\u003e\n\nand attributes are \u0027id\u0027, \u0027name\u0027, \u0027type\u0027\n\nhere we assume resource name is going to uniquely identify a resource and expect the infra driver to handle this, also: we expect the \u0027id\u0027 and \u0027type\u0027 to be handled by infra driver as well.\n\nof course this has significant impact/changes on both client and server side.\n\ni\u0027m fine to go with this. but will let others weigh in this decision.","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"dae10e887c6f07d178cb57965b527b1543697501","unresolved":false,"context_lines":[{"line_number":626,"context_line":"                       context\u003dcontext,"},{"line_number":627,"context_line":"                       vnf_info\u003dvnf_info,"},{"line_number":628,"context_line":"                       auth_attr\u003dauth)}"},{"line_number":629,"context_line":"        return [vnf_details, ]"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_d98e43cf","line":629,"range":{"start_line":629,"start_character":8,"end_line":629,"end_character":30},"in_reply_to":"1ac06dbe_631cf0c1","updated":"2016-08-22 18:38:24.000000000","message":"see [1] for the comma convention. :-)\n\n\n[1] https://docs.python.org/2/faq/design.html#why-does-python-allow-commas-at-the-end-of-lists-and-tuples","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"db4cd8d8276c6d45ff06f9be72569994f9ac324c","unresolved":false,"context_lines":[{"line_number":626,"context_line":"                       context\u003dcontext,"},{"line_number":627,"context_line":"                       vnf_info\u003dvnf_info,"},{"line_number":628,"context_line":"                       auth_attr\u003dauth)}"},{"line_number":629,"context_line":"        return [vnf_details, ]"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_24d07ec9","line":629,"range":{"start_line":629,"start_character":8,"end_line":629,"end_character":30},"in_reply_to":"1ac06dbe_76b8ac75","updated":"2016-08-24 16:50:34.000000000","message":"OK we don\u0027t have to change the heat driver, we could leave it as is and do the parsing here in the plugin.  But what I am getting at is, change the \u0027resources\u0027 in the extension to be \u0027resource\u0027, add id, and type attributes and do this: https://paste.fedoraproject.org/413438/\n\nThis way you return a true list of resources, similar to how get_vnfs works with a list of vnfs.","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"a7a5ff8b3cd054b4da9001efe266efc74d4157d6","unresolved":false,"context_lines":[{"line_number":626,"context_line":"                       context\u003dcontext,"},{"line_number":627,"context_line":"                       vnf_info\u003dvnf_info,"},{"line_number":628,"context_line":"                       auth_attr\u003dauth)}"},{"line_number":629,"context_line":"        return [vnf_details, ]"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ac06dbe_0b3d13c4","line":629,"range":{"start_line":629,"start_character":8,"end_line":629,"end_character":30},"in_reply_to":"1ac06dbe_d98e43cf","updated":"2016-08-23 00:38:37.000000000","message":"So then why not change the heat driver to call to return a true list of resources for this VNF, then just return that list?  Also we talked about adding later on a get_vnf_detail method to get the single resource we want.\n\nI know commas are allowed at the end of lists...the link is not about convention, it is about what is allowed and why.  It makes sense to use an ending comma when the end-enclosure of the list is on a separate line, not in this case imo.  Either way it doesn\u0027t matter that much.","commit_id":"007a826633d41d3a075eee60615dfb20e65702bf"},{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"7cfc3a0a89b7a6ee2d2536580b287bd66aaf32d4","unresolved":false,"context_lines":[{"line_number":615,"context_line":""},{"line_number":616,"context_line":"        return scale[\u0027scale\u0027]"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def get_vnf_details(self, context, vnf_id, fields\u003dNone, filters\u003dNone):"},{"line_number":619,"context_line":"        vnf_info \u003d self.get_device(context, vnf_id)"},{"line_number":620,"context_line":"        infra_driver \u003d vnf_info[\u0027device_template\u0027][\u0027infra_driver\u0027]"},{"line_number":621,"context_line":"        auth \u003d self.get_vim(context, vnf_info)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1ac06dbe_31d4b9ea","line":618,"range":{"start_line":618,"start_character":47,"end_line":618,"end_character":72},"updated":"2016-08-23 04:56:54.000000000","message":"unused","commit_id":"5741c57aca6ded408ab7400a24cce9a9d4ee95ab"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"536b0dc028d5fb96d5199cc7ae6f0d35b7f52ffa","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        # Handling no-response from Heat"},{"line_number":636,"context_line":"        except Exception:"},{"line_number":637,"context_line":"            return [{\u0027name\u0027: \u0027\u0027, \u0027type\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027,"},{"line_number":638,"context_line":"                     \u0027error_reason\u0027: \"Couldnot retrieve resource details.\"}]"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ac06dbe_a32b76ea","line":638,"range":{"start_line":638,"start_character":38,"end_line":638,"end_character":73},"updated":"2016-08-25 15:56:02.000000000","message":"I couldn\u0027t understand why need to pass this error_reason?","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":17280,"name":"Tim Rozet","email":"trozet@redhat.com","username":"trozet"},"change_message_id":"7581b13070a2ce54ee9a859e7462c5f4decda4f0","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        # Handling no-response from Heat"},{"line_number":636,"context_line":"        except Exception:"},{"line_number":637,"context_line":"            return [{\u0027name\u0027: \u0027\u0027, \u0027type\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027,"},{"line_number":638,"context_line":"                     \u0027error_reason\u0027: \"Couldnot retrieve resource details.\"}]"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ac06dbe_f014174e","line":638,"range":{"start_line":638,"start_character":42,"end_line":638,"end_character":44},"updated":"2016-08-25 14:46:02.000000000","message":"nit: space missing","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"d209efc3cdf93eae4e7ce17d0f1cef4cb992b88d","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        # Handling no-response from Heat"},{"line_number":636,"context_line":"        except Exception:"},{"line_number":637,"context_line":"            return [{\u0027name\u0027: \u0027\u0027, \u0027type\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027,"},{"line_number":638,"context_line":"                     \u0027error_reason\u0027: \"Couldnot retrieve resource details.\"}]"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_e5e790aa","line":638,"range":{"start_line":638,"start_character":38,"end_line":638,"end_character":73},"in_reply_to":"1ac06dbe_381e8c63","updated":"2016-08-25 20:19:53.000000000","message":"First, I don\u0027t think we need \u0027error_reason\u0027 per resource entry. Second, yes, there will be a window where VNF is still in PENDING_CREATE and the heat (or other underlying VIM driver) is still in the process of creating the resources. So, the plugin should try to dip into the infra-driver ONLY when VNF is in ACTIVE state (essentially non-pending state where the list of resources might change say during scale-out / scale-in).\n\nJust to handle this I\u0027d suggest we have only one \"error_response\" for the whole API indicating things like,\n\na) VNF operation in progres\nb) Unable to get resource details of the VNF","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"fcefc7a32a58efdabb458649040d50906ba58c38","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        # Handling no-response from Heat"},{"line_number":636,"context_line":"        except Exception:"},{"line_number":637,"context_line":"            return [{\u0027name\u0027: \u0027\u0027, \u0027type\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027,"},{"line_number":638,"context_line":"                     \u0027error_reason\u0027: \"Couldnot retrieve resource details.\"}]"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ac06dbe_381e8c63","line":638,"range":{"start_line":638,"start_character":38,"end_line":638,"end_character":73},"in_reply_to":"1ac06dbe_a32b76ea","updated":"2016-08-25 16:57:22.000000000","message":"it is passed just to be very clear about the scenario when the data could not be fetched from heat. In the scenario when the data is not fetched and error message is not passed, output will be an empty table. This might mislead the user implying that there are no resources (similar to vnf-list gives empty table when there are no VNFs) which is never the case because as long as there is a VNF, there would be vnf_resources.","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"be1f3ca6e168633aa07c40793a3b78c8eb554e97","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        # Handling no-response from Heat"},{"line_number":636,"context_line":"        except Exception:"},{"line_number":637,"context_line":"            return [{\u0027name\u0027: \u0027\u0027, \u0027type\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027,"},{"line_number":638,"context_line":"                     \u0027error_reason\u0027: \"Couldnot retrieve resource details.\"}]"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_306ca6cf","line":638,"range":{"start_line":638,"start_character":38,"end_line":638,"end_character":73},"in_reply_to":"fa7ab95a_091e180c","updated":"2016-08-30 00:07:41.000000000","message":"the api layer will only return the attributes that are defined as part of resource collection attributes. it is not possible to send a new attribute such as error_reason that can apply for the entire set of resource collection. one way to implement this would be to return an empty list (similar to above) if the VNF status is in any one of the transition states (PENDING_*). Perform this check before calling the infra driver get_resource_info.","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":13485,"name":"Sripriya Seetharam","email":"sseetha@brocade.com","username":"Sripriya"},"change_message_id":"5f09acb740aa9a577eee4aa1ca907573dc0b9fb9","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        # Handling no-response from Heat"},{"line_number":636,"context_line":"        except Exception:"},{"line_number":637,"context_line":"            return [{\u0027name\u0027: \u0027\u0027, \u0027type\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027,"},{"line_number":638,"context_line":"                     \u0027error_reason\u0027: \"Couldnot retrieve resource details.\"}]"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_507f6a65","line":638,"range":{"start_line":638,"start_character":38,"end_line":638,"end_character":73},"in_reply_to":"fa7ab95a_306ca6cf","updated":"2016-08-30 00:09:14.000000000","message":"basically check if vnf status is ACTIVE then call infra driver else return empty","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"b827d1a5f16e5e4b79f2242efb32da8f81c04fab","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        # Handling no-response from Heat"},{"line_number":636,"context_line":"        except Exception:"},{"line_number":637,"context_line":"            return [{\u0027name\u0027: \u0027\u0027, \u0027type\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027,"},{"line_number":638,"context_line":"                     \u0027error_reason\u0027: \"Couldnot retrieve resource details.\"}]"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_093d7bdc","line":638,"range":{"start_line":638,"start_character":38,"end_line":638,"end_character":73},"in_reply_to":"fa7ab95a_507f6a65","updated":"2016-08-30 19:56:29.000000000","message":"Sounds good. We can revisit adding \"error_reason\" once api framework enhancements allow such things.","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"44077ac85ad6d5b0a52226be012606c9251626da","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        # Handling no-response from Heat"},{"line_number":636,"context_line":"        except Exception:"},{"line_number":637,"context_line":"            return [{\u0027name\u0027: \u0027\u0027, \u0027type\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027,"},{"line_number":638,"context_line":"                     \u0027error_reason\u0027: \"Couldnot retrieve resource details.\"}]"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_091e180c","line":638,"range":{"start_line":638,"start_character":38,"end_line":638,"end_character":73},"in_reply_to":"fa7ab95a_c57425d1","updated":"2016-08-26 19:01:09.000000000","message":"Yes, ACTIVE check logic above make sense. Even the failure handling in L636-638 looks good except it should be a single error response for the whole API.\n\nFor ACTIVE VNFs, we should send (resource list with empty error_reason),\n\n{ resources: [ r1, r2, r3, .. ],\n   error_reason: \"\" }\n\nFor IN-PROGRESS VNFs, we should send (empty resource list with valid error_reason)\n\n{ resources: [],\n   error_reason: \"VNF in transitional state, retry again later\" }\n\nFor ERROR / DEAD VNFs, we should send (empty resource list with appropriate error_reason)\n\n{ resources: [ ],\n   error_reason: \"VNF in invalid state\" }","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"b301dd97d4b16a8f90ce7d108192c92d9f75cb12","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        # Handling no-response from Heat"},{"line_number":636,"context_line":"        except Exception:"},{"line_number":637,"context_line":"            return [{\u0027name\u0027: \u0027\u0027, \u0027type\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027,"},{"line_number":638,"context_line":"                     \u0027error_reason\u0027: \"Couldnot retrieve resource details.\"}]"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_1d100f01","line":638,"range":{"start_line":638,"start_character":38,"end_line":638,"end_character":73},"in_reply_to":"fa7ab95a_c57425d1","updated":"2016-08-26 17:31:59.000000000","message":"agree with sridhar","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"5383e22cfbb0b4b08e575b2ba09659cca0f617d3","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        # Handling no-response from Heat"},{"line_number":636,"context_line":"        except Exception:"},{"line_number":637,"context_line":"            return [{\u0027name\u0027: \u0027\u0027, \u0027type\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027,"},{"line_number":638,"context_line":"                     \u0027error_reason\u0027: \"Couldnot retrieve resource details.\"}]"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_c57425d1","line":638,"range":{"start_line":638,"start_character":38,"end_line":638,"end_character":73},"in_reply_to":"fa7ab95a_e5e790aa","updated":"2016-08-26 12:50:19.000000000","message":"\u003e the plugin should try to dip into the infra-driver ONLY when VNF is in ACTIVE state\n\n@Sridhar, are you suggesting like this at L622?\n if vnf_info(\"status\") \u003d\u003d constants.ACTIVE:\n   vnf_detaisl \u003d ...\n\nerror_response was sent to API and client only once when details were not fetched due to heat failure like this [1].\n\nI have handled the failure scenario (L636 - 638) in plugin and not in infra-driver function.\n\nWith the new client patch, error_response will have to be removed completely.\n\n[1]. http://pastebin.com/KHpTd5nV","commit_id":"d4577945e1453ffb9f78da80986a314ef8547c42"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"c366512c74cb77544c1441a07de3474089cce9c1","unresolved":false,"context_lines":[{"line_number":604,"context_line":"                      \u0027id\u0027: info.get(\u0027id\u0027)}"},{"line_number":605,"context_line":"                    for name, info in vnf_details.iteritems()]"},{"line_number":606,"context_line":"            return resources"},{"line_number":607,"context_line":"        # Handling no-response from Heat, VNF not in active state"},{"line_number":608,"context_line":"        except Exception:"},{"line_number":609,"context_line":"            return [{\u0027name\u0027: \u0027\u0027, \u0027type\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027}]"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa7ab95a_05b474cf","line":609,"range":{"start_line":607,"start_character":0,"end_line":609,"end_character":55},"updated":"2016-08-30 23:32:18.000000000","message":"Can\u0027t we I think we can just return an empty list [] both when vnf status !\u003d ACTIVE and when infra driver errors out? I","commit_id":"420a7393760ac2d981e71e71587abc93f0aed98e"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"98c77db8b1708a2ffab28f6e1b1b2040c0dcec20","unresolved":false,"context_lines":[{"line_number":604,"context_line":"                      \u0027id\u0027: info.get(\u0027id\u0027)}"},{"line_number":605,"context_line":"                    for name, info in vnf_details.iteritems()]"},{"line_number":606,"context_line":"            return resources"},{"line_number":607,"context_line":"        # Handling no-response from Heat, VNF not in active state"},{"line_number":608,"context_line":"        except Exception:"},{"line_number":609,"context_line":"            return [{\u0027name\u0027: \u0027\u0027, \u0027type\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027}]"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa7ab95a_53d0fbf7","line":609,"range":{"start_line":607,"start_character":0,"end_line":609,"end_character":55},"in_reply_to":"fa7ab95a_05b474cf","updated":"2016-08-31 07:07:31.000000000","message":"Done","commit_id":"420a7393760ac2d981e71e71587abc93f0aed98e"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"0c316d1a90f2c262f4e296b9905a367367de1edb","unresolved":false,"context_lines":[{"line_number":604,"context_line":"                      \u0027id\u0027: info.get(\u0027id\u0027)}"},{"line_number":605,"context_line":"                    for name, info in vnf_details.items()]"},{"line_number":606,"context_line":"            return resources"},{"line_number":607,"context_line":"        # Handling no-response from Heat, VNF not in active state"},{"line_number":608,"context_line":"        except Exception:"},{"line_number":609,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa7ab95a_936e0095","line":607,"range":{"start_line":607,"start_character":36,"end_line":607,"end_character":40},"updated":"2016-08-31 08:24:10.000000000","message":"nit: don\u0027t assume Heat in this plugin layer. Use \"vim_infra_driver\"","commit_id":"92863d6dd5b38eb014c83158e127995fe0e3e71d"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"e315227f9fc145cf213f365dcc03e09338fc3a16","unresolved":false,"context_lines":[{"line_number":604,"context_line":"                      \u0027id\u0027: info.get(\u0027id\u0027)}"},{"line_number":605,"context_line":"                    for name, info in vnf_details.items()]"},{"line_number":606,"context_line":"            return resources"},{"line_number":607,"context_line":"        # Handling no-response from Heat, VNF not in active state"},{"line_number":608,"context_line":"        except Exception:"},{"line_number":609,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa7ab95a_6ada59eb","line":607,"range":{"start_line":607,"start_character":36,"end_line":607,"end_character":40},"in_reply_to":"fa7ab95a_936e0095","updated":"2016-08-31 09:33:55.000000000","message":"Done","commit_id":"92863d6dd5b38eb014c83158e127995fe0e3e71d"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"8f1f5bbc2d14c086d2c30a90e4618b50c14be6ae","unresolved":false,"context_lines":[{"line_number":649,"context_line":"        # Raise exception when VNF.status !\u003d ACTIVE"},{"line_number":650,"context_line":"        else:"},{"line_number":651,"context_line":"            raise vnfm.VNFInactive(vnf_id\u003dvnf_id,"},{"line_number":652,"context_line":"                                   message\u003d\u0027- Cannot fetch details\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a89bdaa_dd6c9637","line":652,"range":{"start_line":652,"start_character":46,"end_line":652,"end_character":52},"updated":"2016-09-07 07:06:39.000000000","message":"_(cannot fetch details of inactive VNF)","commit_id":"2006273b7373157a4e8a7aa8e8c7b19c4d2a7e6a"}]}
