)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":31072,"name":"Hiroo Kitamura","email":"hiroo.kitamura@ntt-at.co.jp","username":"Hiroo.Kitamura"},"change_message_id":"ddad0a8e22e0793eb9e301325e2e0787537457c8","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Aldinson Esto \u003cesto.aln@nec.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2020-08-27 19:21:39 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support for Action Driver and update of Management Driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Supported:"},{"line_number":10,"context_line":"* Created new ActionDriver framework"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f560f44_bd47071f","line":7,"updated":"2020-08-28 00:09:55.000000000","message":"I think the topic of this patch should be \u0027bp/action-driver\u0027.\nIs it right?","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"},{"author":{"_account_id":32219,"name":"Aldinson C. Esto","email":"esto.aln@nec.com","username":"esto-aln"},"change_message_id":"5dc3d17821b80447f80f2b53de6462fa91ec969b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Aldinson Esto \u003cesto.aln@nec.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2020-08-27 19:21:39 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support for Action Driver and update of Management Driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Supported:"},{"line_number":10,"context_line":"* Created new ActionDriver framework"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f560f44_fdffbfa8","line":7,"in_reply_to":"9f560f44_bd47071f","updated":"2020-08-28 00:14:28.000000000","message":"Yes, you are correct. I have updated the topic of this patch.","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"},{"author":{"_account_id":31072,"name":"Hiroo Kitamura","email":"hiroo.kitamura@ntt-at.co.jp","username":"Hiroo.Kitamura"},"change_message_id":"4bcc59ea9f5cde8348f91377fdbec69822c116c6","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support for Action Driver and update of Management Driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Supported:"},{"line_number":10,"context_line":"* Created new ActionDriver framework"},{"line_number":11,"context_line":"* Add standard action for Instantiation, Termination and Healing"},{"line_number":12,"context_line":"* Call ActionDriver executor from vnflcm_driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f560f44_f17a48b8","line":9,"updated":"2020-08-28 09:56:57.000000000","message":"functional-test does not exist, are you planning to upload it as a another patch?","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"}],"tacker/conductor/conductor_server.py":[{"author":{"_account_id":27880,"name":"Yoshito Ito","email":"yoshito.itou.dr@hco.ntt.co.jp","username":"yoshito-ito"},"change_message_id":"b4d0da8c17a4c0869ee5b4333096332e2fb34a8f","unresolved":false,"context_lines":[{"line_number":574,"context_line":"            self,"},{"line_number":575,"context_line":"            context,"},{"line_number":576,"context_line":"            vnf_instance,"},{"line_number":577,"context_line":"            vnf_dict,"},{"line_number":578,"context_line":"            instantiate_vnf,"},{"line_number":579,"context_line":"            vnf_lcm_op_occs_id):"},{"line_number":580,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_dd28fb98","line":577,"range":{"start_line":577,"start_character":11,"end_line":577,"end_character":21},"updated":"2020-08-28 03:30:08.000000000","message":"The existing Mgmt driver expect to have vnf_dict as an argument, but in ESTI NFV-SOL based implementation, this `vnf_dict` is not supported. How about use the dict of `vnf_instance` instead of `vnf_dict`? How to use the dict is out of scope for Tacker and it\u0027s a responsibility for users.","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"},{"author":{"_account_id":27880,"name":"Yoshito Ito","email":"yoshito.itou.dr@hco.ntt.co.jp","username":"yoshito-ito"},"change_message_id":"b4d0da8c17a4c0869ee5b4333096332e2fb34a8f","unresolved":false,"context_lines":[{"line_number":594,"context_line":"                return"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"            # call mgmt_driver instantiate_start"},{"line_number":597,"context_line":"            kwargs \u003d dict({mgmt_constants.KEY_ACTION:"},{"line_number":598,"context_line":"                mgmt_constants.ACTION_UPDATE_VNF})"},{"line_number":599,"context_line":"            self._mgmt_driver_call(context, \"instantiate_start\", vnf_instance,"},{"line_number":600,"context_line":"                        vnf_dict, instantiate_vnf, kwargs)"},{"line_number":601,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_7d43af6d","line":598,"range":{"start_line":597,"start_character":12,"end_line":598,"end_character":50},"updated":"2020-08-28 03:30:08.000000000","message":"Why this kwargs needs to have a dict of `mgmt_constants.KEY_ACTION` and `mgmt_constants.ACTION_UPDATE_VNF`? This kwargs is used in OpenWRT Mgmt driver but it\u0027s weird to make the conductor_server to depend on a sample Mgmt driver implementation. This is the same for all other methods like terminate or heal.\n\nI believe it\u0027s more simple to have additionalParams in this kwargs because the abstruct driver of Mgmt driver call its default method `mgmt_call()` with this kwargs.","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"}],"tacker/conf/vnf_lcm.py":[{"author":{"_account_id":31072,"name":"Hiroo Kitamura","email":"hiroo.kitamura@ntt-at.co.jp","username":"Hiroo.Kitamura"},"change_message_id":"4bcc59ea9f5cde8348f91377fdbec69822c116c6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"CONF \u003d cfg.CONF"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"OPTS \u003d ["},{"line_number":19,"context_line":"    cfg.StrOpt(\u0027endpoint_url\u0027,"},{"line_number":20,"context_line":"               default\u003d\u0027http://localhost:9890/\u0027,"},{"line_number":21,"context_line":"               help\u003d\"endpoint_url\"),"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_b1c57040","line":19,"updated":"2020-08-28 09:56:57.000000000","message":"These fixes should be done in patch-745428.","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"}],"tacker/vnfm/action_drivers/abstract_driver.py":[{"author":{"_account_id":27880,"name":"Yoshito Ito","email":"yoshito.itou.dr@hco.ntt.co.jp","username":"yoshito-ito"},"change_message_id":"b4d0da8c17a4c0869ee5b4333096332e2fb34a8f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def get_description(self):"},{"line_number":36,"context_line":"        pass"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def action_call(self, context, method, **kwargs):"},{"line_number":39,"context_line":"        \"\"\"Actual entry point of the action driver."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        Parameters:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_e0fc38b7","line":38,"range":{"start_line":38,"start_character":4,"end_line":38,"end_character":53},"updated":"2020-08-28 03:30:08.000000000","message":"I prefer to have VNF LCM related methods like \"instantiate\" or \"terminate\" here. You need to create many Action drivers for each LCM operation and it doesn\u0027t fit the concept of VNF Interface. At least, the default Action driver should be implemented as a single class.","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"}],"tacker/vnfm/action_drivers/instantiate_standard.py":[{"author":{"_account_id":31072,"name":"Hiroo Kitamura","email":"hiroo.kitamura@ntt-at.co.jp","username":"Hiroo.Kitamura"},"change_message_id":"4bcc59ea9f5cde8348f91377fdbec69822c116c6","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            setattr(vnf_instance, k, v)"},{"line_number":61,"context_line":"        vnf_instance.save()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _instantiate_vnf(self, context, vnf_instance, vnf, vim_connection_info,"},{"line_number":64,"context_line":"            instantiate_vnf_req):"},{"line_number":65,"context_line":"        vnfd_dict \u003d vnflcm_utils._get_vnfd_dict(context, vnf_instance.vnfd_id,"},{"line_number":66,"context_line":"                instantiate_vnf_req.flavour_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_51edf48c","line":63,"updated":"2020-08-28 09:56:57.000000000","message":"It looks like you are copying the existing code below.\ntacker/vnflcm/vnflcm_driver.py\n   def _instantiate_vnf\nI think you should avoid such an implementation as it will double management the codes.","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"}],"tacker/vnfm/infra_drivers/openstack/openstack.py":[{"author":{"_account_id":27880,"name":"Yoshito Ito","email":"yoshito.itou.dr@hco.ntt.co.jp","username":"yoshito-ito"},"change_message_id":"b4d0da8c17a4c0869ee5b4333096332e2fb34a8f","unresolved":false,"context_lines":[{"line_number":1204,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":1205,"context_line":"            updated_values \u003d {"},{"line_number":1206,"context_line":"                \u0027status\u0027: new_status, \u0027updated_at\u0027: timeutils.utcnow()}"},{"line_number":1207,"context_line":"            vnf_model \u003d (context.session.query("},{"line_number":1208,"context_line":"                vnfm_db.VNF).filter_by(id\u003dvnf_id).first())"},{"line_number":1209,"context_line":"            if not vnf_model:"},{"line_number":1210,"context_line":"                raise exceptions.VnfInstanceNotFound("},{"line_number":1211,"context_line":"                    message\u003d\"VNF {} not found\".format(vnf_id))"},{"line_number":1212,"context_line":"            if vnf_model.status not in current_statuses:"},{"line_number":1213,"context_line":"                raise exceptions.VnfConflictState("},{"line_number":1214,"context_line":"                    message\u003d\u0027Cannot change status to {} \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_a0c9a07a","line":1211,"range":{"start_line":1207,"start_character":12,"end_line":1211,"end_character":62},"updated":"2020-08-28 03:30:08.000000000","message":"When this vnf table is updated to have a new row of VnfInstance? The vnf_instances table is updated in `POST /vnflcm/v1/vnf_instances` but api/vnflcm/v1/controller.py is not updated in this patch.\n\nBasically, I disagree to have a new dependency with vnf table because it\u0027s legacy Tacker table and this change makes the architecture complicated.","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"},{"author":{"_account_id":27880,"name":"Yoshito Ito","email":"yoshito.itou.dr@hco.ntt.co.jp","username":"yoshito-ito"},"change_message_id":"b4d0da8c17a4c0869ee5b4333096332e2fb34a8f","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"            LOG.error(msg)"},{"line_number":1286,"context_line":"            raise vnfm.VNFHealFailed(msg)"},{"line_number":1287,"context_line":""},{"line_number":1288,"context_line":"    def heal_vnf_standard(self, context, plugin, vnf_dict, vnf_instance,"},{"line_number":1289,"context_line":"                heal_vnf_request, vim_connection_info):"},{"line_number":1290,"context_line":"        LOG.debug(\u0027start of heal_vnf_standard\u0027)"},{"line_number":1291,"context_line":"        stack_resources \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_009ccc68","line":1288,"range":{"start_line":1288,"start_character":3,"end_line":1288,"end_character":72},"updated":"2020-08-28 03:30:08.000000000","message":"Why don\u0027t we have the Action driver for heal operation?","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"}],"tacker/vnfm/mgmt_drivers/abstract_driver.py":[{"author":{"_account_id":27880,"name":"Yoshito Ito","email":"yoshito.itou.dr@hco.ntt.co.jp","username":"yoshito-ito"},"change_message_id":"b4d0da8c17a4c0869ee5b4333096332e2fb34a8f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def mgmt_call(self, plugin, context, vnf, kwargs):"},{"line_number":81,"context_line":"        pass"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def mgmt_instantiate_start(self, context, vnf_instance, **kwargs):"},{"line_number":84,"context_line":"        pass"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def mgmt_instantiate_end(self, context, vnf_instance, **kwargs):"},{"line_number":87,"context_line":"        pass"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def mgmt_terminate_start(self, context, vnf_instance, **kwargs):"},{"line_number":90,"context_line":"        pass"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def mgmt_terminate_end(self, context, vnf_instance, **kwargs):"},{"line_number":93,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_20d47047","line":93,"range":{"start_line":83,"start_character":0,"end_line":93,"end_character":12},"updated":"2020-08-28 03:30:08.000000000","message":"Are these methods called? In conductor_server.py and executor.py, it seems ManagementDriverExecutor.method is always the default of \"mgmt_call\" and never changed. So only `mgmt_call()` is used.","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"}],"tacker/vnfm/mgmt_drivers/constants.py":[{"author":{"_account_id":27880,"name":"Yoshito Ito","email":"yoshito.itou.dr@hco.ntt.co.jp","username":"yoshito-ito"},"change_message_id":"b4d0da8c17a4c0869ee5b4333096332e2fb34a8f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# key"},{"line_number":18,"context_line":"KEY_ACTION \u003d \u0027action\u0027"},{"line_number":19,"context_line":"KEY_KWARGS \u003d \u0027kwargs\u0027"},{"line_number":20,"context_line":"KEY_SCALE \u003d \u0027scale_stack_id\u0027"},{"line_number":21,"context_line":"KEY_HEAL \u003d \u0027heal_stack_id\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"# ACTION type"},{"line_number":24,"context_line":"ACTION_CREATE_VNF \u003d \u0027create_vnf\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_a00c003a","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":26},"updated":"2020-08-28 03:30:08.000000000","message":"Where are these used? In conductor_server.py, only KEY_ACTION and and ACTIOM_UPDATE_VNF are found.","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"}],"tacker/vnfm/mgmt_drivers/executor.py":[{"author":{"_account_id":27880,"name":"Yoshito Ito","email":"yoshito.itou.dr@hco.ntt.co.jp","username":"yoshito-ito"},"change_message_id":"b4d0da8c17a4c0869ee5b4333096332e2fb34a8f","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                    if vnf.get(\u0027artifacts\u0027):"},{"line_number":127,"context_line":"                        artifacts \u003d vnf.get(\u0027artifacts\u0027)"},{"line_number":128,"context_line":"                        if isinstance(implementation_info, dict):"},{"line_number":129,"context_line":"                            if implementation_info.get(\u0027primary\u0027):"},{"line_number":130,"context_line":"                                implementation_ \u003d artifacts.get("},{"line_number":131,"context_line":"                                    implementation_info[\u0027primary\u0027])"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"                                # get config file from artifacts"},{"line_number":134,"context_line":"                                dependencies_ \u003d artifacts.get("},{"line_number":135,"context_line":"                                    implementation_info[\u0027dependencies\u0027])"},{"line_number":136,"context_line":"                                self.config_file_path \u003d dependencies_.get("},{"line_number":137,"context_line":"                                    \u0027file\u0027)"},{"line_number":138,"context_line":"                                LOG.debug(\u0027mgmt_driver config \\"},{"line_number":139,"context_line":"                                    file loaded {}\u0027.format("},{"line_number":140,"context_line":"                                    self.config_file_path))"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"                            else:"},{"line_number":143,"context_line":"                                raise mgmt_driver_exceptions.\\"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_2078f08d","line":140,"range":{"start_line":129,"start_character":28,"end_line":140,"end_character":59},"updated":"2020-08-28 03:30:08.000000000","message":"According to SOL001 v2.6.1, the key \u0027primary\u0027 or \u0027dependencies\u0027 is not defined. Why are these logic needed?","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"},{"author":{"_account_id":27880,"name":"Yoshito Ito","email":"yoshito.itou.dr@hco.ntt.co.jp","username":"yoshito-ito"},"change_message_id":"b4d0da8c17a4c0869ee5b4333096332e2fb34a8f","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        config_data \u003d {}"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if config_path:"},{"line_number":182,"context_line":"            config_path \u003d os.path.join(vnf_package_path, config_path)"},{"line_number":183,"context_line":"            with open(config_path) as config_obj:"},{"line_number":184,"context_line":"                config_data \u003d yaml.safe_load(config_obj)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_20ebd012","line":181,"range":{"start_line":181,"start_character":8,"end_line":181,"end_character":23},"updated":"2020-08-28 03:30:08.000000000","message":"This logic assumes to have `config_path`, but it\u0027s always None because the \"dependency\" key in \"_get_mgmt_driver_module()\" method  never exist and the `config_path` should be always None according to the spec (https://review.opendev.org/#/c/740896/6/specs/victoria/action_driver.rst ) or SOL001 v2.6.1. This means that users cannot pass their additionalParams to their Mgmt driver.\n\nAs I mentions in another comment, it seems better to use kwargs to pass additionalParams to Mgmt drivers.","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"}],"tacker/vnfm/policy_actions/vdu_autoheal/vdu_autoheal.py":[{"author":{"_account_id":27880,"name":"Yoshito Ito","email":"yoshito.itou.dr@hco.ntt.co.jp","username":"yoshito-ito"},"change_message_id":"b4d0da8c17a4c0869ee5b4333096332e2fb34a8f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    return \u0027VNFActionVduAutoheal\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class VNFActionVduAutoheal(abstract_action.AbstractPolicyAction,"},{"line_number":36,"context_line":"                        abstract_driver.VnfACTNAbstractDriver):"},{"line_number":37,"context_line":"    def get_type(self):"},{"line_number":38,"context_line":"        return \u0027vdu_autoheal\u0027"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_00aa0c70","line":36,"range":{"start_line":35,"start_character":0,"end_line":36,"end_character":63},"updated":"2020-08-28 03:30:08.000000000","message":"It this class related to the spec? It seems not.","commit_id":"2da75079896f9f38bf18e879f5a67e6f157c767d"}]}
