)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"ed1d809aaea022928d0080826a4b256f7f3abefb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"7a3c09a3_fad1a7fc","line":14,"updated":"2017-01-13 21:14:01.000000000","message":"Add a Depends-On to point to the client patchset,\n\nhttps://review.openstack.org/#/c/414602/","commit_id":"fc2022a4b41d364b6f798189bdbeaadd718f0c1d"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"faec3bc64a34ab6ea7b2d984b87c76f56865a6d8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support VNF create from inline template"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Detect template source and create vnf accordingly. Return vnfds depending"},{"line_number":10,"context_line":"the API arguments."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I3c8bbe139dec27adbfc943d3ac9f909db8097f89"},{"line_number":13,"context_line":"Implements: blueprint vnf-inline-template"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7a3c09a3_409317fa","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":18},"updated":"2017-01-17 23:35:14.000000000","message":"Please reword to something like,\n\nAccept transient VNFD template as part of VNF creation without need \nfor VNFD onboarding into Tacker VNFD catalog.","commit_id":"7a5d4a86dc84513beb07a2737e695f080345d42b"}],"api-ref/source/v1/samples/vnfs/vnfs-create-request.json":[{"author":{"_account_id":19644,"name":"Yan Xing\u0027an","email":"yanxingan@cmss.chinamobile.com","username":"yanxingan"},"change_message_id":"0d21127721ea761898d2fbd0a301f8608c46721e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"vnf\": {"},{"line_number":3,"context_line":"        \"tenant_id\": \"6673e4d4e13340acb0b847f9ecde613b\","},{"line_number":4,"context_line":"        \"vnfd_id\": \"a04b47d1-e8ad-4ef9-8341-eafec398ce02\","},{"line_number":5,"context_line":"        \"vim_id\": \"f6bd6f24-7a0e-4111-8994-e108c5ee2ff2\","},{"line_number":6,"context_line":"        \"name\": \"OpenWRT\","},{"line_number":7,"context_line":"        \"description\": \"OpenWRT VNF\","}],"source_content_type":"application/json","patch_set":9,"id":"5a3905b3_2d5b2d56","line":4,"range":{"start_line":4,"start_character":8,"end_line":4,"end_character":58},"updated":"2017-01-19 01:54:35.000000000","message":"If vnf_template exists, the vnfd_id\u0027s value makes no sense, due to it will be replaced by new-created vnfd.\nIMO, it\u0027s better to add a new json file vnfs-create-request-inline.json","commit_id":"0e764cf63f1645a97162d5b10900c034e6299261"}],"tacker/api/v1/base.py":[{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"33ce3915477b7fc3eb7d3efea963904462d179b2","unresolved":false,"context_lines":[{"line_number":565,"context_line":"            for rule in attr_vals[\u0027validate\u0027]:"},{"line_number":566,"context_line":"                # skip validating vnfd_id when vnf_template is specified to"},{"line_number":567,"context_line":"                # create vnf"},{"line_number":568,"context_line":"                if resource \u003d\u003d \u0027vnf\u0027 and \u0027vnf_template\u0027 in body[\u0027vnf\u0027] and \\"},{"line_number":569,"context_line":"                   attr \u003d\u003d \"vnfd_id\" and is_create:"},{"line_number":570,"context_line":"                    continue"},{"line_number":571,"context_line":"                res \u003d attributes.validators[rule](res_dict[attr],"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_c315149c","line":568,"range":{"start_line":568,"start_character":42,"end_line":568,"end_character":54},"updated":"2017-01-18 20:03:33.000000000","message":"change it to \"vnfd_template\" to be consistent with API / CLI.","commit_id":"0e764cf63f1645a97162d5b10900c034e6299261"}],"tacker/common/utils.py":[{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"33ce3915477b7fc3eb7d3efea963904462d179b2","unresolved":false,"context_lines":[{"line_number":310,"context_line":"                                     remove_in\u003dremove_in)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"def create_name(resource, prefix\u003d\u0027tmpl\u0027):"},{"line_number":314,"context_line":"    return prefix + \u0027-\u0027 \\"},{"line_number":315,"context_line":"        + \u0027\u0027.join(random.SystemRandom().choice("},{"line_number":316,"context_line":"                  string.ascii_lowercase + string.digits)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_43692425","line":313,"range":{"start_line":313,"start_character":4,"end_line":313,"end_character":15},"updated":"2017-01-18 20:03:33.000000000","message":"nit: too generic, perhaps call it generate_inline_vnfd_name()","commit_id":"0e764cf63f1645a97162d5b10900c034e6299261"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"9834da135c0d2251c739fb06e8d43a3653281b9f","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"def generate_resource_name(resource, prefix\u003d\u0027tmpl\u0027):"},{"line_number":314,"context_line":"    return prefix + \u0027-\u0027 \\"},{"line_number":315,"context_line":"        + \u0027\u0027.join(random.SystemRandom().choice("},{"line_number":316,"context_line":"                  string.ascii_lowercase + string.digits)"},{"line_number":317,"context_line":"          for _ in range(16)) \\"},{"line_number":318,"context_line":"        + \u0027-\u0027 + resource"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a430d35_3a099d32","line":318,"range":{"start_line":314,"start_character":4,"end_line":318,"end_character":24},"updated":"2017-02-03 02:14:03.000000000","message":"probably you can just make use of uuid?","commit_id":"e7d92b5cf90df1de9e8dfb1cdf9e0fa60ec2674f"}],"tacker/db/vnfm/vnfm_db.py":[{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"e92fbc53d5c1588640921cc37f50b54db16dc073","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                                  backref\u003d\u0027vnfd\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    # vnf template source - inline or onboarded"},{"line_number":73,"context_line":"    template_source \u003d sa.Column(sa.String(255))"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class ServiceType(model_base.BASE, models_v1.HasId, models_v1.HasTenant):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_5c13855c","line":73,"range":{"start_line":73,"start_character":32,"end_line":73,"end_character":46},"updated":"2017-01-10 14:14:30.000000000","message":"this won\u0027t be sufficient. Check L#98","commit_id":"aa18803350806382090352cb6ba8fc36f962705d"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"e92fbc53d5c1588640921cc37f50b54db16dc073","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                # Delete inline VNFD"},{"line_number":306,"context_line":"                if vnfs_db.vnfd.template_source \u003d\u003d \"inline\" and \\"},{"line_number":307,"context_line":"                        vnfs_db.status \u003d\u003d \"PENDING_DELETE\":"},{"line_number":308,"context_line":"                    LOG.debug(_(\"Deleting VNFD %s\"), vnfs_db.vnfd.id)"},{"line_number":309,"context_line":"                    break"},{"line_number":310,"context_line":"                # Donot delete VNFD if VNF exists"},{"line_number":311,"context_line":"                elif vnfs_db.deleted_at is None:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_7cfda93a","line":308,"range":{"start_line":308,"start_character":61,"end_line":308,"end_character":68},"updated":"2017-01-10 14:14:30.000000000","message":"is it vnfd.id or vnfd_id?","commit_id":"aa18803350806382090352cb6ba8fc36f962705d"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"e92fbc53d5c1588640921cc37f50b54db16dc073","unresolved":false,"context_lines":[{"line_number":338,"context_line":"                                    self._make_vnfd_dict,"},{"line_number":339,"context_line":"                                    filters\u003dfilters, fields\u003dfields)"},{"line_number":340,"context_line":"        # drop inline templates"},{"line_number":341,"context_line":"        if not filters:"},{"line_number":342,"context_line":"            vnfds \u003d [vnfd for vnfd in vnfds if \"onboarded\" \u003d\u003d"},{"line_number":343,"context_line":"                     vnfd[\u0027template_source\u0027]]"},{"line_number":344,"context_line":"        return vnfds"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def choose_vnfd(self, context, service_type,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_fc4fd967","line":343,"range":{"start_line":341,"start_character":8,"end_line":343,"end_character":45},"updated":"2017-01-10 14:14:30.000000000","message":"if we specify any type of filters, do you want to show inline template?","commit_id":"aa18803350806382090352cb6ba8fc36f962705d"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"1c7244b968cdf3a9fc83c8a5b4472d9308290646","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            vnfs_db \u003d context.session.query(VNF).filter_by("},{"line_number":292,"context_line":"                vnfd_id\u003dvnfd_id).first()"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"            while vnfs_db is not None:"},{"line_number":295,"context_line":"                # Delete inline VNFD"},{"line_number":296,"context_line":"                if vnfs_db.vnfd.template_source \u003d\u003d \"inline\" and \\"},{"line_number":297,"context_line":"                        vnfs_db.status \u003d\u003d \"PENDING_DELETE\":"},{"line_number":298,"context_line":"                    LOG.debug(_(\"Deleting VNFD %s\"), vnfs_db.vnfd.id)"},{"line_number":299,"context_line":"                    break"},{"line_number":300,"context_line":"                # Donot delete VNFD if VNF exists"},{"line_number":301,"context_line":"                elif vnfs_db.deleted_at is None:"},{"line_number":302,"context_line":"                    raise vnfm.VNFDInUse(vnfd_id\u003dvnfd_id)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"            vnfd_db \u003d self._get_resource(context, VNFD,"},{"line_number":305,"context_line":"                                         vnfd_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a3c09a3_551e0cbb","line":302,"range":{"start_line":294,"start_character":0,"end_line":302,"end_character":57},"updated":"2017-01-13 21:12:33.000000000","message":"I\u0027d suggest you to avoid this code change. It feels too kludgy, specifically L296-297. Instead of this, can we change the delete_vnf() logic to call inline-vnfd delete once the vnf is totally removed ?","commit_id":"0329b1a3cba63289d9db86f8b8ca8d2ae6e672c8"},{"author":{"_account_id":19644,"name":"Yan Xing\u0027an","email":"yanxingan@cmss.chinamobile.com","username":"yanxingan"},"change_message_id":"9bc39e9e8ddb97ee64e6049f368ce0d0079692ca","unresolved":false,"context_lines":[{"line_number":297,"context_line":"                        vnfs_db.status \u003d\u003d \"PENDING_DELETE\":"},{"line_number":298,"context_line":"                    LOG.debug(_(\"Deleting VNFD %s\"), vnfs_db.vnfd.id)"},{"line_number":299,"context_line":"                    break"},{"line_number":300,"context_line":"                # Donot delete VNFD if VNF exists"},{"line_number":301,"context_line":"                elif vnfs_db.deleted_at is None:"},{"line_number":302,"context_line":"                    raise vnfm.VNFDInUse(vnfd_id\u003dvnfd_id)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"            vnfd_db \u003d self._get_resource(context, VNFD,"},{"line_number":305,"context_line":"                                         vnfd_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a57fde8_2a122563","line":302,"range":{"start_line":300,"start_character":0,"end_line":302,"end_character":57},"updated":"2017-01-12 14:51:21.000000000","message":"If there is an error in VNFMPlugin._delete_vnf_wait (i.e timeout to delete VDU via heat), in which the vnf\u0027s status is set to ERROR and vnf\u0027s deleted_at is None, then we got raise VNFDInUse exception. I think this exception is not appropriate if vnf is in error status.","commit_id":"0329b1a3cba63289d9db86f8b8ca8d2ae6e672c8"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"a2ce01f1c7171a1e839d92fead20a2f95260ecc9","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                                    self._make_vnfd_dict,"},{"line_number":329,"context_line":"                                    filters\u003dfilters, fields\u003dfields)"},{"line_number":330,"context_line":"        # drop inline templates"},{"line_number":331,"context_line":"        if not filters:"},{"line_number":332,"context_line":"            vnfds \u003d [vnfd for vnfd in vnfds if \"onboarded\" \u003d\u003d"},{"line_number":333,"context_line":"                     vnfd[\u0027template_source\u0027]]"},{"line_number":334,"context_line":"        return vnfds"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def choose_vnfd(self, context, service_type,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a57fde8_a7bbb50d","line":333,"range":{"start_line":331,"start_character":8,"end_line":333,"end_character":45},"updated":"2017-01-12 12:30:24.000000000","message":"Janki, what filter do I need to pass to check for VNFDs which are onboarded only?","commit_id":"0329b1a3cba63289d9db86f8b8ca8d2ae6e672c8"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"ed1d809aaea022928d0080826a4b256f7f3abefb","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            vnfs_db \u003d context.session.query(VNF).filter_by("},{"line_number":292,"context_line":"                vnfd_id\u003dvnfd_id).first()"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"            while vnfs_db is not None:"},{"line_number":295,"context_line":"                # Delete inline VNFD"},{"line_number":296,"context_line":"                if vnfs_db.vnfd.template_source \u003d\u003d \"inline\" and \\"},{"line_number":297,"context_line":"                        vnfs_db.status \u003d\u003d \"PENDING_DELETE\":"},{"line_number":298,"context_line":"                    LOG.debug(_(\"Deleting VNFD %s\"), vnfs_db.vnfd.id)"},{"line_number":299,"context_line":"                    break"},{"line_number":300,"context_line":"                # Donot delete VNFD if VNF exists"},{"line_number":301,"context_line":"                elif vnfs_db.deleted_at is None:"},{"line_number":302,"context_line":"                    raise vnfm.VNFDInUse(vnfd_id\u003dvnfd_id)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"            vnfd_db \u003d self._get_resource(context, VNFD,"},{"line_number":305,"context_line":"                                         vnfd_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_951dd475","line":302,"range":{"start_line":294,"start_character":0,"end_line":302,"end_character":57},"updated":"2017-01-13 21:14:01.000000000","message":"\u003crepeating the comment from PS6\u003e\n\nI\u0027d suggest you to avoid this code change. It feels too kludgy, specifically L296-297. Instead of this, can we change the delete_vnf() logic to call inline-vnfd delete once the vnf is totally removed ?","commit_id":"fc2022a4b41d364b6f798189bdbeaadd718f0c1d"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"ec303968843b4afe6f3f8f73dc8015bf28dda4e7","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            vnfs_db \u003d context.session.query(VNF).filter_by("},{"line_number":292,"context_line":"                vnfd_id\u003dvnfd_id).first()"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"            while vnfs_db is not None:"},{"line_number":295,"context_line":"                # Delete inline VNFD"},{"line_number":296,"context_line":"                if vnfs_db.vnfd.template_source \u003d\u003d \"inline\" and \\"},{"line_number":297,"context_line":"                        vnfs_db.status \u003d\u003d \"PENDING_DELETE\":"},{"line_number":298,"context_line":"                    LOG.debug(_(\"Deleting VNFD %s\"), vnfs_db.vnfd.id)"},{"line_number":299,"context_line":"                    break"},{"line_number":300,"context_line":"                # Donot delete VNFD if VNF exists"},{"line_number":301,"context_line":"                elif vnfs_db.deleted_at is None:"},{"line_number":302,"context_line":"                    raise vnfm.VNFDInUse(vnfd_id\u003dvnfd_id)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"            vnfd_db \u003d self._get_resource(context, VNFD,"},{"line_number":305,"context_line":"                                         vnfd_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_305719cb","line":302,"range":{"start_line":294,"start_character":0,"end_line":302,"end_character":57},"in_reply_to":"7a3c09a3_30c82074","updated":"2017-01-18 14:16:30.000000000","message":"Yes, correct. I missed that it is called in _delete_vnf_wait too :(.","commit_id":"fc2022a4b41d364b6f798189bdbeaadd718f0c1d"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"5282ca3864a8e0d508cbb11df3a0967bef557ba0","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            vnfs_db \u003d context.session.query(VNF).filter_by("},{"line_number":292,"context_line":"                vnfd_id\u003dvnfd_id).first()"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"            while vnfs_db is not None:"},{"line_number":295,"context_line":"                # Delete inline VNFD"},{"line_number":296,"context_line":"                if vnfs_db.vnfd.template_source \u003d\u003d \"inline\" and \\"},{"line_number":297,"context_line":"                        vnfs_db.status \u003d\u003d \"PENDING_DELETE\":"},{"line_number":298,"context_line":"                    LOG.debug(_(\"Deleting VNFD %s\"), vnfs_db.vnfd.id)"},{"line_number":299,"context_line":"                    break"},{"line_number":300,"context_line":"                # Donot delete VNFD if VNF exists"},{"line_number":301,"context_line":"                elif vnfs_db.deleted_at is None:"},{"line_number":302,"context_line":"                    raise vnfm.VNFDInUse(vnfd_id\u003dvnfd_id)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"            vnfd_db \u003d self._get_resource(context, VNFD,"},{"line_number":305,"context_line":"                                         vnfd_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_ecbf275e","line":302,"range":{"start_line":294,"start_character":0,"end_line":302,"end_character":57},"in_reply_to":"7a3c09a3_951dd475","updated":"2017-01-14 09:44:54.000000000","message":"Agree with you, Sridhar. I couldnot think of a way to constantly monitor the vnf deletion and then call delete_vnfd(). simply putting wait() wont be sufficient I think.","commit_id":"fc2022a4b41d364b6f798189bdbeaadd718f0c1d"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"fe3c95bade3ed39e466687fcb512ba4a0bc598b6","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            vnfs_db \u003d context.session.query(VNF).filter_by("},{"line_number":292,"context_line":"                vnfd_id\u003dvnfd_id).first()"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"            while vnfs_db is not None:"},{"line_number":295,"context_line":"                # Delete inline VNFD"},{"line_number":296,"context_line":"                if vnfs_db.vnfd.template_source \u003d\u003d \"inline\" and \\"},{"line_number":297,"context_line":"                        vnfs_db.status \u003d\u003d \"PENDING_DELETE\":"},{"line_number":298,"context_line":"                    LOG.debug(_(\"Deleting VNFD %s\"), vnfs_db.vnfd.id)"},{"line_number":299,"context_line":"                    break"},{"line_number":300,"context_line":"                # Donot delete VNFD if VNF exists"},{"line_number":301,"context_line":"                elif vnfs_db.deleted_at is None:"},{"line_number":302,"context_line":"                    raise vnfm.VNFDInUse(vnfd_id\u003dvnfd_id)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"            vnfd_db \u003d self._get_resource(context, VNFD,"},{"line_number":305,"context_line":"                                         vnfd_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_30c82074","line":302,"range":{"start_line":294,"start_character":0,"end_line":302,"end_character":57},"in_reply_to":"7a3c09a3_ecbf275e","updated":"2017-01-17 22:03:17.000000000","message":"Can\u0027t you call vnfd delete operation in _delete_vnf_post [1] ?\n\n[1] https://github.com/openstack/tacker/blob/master/tacker/db/vnfm/vnfm_db.py#L521","commit_id":"fc2022a4b41d364b6f798189bdbeaadd718f0c1d"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"ec303968843b4afe6f3f8f73dc8015bf28dda4e7","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            vnfs_db \u003d context.session.query(VNF).filter_by("},{"line_number":292,"context_line":"                vnfd_id\u003dvnfd_id).first()"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"            while vnfs_db is not None:"},{"line_number":295,"context_line":"                # Delete inline VNFD"},{"line_number":296,"context_line":"                if vnfs_db.vnfd.template_source \u003d\u003d \"inline\" and \\"},{"line_number":297,"context_line":"                        vnfs_db.status \u003d\u003d \"PENDING_DELETE\":"},{"line_number":298,"context_line":"                    LOG.debug(_(\"Deleting VNFD %s\"), vnfs_db.vnfd.id)"},{"line_number":299,"context_line":"                    break"},{"line_number":300,"context_line":"                # Donot delete VNFD if VNF exists"},{"line_number":301,"context_line":"                elif vnfs_db.deleted_at is None:"},{"line_number":302,"context_line":"                    raise vnfm.VNFDInUse(vnfd_id\u003dvnfd_id)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"            vnfd_db \u003d self._get_resource(context, VNFD,"},{"line_number":305,"context_line":"                                         vnfd_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_1064ddb6","line":302,"range":{"start_line":294,"start_character":0,"end_line":302,"end_character":57},"in_reply_to":"7a3c09a3_ecbf275e","updated":"2017-01-18 14:16:30.000000000","message":"Done","commit_id":"fc2022a4b41d364b6f798189bdbeaadd718f0c1d"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"a2ba152e82e65736911eceb6ed5e044d502cbb1a","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                                    self._make_vnfd_dict,"},{"line_number":329,"context_line":"                                    filters\u003dfilters, fields\u003dfields)"},{"line_number":330,"context_line":"        # drop inline templates"},{"line_number":331,"context_line":"        if not filters:"},{"line_number":332,"context_line":"            vnfds \u003d [vnfd for vnfd in vnfds if \"onboarded\" \u003d\u003d"},{"line_number":333,"context_line":"                     vnfd[\u0027template_source\u0027]]"},{"line_number":334,"context_line":"        return vnfds"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def choose_vnfd(self, context, service_type,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_a2bba30d","line":333,"range":{"start_line":331,"start_character":8,"end_line":333,"end_character":45},"updated":"2017-01-12 12:52:27.000000000","message":"check for only specific filter","commit_id":"fc2022a4b41d364b6f798189bdbeaadd718f0c1d"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"5282ca3864a8e0d508cbb11df3a0967bef557ba0","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                                    self._make_vnfd_dict,"},{"line_number":329,"context_line":"                                    filters\u003dfilters, fields\u003dfields)"},{"line_number":330,"context_line":"        # drop inline templates"},{"line_number":331,"context_line":"        if not filters:"},{"line_number":332,"context_line":"            vnfds \u003d [vnfd for vnfd in vnfds if \"onboarded\" \u003d\u003d"},{"line_number":333,"context_line":"                     vnfd[\u0027template_source\u0027]]"},{"line_number":334,"context_line":"        return vnfds"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def choose_vnfd(self, context, service_type,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_6cac1736","line":333,"range":{"start_line":331,"start_character":8,"end_line":333,"end_character":45},"in_reply_to":"9a57fde8_a2bba30d","updated":"2017-01-14 09:44:54.000000000","message":"Bharat, as of now, there are not specific filters defined. This thought had crossed my mind but then I remember checking for other filters which won\u0027t make any difference. I will still change it just to be on safer side.","commit_id":"fc2022a4b41d364b6f798189bdbeaadd718f0c1d"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"33ce3915477b7fc3eb7d3efea963904462d179b2","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    attributes \u003d orm.relationship(\u0027VNFDAttribute\u0027,"},{"line_number":68,"context_line":"                                  backref\u003d\u0027vnfd\u0027)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    # vnf template source - inline or onboarded"},{"line_number":71,"context_line":"    template_source \u003d sa.Column(sa.String(255))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_83f86c4b","line":70,"range":{"start_line":70,"start_character":6,"end_line":70,"end_character":9},"updated":"2017-01-18 20:03:33.000000000","message":"vnfd","commit_id":"0e764cf63f1645a97162d5b10900c034e6299261"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"33ce3915477b7fc3eb7d3efea963904462d179b2","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":292,"context_line":"            # TODO(yamahata): race. prevent from newly inserting hosting vnf"},{"line_number":293,"context_line":"            #                 that refers to this vnfd"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"            vnfs_db \u003d context.session.query(VNF).filter_by("},{"line_number":296,"context_line":"                vnfd_id\u003dvnfd_id).first()"},{"line_number":297,"context_line":"            if vnfs_db is not None and vnfs_db.deleted_at is None:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_834a2cab","line":294,"updated":"2017-01-18 20:03:33.000000000","message":"please avoid such spurious code changes.","commit_id":"0e764cf63f1645a97162d5b10900c034e6299261"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"33ce3915477b7fc3eb7d3efea963904462d179b2","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            vnfs_db \u003d context.session.query(VNF).filter_by("},{"line_number":296,"context_line":"                vnfd_id\u003dvnfd_id).first()"},{"line_number":297,"context_line":"            if vnfs_db is not None and vnfs_db.deleted_at is None:"},{"line_number":298,"context_line":"                raise vnfm.VNFDInUse(vnfd_id\u003dvnfd_id)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"            vnfd_db \u003d self._get_resource(context, VNFD,"},{"line_number":301,"context_line":"                                         vnfd_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_c3ca741a","line":298,"range":{"start_line":298,"start_character":16,"end_line":298,"end_character":53},"updated":"2017-01-18 20:03:33.000000000","message":"spurious change","commit_id":"0e764cf63f1645a97162d5b10900c034e6299261"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"33ce3915477b7fc3eb7d3efea963904462d179b2","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"            vnfd_db \u003d self._get_resource(context, VNFD,"},{"line_number":301,"context_line":"                                         vnfd_id)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"            if soft_delete:"},{"line_number":304,"context_line":"                vnfd_db.update({\u0027deleted_at\u0027: timeutils.utcnow()})"},{"line_number":305,"context_line":"                self._cos_db_plg.create_event("}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_c3f1946c","line":302,"updated":"2017-01-18 20:03:33.000000000","message":"spurious change","commit_id":"0e764cf63f1645a97162d5b10900c034e6299261"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"812c4ca0897f57a67cc86b4056623c228f7ae410","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    def get_vnfds(self, context, filters, fields\u003dNone):"},{"line_number":320,"context_line":"        if filters.get(\u0027template_source\u0027) and \\"},{"line_number":321,"context_line":"           filters[\u0027template_source\u0027][0] \u003d\u003d \u0027all\u0027:"},{"line_number":322,"context_line":"                filters \u003d {}"},{"line_number":323,"context_line":"        vnfds \u003d self._get_collection(context, VNFD,"},{"line_number":324,"context_line":"                                    self._make_vnfd_dict,"},{"line_number":325,"context_line":"                                    filters\u003dfilters, fields\u003dfields)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_967944ff","line":322,"range":{"start_line":321,"start_character":10,"end_line":322,"end_character":28},"updated":"2017-01-20 09:00:57.000000000","message":"filters.pop(\u0027template_source\u0027)","commit_id":"dc096df8f929ac69835894773cfce157cb2595c1"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"7c4e84535417e9f231775bdb693475db5c172449","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    def get_vnfds(self, context, filters, fields\u003dNone):"},{"line_number":320,"context_line":"        if filters.get(\u0027template_source\u0027) and \\"},{"line_number":321,"context_line":"           filters[\u0027template_source\u0027][0] \u003d\u003d \u0027all\u0027:"},{"line_number":322,"context_line":"                filters \u003d {}"},{"line_number":323,"context_line":"        vnfds \u003d self._get_collection(context, VNFD,"},{"line_number":324,"context_line":"                                    self._make_vnfd_dict,"},{"line_number":325,"context_line":"                                    filters\u003dfilters, fields\u003dfields)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_9fa6b051","line":322,"range":{"start_line":321,"start_character":10,"end_line":322,"end_character":28},"in_reply_to":"5a3905b3_967944ff","updated":"2017-01-20 11:41:27.000000000","message":"Done","commit_id":"dc096df8f929ac69835894773cfce157cb2595c1"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"27cf4eea92d0ee63134f6745dc0bd4dfa0e81112","unresolved":false,"context_lines":[{"line_number":561,"context_line":"                     filter(VNFAttribute.vnf_id \u003d\u003d vnf_id).delete())"},{"line_number":562,"context_line":"                    query.delete()"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"        # Delete corresponding vnfd"},{"line_number":565,"context_line":"        if vnf_dict[\u0027vnfd\u0027][\u0027template_source\u0027] \u003d\u003d \"inline\":"},{"line_number":566,"context_line":"            self.delete_vnfd(context, vnf_dict[\"vnfd_id\"])"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    # reference implementation. needs to be overrided by subclass"},{"line_number":569,"context_line":"    def create_vnf(self, context, vnf):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_a4828f92","line":566,"range":{"start_line":564,"start_character":0,"end_line":566,"end_character":58},"updated":"2017-01-20 05:54:36.000000000","message":"put this into transaction scope","commit_id":"dc096df8f929ac69835894773cfce157cb2595c1"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"83ee0f8a80cd605c79ebafe659c24c951695f004","unresolved":false,"context_lines":[{"line_number":561,"context_line":"                     filter(VNFAttribute.vnf_id \u003d\u003d vnf_id).delete())"},{"line_number":562,"context_line":"                    query.delete()"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"        # Delete corresponding vnfd"},{"line_number":565,"context_line":"        if vnf_dict[\u0027vnfd\u0027][\u0027template_source\u0027] \u003d\u003d \"inline\":"},{"line_number":566,"context_line":"            self.delete_vnfd(context, vnf_dict[\"vnfd_id\"])"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    # reference implementation. needs to be overrided by subclass"},{"line_number":569,"context_line":"    def create_vnf(self, context, vnf):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_58ec6c8f","line":566,"range":{"start_line":564,"start_character":0,"end_line":566,"end_character":58},"in_reply_to":"5a3905b3_a4828f92","updated":"2017-01-20 11:11:52.000000000","message":"Done","commit_id":"dc096df8f929ac69835894773cfce157cb2595c1"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"83b542000b3a8dd94ad946155b1ecd367dbce76e","unresolved":false,"context_lines":[{"line_number":560,"context_line":"                     filter(VNFAttribute.vnf_id \u003d\u003d vnf_id).delete())"},{"line_number":561,"context_line":"                    query.delete()"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"            # Delete corresponding vnfd"},{"line_number":564,"context_line":"            if vnf_dict[\u0027vnfd\u0027][\u0027template_source\u0027] \u003d\u003d \"inline\":"},{"line_number":565,"context_line":"                self.delete_vnfd(context, vnf_dict[\"vnfd_id\"])"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    # reference implementation. needs to be overrided by subclass"},{"line_number":568,"context_line":"    def create_vnf(self, context, vnf):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a3905b3_e5c0df2c","line":565,"range":{"start_line":563,"start_character":0,"end_line":565,"end_character":62},"updated":"2017-01-21 02:35:01.000000000","message":"we should put it along with line 559-561","commit_id":"cef89cb23a5b741fb613ae67312b4c564ccabf12"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"7b60557567d8573d85534173b822cdb26e86afeb","unresolved":false,"context_lines":[{"line_number":560,"context_line":"                     filter(VNFAttribute.vnf_id \u003d\u003d vnf_id).delete())"},{"line_number":561,"context_line":"                    query.delete()"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"            # Delete corresponding vnfd"},{"line_number":564,"context_line":"            if vnf_dict[\u0027vnfd\u0027][\u0027template_source\u0027] \u003d\u003d \"inline\":"},{"line_number":565,"context_line":"                self.delete_vnfd(context, vnf_dict[\"vnfd_id\"])"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    # reference implementation. needs to be overrided by subclass"},{"line_number":568,"context_line":"    def create_vnf(self, context, vnf):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a3905b3_ae053815","line":565,"range":{"start_line":563,"start_character":0,"end_line":565,"end_character":62},"in_reply_to":"5a3905b3_e5c0df2c","updated":"2017-01-25 07:26:24.000000000","message":"I think it should be de-indented. The above lines are for DB transactions and vnfd delete is an additional functionality decoupled from db stuff or it should be along line 558.","commit_id":"cef89cb23a5b741fb613ae67312b4c564ccabf12"}],"tacker/extensions/vnfm.py":[{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"33ce3915477b7fc3eb7d3efea963904462d179b2","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":245,"context_line":"            \u0027is_visible\u0027: True,"},{"line_number":246,"context_line":"        },"},{"line_number":247,"context_line":"        \u0027template_source\u0027: {"},{"line_number":248,"context_line":"            \u0027allow_post\u0027: False,"},{"line_number":249,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":250,"context_line":"            \u0027is_visible\u0027: True,"},{"line_number":251,"context_line":"        },"},{"line_number":252,"context_line":"    },"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    \u0027vnfs\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_f5072716","line":251,"range":{"start_line":247,"start_character":0,"end_line":251,"end_character":10},"updated":"2017-01-18 20:03:33.000000000","message":"this can\u0027t be a mandatory attr, say if an older tackerclient is used to create vnfd on a newer Ocata tacker-server. So, add default: \u0027onboarded\u0027","commit_id":"0e764cf63f1645a97162d5b10900c034e6299261"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"33ce3915477b7fc3eb7d3efea963904462d179b2","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":340,"context_line":"            \u0027is_visible\u0027: True,"},{"line_number":341,"context_line":"        },"},{"line_number":342,"context_line":"        \u0027vnf_template\u0027: {"},{"line_number":343,"context_line":"            \u0027allow_post\u0027: True,"},{"line_number":344,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":345,"context_line":"            \u0027validate\u0027: {\u0027type:dict_or_none\u0027: None},"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_43acc435","line":342,"range":{"start_line":342,"start_character":9,"end_line":342,"end_character":21},"updated":"2017-01-18 20:03:33.000000000","message":"change to \"vnfd_template\"","commit_id":"0e764cf63f1645a97162d5b10900c034e6299261"}],"tacker/tests/functional/vnfm/test_tosca_vnf.py":[{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"33ce3915477b7fc3eb7d3efea963904462d179b2","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        if template_source \u003d\u003d \u0027inline\u0027:"},{"line_number":52,"context_line":"            # create vnf directly from template"},{"line_number":53,"context_line":"            template \u003d yaml.load(values_str)"},{"line_number":54,"context_line":"            vnf_arg \u003d {\u0027vnf\u0027: {\u0027vnf_template\u0027: template, \u0027name\u0027: vnf_name}}"},{"line_number":55,"context_line":"            vnf_instance \u003d self.client.create_vnf(body\u003dvnf_arg)"},{"line_number":56,"context_line":"            vnfd_id \u003d vnf_instance[\u0027vnf\u0027][\u0027vnfd_id\u0027]"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_e3421068","line":54,"range":{"start_line":54,"start_character":32,"end_line":54,"end_character":44},"updated":"2017-01-18 20:03:33.000000000","message":"vnfd_template","commit_id":"0e764cf63f1645a97162d5b10900c034e6299261"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"83b542000b3a8dd94ad946155b1ecd367dbce76e","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_create_delete_vnf_from_template(self):"},{"line_number":135,"context_line":"        self._test_create_delete_vnf_tosca(\u0027sample-tosca-vnfd.yaml\u0027,"},{"line_number":136,"context_line":"                                           \u0027test_tosca_vnf_with_cirros\u0027,"},{"line_number":137,"context_line":"                                           \u0027inline\u0027)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def test_create_delete_vnf_static_ip(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a3905b3_2564a747","line":136,"range":{"start_line":136,"start_character":44,"end_line":136,"end_character":70},"updated":"2017-01-21 02:35:01.000000000","message":"use a different vnf name","commit_id":"cef89cb23a5b741fb613ae67312b4c564ccabf12"},{"author":{"_account_id":12455,"name":"bharaththiruveedula","email":"bharath_ves@hotmail.com","username":"bharaththiruveedula"},"change_message_id":"54eab97be7ab1d912f50660f72595c55b519fdc2","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_create_delete_vnf_from_template(self):"},{"line_number":135,"context_line":"        self._test_create_delete_vnf_tosca(\u0027sample-tosca-vnfd.yaml\u0027,"},{"line_number":136,"context_line":"                                           \u0027test_tosca_vnf_with_cirros\u0027,"},{"line_number":137,"context_line":"                                           \u0027inline\u0027)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def test_create_delete_vnf_static_ip(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a3905b3_0344d918","line":136,"range":{"start_line":136,"start_character":44,"end_line":136,"end_character":70},"in_reply_to":"5a3905b3_2564a747","updated":"2017-01-23 10:30:54.000000000","message":"+1, as some other  FTs are failing because of other FTs has same vnfd name but not deleted.","commit_id":"cef89cb23a5b741fb613ae67312b4c564ccabf12"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"0206f4331ff424b53aa4384fb3e1537080d494c0","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            vdu_ports.append(port[\u0027name\u0027])"},{"line_number":125,"context_line":"        self.assertIn(\u0027test-cp\u0027, vdu_ports)"},{"line_number":126,"context_line":"        self._test_delete_vnf(vnf_id)"},{"line_number":127,"context_line":"        self._test_cleanup_vnfd(vnfd_id, vnf_id)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def test_create_delete_vnf_tosca_from_vnfd(self):"},{"line_number":130,"context_line":"        self._test_create_delete_vnf_tosca(\u0027sample-tosca-vnfd.yaml\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a430d35_967305e7","line":127,"range":{"start_line":127,"start_character":13,"end_line":127,"end_character":31},"updated":"2017-02-06 08:05:53.000000000","message":"isn\u0027t the inlined vnfd deleted after vnf is deleted?","commit_id":"5c74fc9ca49ae5f668586658a073b7096c52f8ae"}],"tacker/tests/unit/db/utils.py":[{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"33ce3915477b7fc3eb7d3efea963904462d179b2","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def get_dummy_inline_vnf_obj():"},{"line_number":71,"context_line":"    return {\u0027vnf\u0027: {\u0027description\u0027: \u0027dummy_inline_vnf_description\u0027,"},{"line_number":72,"context_line":"                    \u0027vnf_template\u0027: yaml.safe_load(tosca_vnfd_openwrt),"},{"line_number":73,"context_line":"                    \u0027vim_id\u0027: u\u00276261579e-d6f3-49ad-8bc3-a9cb974778ff\u0027,"},{"line_number":74,"context_line":"                    \u0027tenant_id\u0027: u\u0027ad7ebc56538745a08ef7c5e97f8bd437\u0027,"},{"line_number":75,"context_line":"                    \u0027name\u0027: \u0027dummy_inline_vnf\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_b5991fd3","line":72,"range":{"start_line":72,"start_character":21,"end_line":72,"end_character":33},"updated":"2017-01-18 20:03:33.000000000","message":"vnfd_template","commit_id":"0e764cf63f1645a97162d5b10900c034e6299261"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"33ce3915477b7fc3eb7d3efea963904462d179b2","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                    \u0027tenant_id\u0027: u\u0027ad7ebc56538745a08ef7c5e97f8bd437\u0027,"},{"line_number":85,"context_line":"                    \u0027name\u0027: \u0027dummy_vnf\u0027,"},{"line_number":86,"context_line":"                    \u0027attributes\u0027: {},"},{"line_number":87,"context_line":"                    \u0027vnf_template\u0027: None}}"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def get_dummy_vnf_config_obj():"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_958c2381","line":87,"range":{"start_line":87,"start_character":20,"end_line":87,"end_character":40},"updated":"2017-01-18 20:03:33.000000000","message":"Do you really need this since vnf_template is not a mandatory attr for vnf creation api.","commit_id":"0e764cf63f1645a97162d5b10900c034e6299261"}],"tacker/vnfm/plugin.py":[{"author":{"_account_id":19644,"name":"Yan Xing\u0027an","email":"yanxingan@cmss.chinamobile.com","username":"yanxingan"},"change_message_id":"9bc39e9e8ddb97ee64e6049f368ce0d0079692ca","unresolved":false,"context_lines":[{"line_number":525,"context_line":"                     driver_name)"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        # Delete the corresponding inline VNFD"},{"line_number":528,"context_line":"        if vnf_dict[\u0027vnfd\u0027][\u0027template_source\u0027] \u003d\u003d \"inline\":"},{"line_number":529,"context_line":"            self.delete_vnfd(context, vnf_dict[\"vnfd_id\"])"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    def _handle_vnf_scaling(self, context, policy):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a57fde8_d5877a10","line":528,"range":{"start_line":528,"start_character":8,"end_line":528,"end_character":59},"updated":"2017-01-12 14:51:21.000000000","message":"If vnf is in ERROR status, no need to delete vnfd, i think. But I have another question, if a vnf is error, how to process the vnf? Seams deleting error vnf once more will get error again.","commit_id":"0329b1a3cba63289d9db86f8b8ca8d2ae6e672c8"},{"author":{"_account_id":13380,"name":"Sridhar Ramaswamy","email":"srics.r@gmail.com","username":"srics-r"},"change_message_id":"ed1d809aaea022928d0080826a4b256f7f3abefb","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        # if vnf_template specified, create vnfd from template"},{"line_number":346,"context_line":"        # create template dictionary structure same as needed in create_vnfd()"},{"line_number":347,"context_line":"        if vnf_info[\u0027vnf_template\u0027] is not None:"},{"line_number":348,"context_line":"            vnfd_name \u003d \u0027tmpl-\u0027 \\"},{"line_number":349,"context_line":"                        + \u0027\u0027.join(random.SystemRandom().choice("},{"line_number":350,"context_line":"                                  string.ascii_lowercase + string.digits)"},{"line_number":351,"context_line":"                                  for _ in range(16)) \\"},{"line_number":352,"context_line":"                        + \u0027-\u0027 + name"},{"line_number":353,"context_line":"            vnfd \u003d {\u0027vnfd\u0027: {\u0027attributes\u0027: {\u0027vnfd\u0027: vnf_info[\u0027vnf_template\u0027]},"},{"line_number":354,"context_line":"                             \u0027name\u0027: vnfd_name,"},{"line_number":355,"context_line":"                             \u0027template_source\u0027: \u0027inline\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_7ad05754","line":352,"range":{"start_line":348,"start_character":24,"end_line":352,"end_character":36},"updated":"2017-01-13 21:14:01.000000000","message":"Move this to a util method to generate vnfd_name. create_vnf() is a key method. Let\u0027s keep in concise.","commit_id":"fc2022a4b41d364b6f798189bdbeaadd718f0c1d"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"5282ca3864a8e0d508cbb11df3a0967bef557ba0","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        # if vnf_template specified, create vnfd from template"},{"line_number":346,"context_line":"        # create template dictionary structure same as needed in create_vnfd()"},{"line_number":347,"context_line":"        if vnf_info[\u0027vnf_template\u0027] is not None:"},{"line_number":348,"context_line":"            vnfd_name \u003d \u0027tmpl-\u0027 \\"},{"line_number":349,"context_line":"                        + \u0027\u0027.join(random.SystemRandom().choice("},{"line_number":350,"context_line":"                                  string.ascii_lowercase + string.digits)"},{"line_number":351,"context_line":"                                  for _ in range(16)) \\"},{"line_number":352,"context_line":"                        + \u0027-\u0027 + name"},{"line_number":353,"context_line":"            vnfd \u003d {\u0027vnfd\u0027: {\u0027attributes\u0027: {\u0027vnfd\u0027: vnf_info[\u0027vnf_template\u0027]},"},{"line_number":354,"context_line":"                             \u0027name\u0027: vnfd_name,"},{"line_number":355,"context_line":"                             \u0027template_source\u0027: \u0027inline\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_aca6ff50","line":352,"range":{"start_line":348,"start_character":24,"end_line":352,"end_character":36},"in_reply_to":"7a3c09a3_7ad05754","updated":"2017-01-14 09:44:54.000000000","message":"Done","commit_id":"fc2022a4b41d364b6f798189bdbeaadd718f0c1d"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"27cf4eea92d0ee63134f6745dc0bd4dfa0e81112","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # if vnfd_template specified, create vnfd from template"},{"line_number":344,"context_line":"        # create template dictionary structure same as needed in create_vnfd()"},{"line_number":345,"context_line":"        if vnf_info[\u0027vnfd_template\u0027] is not None:"},{"line_number":346,"context_line":"            vnfd_name \u003d utils.generate_resource_name(name, \u0027inline\u0027)"},{"line_number":347,"context_line":"            vnfd \u003d {\u0027vnfd\u0027: {\u0027attributes\u0027: {\u0027vnfd\u0027: vnf_info[\u0027vnfd_template\u0027]},"},{"line_number":348,"context_line":"                             \u0027name\u0027: vnfd_name,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_676989be","line":345,"range":{"start_line":345,"start_character":11,"end_line":345,"end_character":37},"updated":"2017-01-20 05:54:36.000000000","message":"if vnf_info.get(\u0027vnfd_template\u0027) is safer than this.","commit_id":"dc096df8f929ac69835894773cfce157cb2595c1"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"83ee0f8a80cd605c79ebafe659c24c951695f004","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # if vnfd_template specified, create vnfd from template"},{"line_number":344,"context_line":"        # create template dictionary structure same as needed in create_vnfd()"},{"line_number":345,"context_line":"        if vnf_info[\u0027vnfd_template\u0027] is not None:"},{"line_number":346,"context_line":"            vnfd_name \u003d utils.generate_resource_name(name, \u0027inline\u0027)"},{"line_number":347,"context_line":"            vnfd \u003d {\u0027vnfd\u0027: {\u0027attributes\u0027: {\u0027vnfd\u0027: vnf_info[\u0027vnfd_template\u0027]},"},{"line_number":348,"context_line":"                             \u0027name\u0027: vnfd_name,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_f8eef889","line":345,"range":{"start_line":345,"start_character":11,"end_line":345,"end_character":37},"in_reply_to":"5a3905b3_676989be","updated":"2017-01-20 11:11:52.000000000","message":"Done","commit_id":"dc096df8f929ac69835894773cfce157cb2595c1"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"27cf4eea92d0ee63134f6745dc0bd4dfa0e81112","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # if vnfd_template specified, create vnfd from template"},{"line_number":344,"context_line":"        # create template dictionary structure same as needed in create_vnfd()"},{"line_number":345,"context_line":"        if vnf_info[\u0027vnfd_template\u0027] is not None:"},{"line_number":346,"context_line":"            vnfd_name \u003d utils.generate_resource_name(name, \u0027inline\u0027)"},{"line_number":347,"context_line":"            vnfd \u003d {\u0027vnfd\u0027: {\u0027attributes\u0027: {\u0027vnfd\u0027: vnf_info[\u0027vnfd_template\u0027]},"},{"line_number":348,"context_line":"                             \u0027name\u0027: vnfd_name,"},{"line_number":349,"context_line":"                             \u0027template_source\u0027: \u0027inline\u0027,"},{"line_number":350,"context_line":"                             \u0027service_types\u0027: [{\u0027service_type\u0027: \u0027vnfd\u0027}]}}"},{"line_number":351,"context_line":"            vnf_info[\u0027vnfd_id\u0027] \u003d self.create_vnfd(context, vnfd).get(\u0027id\u0027)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        vnf_attributes \u003d vnf_info[\u0027attributes\u0027]"},{"line_number":354,"context_line":"        if vnf_attributes.get(\u0027param_values\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_475bad2e","line":351,"range":{"start_line":345,"start_character":0,"end_line":351,"end_character":75},"updated":"2017-01-20 05:54:36.000000000","message":"we need to make sure the inline vnfd will be deleted if we failed to create vnf db record.","commit_id":"dc096df8f929ac69835894773cfce157cb2595c1"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"26d753c25846578a6fd9a194f7a1d272061b89de","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # if vnfd_template specified, create vnfd from template"},{"line_number":344,"context_line":"        # create template dictionary structure same as needed in create_vnfd()"},{"line_number":345,"context_line":"        if vnf_info[\u0027vnfd_template\u0027] is not None:"},{"line_number":346,"context_line":"            vnfd_name \u003d utils.generate_resource_name(name, \u0027inline\u0027)"},{"line_number":347,"context_line":"            vnfd \u003d {\u0027vnfd\u0027: {\u0027attributes\u0027: {\u0027vnfd\u0027: vnf_info[\u0027vnfd_template\u0027]},"},{"line_number":348,"context_line":"                             \u0027name\u0027: vnfd_name,"},{"line_number":349,"context_line":"                             \u0027template_source\u0027: \u0027inline\u0027,"},{"line_number":350,"context_line":"                             \u0027service_types\u0027: [{\u0027service_type\u0027: \u0027vnfd\u0027}]}}"},{"line_number":351,"context_line":"            vnf_info[\u0027vnfd_id\u0027] \u003d self.create_vnfd(context, vnfd).get(\u0027id\u0027)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        vnf_attributes \u003d vnf_info[\u0027attributes\u0027]"},{"line_number":354,"context_line":"        if vnf_attributes.get(\u0027param_values\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_353b1dd3","line":351,"range":{"start_line":345,"start_character":0,"end_line":351,"end_character":75},"in_reply_to":"5a3905b3_3227b313","updated":"2017-01-20 11:47:12.000000000","message":"seems make sense. we just need to make sure vnf exist if its inline vnfd exists.","commit_id":"dc096df8f929ac69835894773cfce157cb2595c1"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"5a690cbfd900d7325c56589eebdcdd7e3c8cfd6d","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # if vnfd_template specified, create vnfd from template"},{"line_number":344,"context_line":"        # create template dictionary structure same as needed in create_vnfd()"},{"line_number":345,"context_line":"        if vnf_info[\u0027vnfd_template\u0027] is not None:"},{"line_number":346,"context_line":"            vnfd_name \u003d utils.generate_resource_name(name, \u0027inline\u0027)"},{"line_number":347,"context_line":"            vnfd \u003d {\u0027vnfd\u0027: {\u0027attributes\u0027: {\u0027vnfd\u0027: vnf_info[\u0027vnfd_template\u0027]},"},{"line_number":348,"context_line":"                             \u0027name\u0027: vnfd_name,"},{"line_number":349,"context_line":"                             \u0027template_source\u0027: \u0027inline\u0027,"},{"line_number":350,"context_line":"                             \u0027service_types\u0027: [{\u0027service_type\u0027: \u0027vnfd\u0027}]}}"},{"line_number":351,"context_line":"            vnf_info[\u0027vnfd_id\u0027] \u003d self.create_vnfd(context, vnfd).get(\u0027id\u0027)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        vnf_attributes \u003d vnf_info[\u0027attributes\u0027]"},{"line_number":354,"context_line":"        if vnf_attributes.get(\u0027param_values\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_102aaf2c","line":351,"range":{"start_line":345,"start_character":0,"end_line":351,"end_character":75},"in_reply_to":"5a3905b3_353b1dd3","updated":"2017-01-20 12:14:00.000000000","message":"that is by default the case because vnfd creation is part of vnf creation. (L351)","commit_id":"dc096df8f929ac69835894773cfce157cb2595c1"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"7c4e84535417e9f231775bdb693475db5c172449","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # if vnfd_template specified, create vnfd from template"},{"line_number":344,"context_line":"        # create template dictionary structure same as needed in create_vnfd()"},{"line_number":345,"context_line":"        if vnf_info[\u0027vnfd_template\u0027] is not None:"},{"line_number":346,"context_line":"            vnfd_name \u003d utils.generate_resource_name(name, \u0027inline\u0027)"},{"line_number":347,"context_line":"            vnfd \u003d {\u0027vnfd\u0027: {\u0027attributes\u0027: {\u0027vnfd\u0027: vnf_info[\u0027vnfd_template\u0027]},"},{"line_number":348,"context_line":"                             \u0027name\u0027: vnfd_name,"},{"line_number":349,"context_line":"                             \u0027template_source\u0027: \u0027inline\u0027,"},{"line_number":350,"context_line":"                             \u0027service_types\u0027: [{\u0027service_type\u0027: \u0027vnfd\u0027}]}}"},{"line_number":351,"context_line":"            vnf_info[\u0027vnfd_id\u0027] \u003d self.create_vnfd(context, vnfd).get(\u0027id\u0027)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        vnf_attributes \u003d vnf_info[\u0027attributes\u0027]"},{"line_number":354,"context_line":"        if vnf_attributes.get(\u0027param_values\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_3227b313","line":351,"range":{"start_line":345,"start_character":0,"end_line":351,"end_character":75},"in_reply_to":"5a3905b3_3f4cdc41","updated":"2017-01-20 11:41:27.000000000","message":"What is targeted here is to delete vnfd only when externally vnf is deleted and not when vnf goes into error state for any reason.","commit_id":"dc096df8f929ac69835894773cfce157cb2595c1"},{"author":{"_account_id":20866,"name":"Janki Chhatbar","email":"jchhatba@redhat.com","username":"janki"},"change_message_id":"83ee0f8a80cd605c79ebafe659c24c951695f004","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # if vnfd_template specified, create vnfd from template"},{"line_number":344,"context_line":"        # create template dictionary structure same as needed in create_vnfd()"},{"line_number":345,"context_line":"        if vnf_info[\u0027vnfd_template\u0027] is not None:"},{"line_number":346,"context_line":"            vnfd_name \u003d utils.generate_resource_name(name, \u0027inline\u0027)"},{"line_number":347,"context_line":"            vnfd \u003d {\u0027vnfd\u0027: {\u0027attributes\u0027: {\u0027vnfd\u0027: vnf_info[\u0027vnfd_template\u0027]},"},{"line_number":348,"context_line":"                             \u0027name\u0027: vnfd_name,"},{"line_number":349,"context_line":"                             \u0027template_source\u0027: \u0027inline\u0027,"},{"line_number":350,"context_line":"                             \u0027service_types\u0027: [{\u0027service_type\u0027: \u0027vnfd\u0027}]}}"},{"line_number":351,"context_line":"            vnf_info[\u0027vnfd_id\u0027] \u003d self.create_vnfd(context, vnfd).get(\u0027id\u0027)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        vnf_attributes \u003d vnf_info[\u0027attributes\u0027]"},{"line_number":354,"context_line":"        if vnf_attributes.get(\u0027param_values\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_7855a84e","line":351,"range":{"start_line":345,"start_character":0,"end_line":351,"end_character":75},"in_reply_to":"5a3905b3_475bad2e","updated":"2017-01-20 11:11:52.000000000","message":"I think [1] should take care of it.\n\n[1]. https://github.com/openstack/tacker/blob/master/tacker/vnfm/plugin.py#L323","commit_id":"dc096df8f929ac69835894773cfce157cb2595c1"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"812c4ca0897f57a67cc86b4056623c228f7ae410","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # if vnfd_template specified, create vnfd from template"},{"line_number":344,"context_line":"        # create template dictionary structure same as needed in create_vnfd()"},{"line_number":345,"context_line":"        if vnf_info[\u0027vnfd_template\u0027] is not None:"},{"line_number":346,"context_line":"            vnfd_name \u003d utils.generate_resource_name(name, \u0027inline\u0027)"},{"line_number":347,"context_line":"            vnfd \u003d {\u0027vnfd\u0027: {\u0027attributes\u0027: {\u0027vnfd\u0027: vnf_info[\u0027vnfd_template\u0027]},"},{"line_number":348,"context_line":"                             \u0027name\u0027: vnfd_name,"},{"line_number":349,"context_line":"                             \u0027template_source\u0027: \u0027inline\u0027,"},{"line_number":350,"context_line":"                             \u0027service_types\u0027: [{\u0027service_type\u0027: \u0027vnfd\u0027}]}}"},{"line_number":351,"context_line":"            vnf_info[\u0027vnfd_id\u0027] \u003d self.create_vnfd(context, vnfd).get(\u0027id\u0027)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        vnf_attributes \u003d vnf_info[\u0027attributes\u0027]"},{"line_number":354,"context_line":"        if vnf_attributes.get(\u0027param_values\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_390fa12f","line":351,"range":{"start_line":345,"start_character":0,"end_line":351,"end_character":75},"in_reply_to":"5a3905b3_475bad2e","updated":"2017-01-20 09:00:57.000000000","message":"it seems we will delete it later in delete_vnf","commit_id":"dc096df8f929ac69835894773cfce157cb2595c1"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"04476be4e0cde8765f0594573894effdfdad0efe","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        # if vnfd_template specified, create vnfd from template"},{"line_number":344,"context_line":"        # create template dictionary structure same as needed in create_vnfd()"},{"line_number":345,"context_line":"        if vnf_info[\u0027vnfd_template\u0027] is not None:"},{"line_number":346,"context_line":"            vnfd_name \u003d utils.generate_resource_name(name, \u0027inline\u0027)"},{"line_number":347,"context_line":"            vnfd \u003d {\u0027vnfd\u0027: {\u0027attributes\u0027: {\u0027vnfd\u0027: vnf_info[\u0027vnfd_template\u0027]},"},{"line_number":348,"context_line":"                             \u0027name\u0027: vnfd_name,"},{"line_number":349,"context_line":"                             \u0027template_source\u0027: \u0027inline\u0027,"},{"line_number":350,"context_line":"                             \u0027service_types\u0027: [{\u0027service_type\u0027: \u0027vnfd\u0027}]}}"},{"line_number":351,"context_line":"            vnf_info[\u0027vnfd_id\u0027] \u003d self.create_vnfd(context, vnfd).get(\u0027id\u0027)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        vnf_attributes \u003d vnf_info[\u0027attributes\u0027]"},{"line_number":354,"context_line":"        if vnf_attributes.get(\u0027param_values\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_3f4cdc41","line":351,"range":{"start_line":345,"start_character":0,"end_line":351,"end_character":75},"in_reply_to":"5a3905b3_7855a84e","updated":"2017-01-20 11:17:16.000000000","message":"but what will happen if exception happens before line 317","commit_id":"dc096df8f929ac69835894773cfce157cb2595c1"}]}
