)]}'
{"heat/engine/resources/openstack/neutron/net.py":[{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"2df93b380be680ee536cda2581f57edae1c3fbf5","unresolved":false,"context_lines":[{"line_number":245,"context_line":"            resource_properties, resource_data)"},{"line_number":246,"context_line":"        dhcp \u003d self.client().list_dhcp_agent_hosting_networks(self.resource_id)"},{"line_number":247,"context_line":"        dhcp_agents \u003d set([agent[\u0027id\u0027] for agent in dhcp[\u0027agents\u0027]])"},{"line_number":248,"context_line":"        result.update({self.DHCP_AGENT_IDS: list(dhcp_agents)})"},{"line_number":249,"context_line":"        return result"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5ff73747_403efa29","line":248,"range":{"start_line":248,"start_character":8,"end_line":248,"end_character":42},"updated":"2017-04-24 10:23:36.000000000","message":"1. Why don\u0027t pop the \u0027shared\u0027 property?\n2. How about the property \u0027qos_policy\u0027, I don\u0027t think now we can handle it?","commit_id":"69d4106a090a92be2392050011b7a39d67d34cde"},{"author":{"_account_id":13009,"name":"Peter Razumovsky","email":"prazumovsky@mirantis.com","username":"prazumovsky"},"change_message_id":"ca20a6ff903b7cb0d15b3f52e6f5ddd7d87075fd","unresolved":false,"context_lines":[{"line_number":245,"context_line":"            resource_properties, resource_data)"},{"line_number":246,"context_line":"        dhcp \u003d self.client().list_dhcp_agent_hosting_networks(self.resource_id)"},{"line_number":247,"context_line":"        dhcp_agents \u003d set([agent[\u0027id\u0027] for agent in dhcp[\u0027agents\u0027]])"},{"line_number":248,"context_line":"        result.update({self.DHCP_AGENT_IDS: list(dhcp_agents)})"},{"line_number":249,"context_line":"        return result"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5ff73747_74977b92","line":248,"range":{"start_line":248,"start_character":8,"end_line":248,"end_character":42},"in_reply_to":"5ff73747_403efa29","updated":"2017-04-24 10:30:41.000000000","message":"1. It is update_allowed property, why we need to pop it?\n2. qos_policy is update_allowed too, super method should handle it.\n\nWill update test for it.","commit_id":"69d4106a090a92be2392050011b7a39d67d34cde"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"622cc738b9a72c336912f18adc288c9dd60606c8","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        qos_policy \u003d props.pop(self.QOS_POLICY, None)"},{"line_number":187,"context_line":"        tags \u003d props.pop(self.TAGS, [])"},{"line_number":188,"context_line":"        if qos_policy:"},{"line_number":189,"context_line":"            props[\u0027qos_policy_id\u0027] \u003d self.client_plugin().get_qos_policy_id("},{"line_number":190,"context_line":"                qos_policy)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        net \u003d self.client().create_network({\u0027network\u0027: props})[\u0027network\u0027]"},{"line_number":193,"context_line":"        self.resource_id_set(net[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_e5645e24","line":190,"range":{"start_line":189,"start_character":12,"end_line":190,"end_character":27},"updated":"2017-05-12 08:51:18.000000000","message":"After we add the translation rule for qos_policy, I don\u0027t think we have to get again.","commit_id":"c3741464938210b425d075094f3361dceb77b334"},{"author":{"_account_id":13009,"name":"Peter Razumovsky","email":"prazumovsky@mirantis.com","username":"prazumovsky"},"change_message_id":"d8af08343e83b5adc8fc3f36698f0e7a57397d4b","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        qos_policy \u003d props.pop(self.QOS_POLICY, None)"},{"line_number":187,"context_line":"        tags \u003d props.pop(self.TAGS, [])"},{"line_number":188,"context_line":"        if qos_policy:"},{"line_number":189,"context_line":"            props[\u0027qos_policy_id\u0027] \u003d self.client_plugin().get_qos_policy_id("},{"line_number":190,"context_line":"                qos_policy)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        net \u003d self.client().create_network({\u0027network\u0027: props})[\u0027network\u0027]"},{"line_number":193,"context_line":"        self.resource_id_set(net[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_36115a53","line":190,"range":{"start_line":189,"start_character":12,"end_line":190,"end_character":27},"in_reply_to":"3f044301_e5645e24","updated":"2017-05-12 09:59:32.000000000","message":"thanks for the catch","commit_id":"c3741464938210b425d075094f3361dceb77b334"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"622cc738b9a72c336912f18adc288c9dd60606c8","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        result \u003d super(Net, self).parse_live_resource_data("},{"line_number":264,"context_line":"            resource_properties, resource_data)"},{"line_number":265,"context_line":"        result.pop(self.SHARED)"},{"line_number":266,"context_line":"        dhcp \u003d self.client().list_dhcp_agent_hosting_networks(self.resource_id)"},{"line_number":267,"context_line":"        dhcp_agents \u003d set([agent[\u0027id\u0027] for agent in dhcp[\u0027agents\u0027]])"},{"line_number":268,"context_line":"        result.update({self.DHCP_AGENT_IDS: list(dhcp_agents)})"},{"line_number":269,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_65a4cea6","line":266,"range":{"start_line":266,"start_character":8,"end_line":266,"end_character":79},"updated":"2017-05-12 08:51:18.000000000","message":"1. I took a test with non-admin, here a Forbidden raised. IMO, we should catch it and to make sure we can return result correctly.\n2. As previous comment, we should translate \u0027qos_policy_id\u0027 to \u0027qos_policy\u0027, otherwise we cannot get the live value for \u0027qos_policy\u0027 property.","commit_id":"c3741464938210b425d075094f3361dceb77b334"},{"author":{"_account_id":13009,"name":"Peter Razumovsky","email":"prazumovsky@mirantis.com","username":"prazumovsky"},"change_message_id":"d8af08343e83b5adc8fc3f36698f0e7a57397d4b","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        result \u003d super(Net, self).parse_live_resource_data("},{"line_number":264,"context_line":"            resource_properties, resource_data)"},{"line_number":265,"context_line":"        result.pop(self.SHARED)"},{"line_number":266,"context_line":"        dhcp \u003d self.client().list_dhcp_agent_hosting_networks(self.resource_id)"},{"line_number":267,"context_line":"        dhcp_agents \u003d set([agent[\u0027id\u0027] for agent in dhcp[\u0027agents\u0027]])"},{"line_number":268,"context_line":"        result.update({self.DHCP_AGENT_IDS: list(dhcp_agents)})"},{"line_number":269,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_d629168a","line":266,"range":{"start_line":266,"start_character":8,"end_line":266,"end_character":79},"in_reply_to":"3f044301_65a4cea6","updated":"2017-05-12 09:59:32.000000000","message":"1. will check, thanks\n\n2. oh, now I got what you mean","commit_id":"c3741464938210b425d075094f3361dceb77b334"}],"heat/engine/resources/openstack/neutron/neutron.py":[{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"622cc738b9a72c336912f18adc288c9dd60606c8","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            NeutronResource.merge_value_specs(props)"},{"line_number":82,"context_line":"        return props"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _store_config_default_properties(self, attrs):"},{"line_number":85,"context_line":"        \"\"\"A method for storing properties, which defaults stored in config."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        A method allows to store properties default values, which cannot be"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_e507be81","line":84,"range":{"start_line":84,"start_character":4,"end_line":84,"end_character":41},"updated":"2017-05-12 08:51:18.000000000","message":"Why we have to store it in resource data?","commit_id":"c3741464938210b425d075094f3361dceb77b334"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"706be375ab922d5dfd88b2cde66811f55b32caf1","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            NeutronResource.merge_value_specs(props)"},{"line_number":82,"context_line":"        return props"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _store_config_default_properties(self, attrs):"},{"line_number":85,"context_line":"        \"\"\"A method for storing properties, which defaults stored in config."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        A method allows to store properties default values, which cannot be"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_36c4ba90","line":84,"range":{"start_line":84,"start_character":4,"end_line":84,"end_character":41},"in_reply_to":"3f044301_760b6223","updated":"2017-05-12 10:14:54.000000000","message":"So let\u0027s see a user case:\nuser create a network without specify PORT_SECURITY_ENABLED, after the network created, the value is True, right? then user modify it to False underlying by neutron. The user update it to False in template and do stack-update, we expect that we won\u0027t to call update because the live value is already False, right?\nBut IIUC your code logic, we still to call update, or if I missed something?","commit_id":"c3741464938210b425d075094f3361dceb77b334"},{"author":{"_account_id":13009,"name":"Peter Razumovsky","email":"prazumovsky@mirantis.com","username":"prazumovsky"},"change_message_id":"d8af08343e83b5adc8fc3f36698f0e7a57397d4b","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            NeutronResource.merge_value_specs(props)"},{"line_number":82,"context_line":"        return props"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _store_config_default_properties(self, attrs):"},{"line_number":85,"context_line":"        \"\"\"A method for storing properties, which defaults stored in config."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        A method allows to store properties default values, which cannot be"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_760b6223","line":84,"range":{"start_line":84,"start_character":4,"end_line":84,"end_character":41},"in_reply_to":"3f044301_e507be81","updated":"2017-05-12 09:59:32.000000000","message":"I hoped docstring is enough but I look it isn\u0027t:(\n\nSome properties have no defaults hardcoded in source code, but have configurable defaults in config files. Such defaults cannot be defined with \"default\" arg in properties schema, but after resource creation it already defined as property value. In this way we need to store it to prevent redundant updating property with value which didn\u0027t specified at the stack create. PORT_SECURITY_ENABLED is such property.","commit_id":"c3741464938210b425d075094f3361dceb77b334"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"622cc738b9a72c336912f18adc288c9dd60606c8","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                if key in resource_data:"},{"line_number":197,"context_line":"                    result[self.VALUE_SPECS][key] \u003d resource_data.get(key)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        if self.properties.get(\u0027port_security_enabled\u0027) is not None:"},{"line_number":200,"context_line":"            old_port \u003d bool(self.data().get(self.PORT_SECURITY_ENABLED))"},{"line_number":201,"context_line":"            new_port \u003d resource_data.get(self.PORT_SECURITY_ENABLED)"},{"line_number":202,"context_line":"            if old_port !\u003d new_port:"},{"line_number":203,"context_line":"                result[self.PORT_SECURITY_ENABLED] \u003d new_port"},{"line_number":204,"context_line":"                self._store_config_default_properties(result)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_e5157e9d","line":204,"range":{"start_line":199,"start_character":8,"end_line":204,"end_character":61},"updated":"2017-05-12 08:51:18.000000000","message":"Same question as above, why we have to store it? I missed it in volume.py, so what\u0027s the plan to store it in resource data?","commit_id":"c3741464938210b425d075094f3361dceb77b334"},{"author":{"_account_id":13009,"name":"Peter Razumovsky","email":"prazumovsky@mirantis.com","username":"prazumovsky"},"change_message_id":"d8af08343e83b5adc8fc3f36698f0e7a57397d4b","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                if key in resource_data:"},{"line_number":197,"context_line":"                    result[self.VALUE_SPECS][key] \u003d resource_data.get(key)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        if self.properties.get(\u0027port_security_enabled\u0027) is not None:"},{"line_number":200,"context_line":"            old_port \u003d bool(self.data().get(self.PORT_SECURITY_ENABLED))"},{"line_number":201,"context_line":"            new_port \u003d resource_data.get(self.PORT_SECURITY_ENABLED)"},{"line_number":202,"context_line":"            if old_port !\u003d new_port:"},{"line_number":203,"context_line":"                result[self.PORT_SECURITY_ENABLED] \u003d new_port"},{"line_number":204,"context_line":"                self._store_config_default_properties(result)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_5614e643","line":204,"range":{"start_line":199,"start_character":8,"end_line":204,"end_character":61},"in_reply_to":"3f044301_e5157e9d","updated":"2017-05-12 09:59:32.000000000","message":"see my comment above","commit_id":"c3741464938210b425d075094f3361dceb77b334"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"ed5adee81f3c669cf0439557b7a6b5725679d578","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            NeutronResource.merge_value_specs(props)"},{"line_number":82,"context_line":"        return props"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _store_config_default_properties(self, attrs):"},{"line_number":85,"context_line":"        \"\"\"A method for storing properties, which defaults stored in config."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        A method allows to store properties default values, which cannot be"},{"line_number":88,"context_line":"        defined in schema in case of specifying in config file."},{"line_number":89,"context_line":"        \"\"\""},{"line_number":90,"context_line":"        if \u0027port_security_enabled\u0027 in attrs:"},{"line_number":91,"context_line":"            self.data_set(\u0027port_security_enabled\u0027,"},{"line_number":92,"context_line":"                          attrs[\u0027port_security_enabled\u0027])"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @staticmethod"},{"line_number":95,"context_line":"    def merge_value_specs(props):"}],"source_content_type":"text/x-python","patch_set":21,"id":"df140735_06479f7a","line":92,"range":{"start_line":84,"start_character":4,"end_line":92,"end_character":57},"updated":"2017-06-01 03:20:08.000000000","message":"Maybe it will be better to set default value for these properties?","commit_id":"5436980bba3cccab0e61e71ba14a61ac3de3e097"},{"author":{"_account_id":13009,"name":"Peter Razumovsky","email":"prazumovsky@mirantis.com","username":"prazumovsky"},"change_message_id":"78b4a76ee4ad8d254547a20e207ce542b448396b","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            NeutronResource.merge_value_specs(props)"},{"line_number":82,"context_line":"        return props"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _store_config_default_properties(self, attrs):"},{"line_number":85,"context_line":"        \"\"\"A method for storing properties, which defaults stored in config."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        A method allows to store properties default values, which cannot be"},{"line_number":88,"context_line":"        defined in schema in case of specifying in config file."},{"line_number":89,"context_line":"        \"\"\""},{"line_number":90,"context_line":"        if \u0027port_security_enabled\u0027 in attrs:"},{"line_number":91,"context_line":"            self.data_set(\u0027port_security_enabled\u0027,"},{"line_number":92,"context_line":"                          attrs[\u0027port_security_enabled\u0027])"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @staticmethod"},{"line_number":95,"context_line":"    def merge_value_specs(props):"}],"source_content_type":"text/x-python","patch_set":21,"id":"df140735_c37cc720","line":92,"range":{"start_line":84,"start_character":4,"end_line":92,"end_character":57},"in_reply_to":"df140735_06479f7a","updated":"2017-06-05 09:33:42.000000000","message":"No, because you set default for these properties in neutron.conf file, so it can be different from heat side default value.","commit_id":"5436980bba3cccab0e61e71ba14a61ac3de3e097"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"ed5adee81f3c669cf0439557b7a6b5725679d578","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        if \u0027port_security_enabled\u0027 in self.properties.keys():"},{"line_number":200,"context_line":"            old_port \u003d bool(self.data().get(self.PORT_SECURITY_ENABLED))"},{"line_number":201,"context_line":"            new_port \u003d resource_data.get(self.PORT_SECURITY_ENABLED)"},{"line_number":202,"context_line":"            if old_port !\u003d new_port:"},{"line_number":203,"context_line":"                result[self.PORT_SECURITY_ENABLED] \u003d new_port"},{"line_number":204,"context_line":"                self._store_config_default_properties(result)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":21,"id":"df140735_26d62351","line":203,"range":{"start_line":202,"start_character":12,"end_line":203,"end_character":61},"updated":"2017-06-01 03:20:08.000000000","message":"IIUC, we already set port_security_enabled (take network as an example) in line 190-191.\nso maybe:\nif \u0027port_security_enabled\u0027 in self.properties.keys():\n    old_port \u003d \n        bool(self.data().get(self.PORT_SECURITY_ENABLED))\n    live_port \u003d \n        resource_data.get(self.PORT_SECURITY_ENABLED)\n    if old_port \u003d\u003d new_port:\n        result.pop[self.PORT_SECURITY_ENABLED]","commit_id":"5436980bba3cccab0e61e71ba14a61ac3de3e097"}],"heat/engine/resources/openstack/neutron/port.py":[{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"2df93b380be680ee536cda2581f57edae1c3fbf5","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        else:"},{"line_number":501,"context_line":"            return True"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    def parse_live_resource_data(self, resource_properties, resource_data):"},{"line_number":504,"context_line":"        result \u003d super(Port, self).parse_live_resource_data("},{"line_number":505,"context_line":"            resource_properties, resource_data)"},{"line_number":506,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5ff73747_a0181ed3","line":503,"range":{"start_line":503,"start_character":8,"end_line":503,"end_character":32},"updated":"2017-04-24 10:23:36.000000000","message":"1. Also we have to handle \u0027qos_policy\u0027 property.\n2. The default policy of property \u0027mac_address\u0027 updating just allows admin user, so maybe we should pop it.","commit_id":"69d4106a090a92be2392050011b7a39d67d34cde"},{"author":{"_account_id":13009,"name":"Peter Razumovsky","email":"prazumovsky@mirantis.com","username":"prazumovsky"},"change_message_id":"ca20a6ff903b7cb0d15b3f52e6f5ddd7d87075fd","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        else:"},{"line_number":501,"context_line":"            return True"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    def parse_live_resource_data(self, resource_properties, resource_data):"},{"line_number":504,"context_line":"        result \u003d super(Port, self).parse_live_resource_data("},{"line_number":505,"context_line":"            resource_properties, resource_data)"},{"line_number":506,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5ff73747_f4d14b59","line":503,"range":{"start_line":503,"start_character":8,"end_line":503,"end_character":32},"in_reply_to":"5ff73747_a0181ed3","updated":"2017-04-24 10:30:41.000000000","message":"2. you\u0027re right.\n\nWill update test for qos_policy","commit_id":"69d4106a090a92be2392050011b7a39d67d34cde"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"622cc738b9a72c336912f18adc288c9dd60606c8","unresolved":false,"context_lines":[{"line_number":514,"context_line":"            return True"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"    def parse_live_resource_data(self, resource_properties, resource_data):"},{"line_number":517,"context_line":"        result \u003d super(Port, self).parse_live_resource_data("},{"line_number":518,"context_line":"            resource_properties, resource_data)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        result.pop(self.MAC_ADDRESS)"},{"line_number":521,"context_line":"        old_vnic \u003d self.data().get(self.VNIC_TYPE)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_656e0e30","line":518,"range":{"start_line":517,"start_character":8,"end_line":518,"end_character":47},"updated":"2017-05-12 08:51:18.000000000","message":"Same as network resource, have to translate \u0027qos_policy_id\u0027 (in neutron network show response) to \u0027qos_policy\u0027.","commit_id":"c3741464938210b425d075094f3361dceb77b334"},{"author":{"_account_id":13009,"name":"Peter Razumovsky","email":"prazumovsky@mirantis.com","username":"prazumovsky"},"change_message_id":"d8af08343e83b5adc8fc3f36698f0e7a57397d4b","unresolved":false,"context_lines":[{"line_number":514,"context_line":"            return True"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"    def parse_live_resource_data(self, resource_properties, resource_data):"},{"line_number":517,"context_line":"        result \u003d super(Port, self).parse_live_resource_data("},{"line_number":518,"context_line":"            resource_properties, resource_data)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        result.pop(self.MAC_ADDRESS)"},{"line_number":521,"context_line":"        old_vnic \u003d self.data().get(self.VNIC_TYPE)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_b62e8a8f","line":518,"range":{"start_line":517,"start_character":8,"end_line":518,"end_character":47},"in_reply_to":"3f044301_656e0e30","updated":"2017-05-12 09:59:32.000000000","message":"Done","commit_id":"c3741464938210b425d075094f3361dceb77b334"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"ed5adee81f3c669cf0439557b7a6b5725679d578","unresolved":false,"context_lines":[{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        result[self.QOS_POLICY] \u003d resource_data.get(\u0027qos_policy_id\u0027)"},{"line_number":521,"context_line":"        result.pop(self.MAC_ADDRESS)"},{"line_number":522,"context_line":"        old_vnic \u003d self.data().get(self.VNIC_TYPE)"},{"line_number":523,"context_line":"        new_vnic \u003d resource_data.get(self.VNIC_TYPE)"},{"line_number":524,"context_line":"        if new_vnic !\u003d old_vnic:"},{"line_number":525,"context_line":"            result[self.VNIC_TYPE] \u003d new_vnic"},{"line_number":526,"context_line":"            self._store_config_default_properties(result)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        fixed_ips \u003d resource_data.get(self.FIXED_IPS) or []"}],"source_content_type":"text/x-python","patch_set":21,"id":"df140735_2903940f","line":525,"range":{"start_line":522,"start_character":8,"end_line":525,"end_character":45},"updated":"2017-06-01 03:20:08.000000000","message":"\u0027result\u0027 contains the property after line 517-518.","commit_id":"5436980bba3cccab0e61e71ba14a61ac3de3e097"}],"heat/engine/resources/openstack/neutron/provider_net.py":[{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"2df93b380be680ee536cda2581f57edae1c3fbf5","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            self.client().update_network(self.resource_id,"},{"line_number":169,"context_line":"                                         {\u0027network\u0027: prop_diff})"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def parse_live_resource_data(self, resource_properties, resource_data):"},{"line_number":172,"context_line":"        # this resource should not have super in case of we don\u0027t need to"},{"line_number":173,"context_line":"        # parse Net resource properties."},{"line_number":174,"context_line":"        result \u003d {}"}],"source_content_type":"text/x-python","patch_set":19,"id":"5ff73747_2073eee9","line":171,"range":{"start_line":171,"start_character":8,"end_line":171,"end_character":32},"updated":"2017-04-24 10:23:36.000000000","message":"1. pop \u0027shared\u0027?","commit_id":"69d4106a090a92be2392050011b7a39d67d34cde"},{"author":{"_account_id":13009,"name":"Peter Razumovsky","email":"prazumovsky@mirantis.com","username":"prazumovsky"},"change_message_id":"ca20a6ff903b7cb0d15b3f52e6f5ddd7d87075fd","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            self.client().update_network(self.resource_id,"},{"line_number":169,"context_line":"                                         {\u0027network\u0027: prop_diff})"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def parse_live_resource_data(self, resource_properties, resource_data):"},{"line_number":172,"context_line":"        # this resource should not have super in case of we don\u0027t need to"},{"line_number":173,"context_line":"        # parse Net resource properties."},{"line_number":174,"context_line":"        result \u003d {}"}],"source_content_type":"text/x-python","patch_set":19,"id":"5ff73747_b4cbc3a3","line":171,"range":{"start_line":171,"start_character":8,"end_line":171,"end_character":32},"in_reply_to":"5ff73747_2073eee9","updated":"2017-04-24 10:30:41.000000000","message":"for what?","commit_id":"69d4106a090a92be2392050011b7a39d67d34cde"}],"heat/engine/resources/openstack/neutron/router.py":[{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"622cc738b9a72c336912f18adc288c9dd60606c8","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                    required\u003dTrue,"},{"line_number":81,"context_line":"                    update_allowed\u003dTrue"},{"line_number":82,"context_line":"                ),"},{"line_number":83,"context_line":"                EXTERNAL_GATEWAY_ENABLE_SNAT: properties.Schema("},{"line_number":84,"context_line":"                    properties.Schema.BOOLEAN,"},{"line_number":85,"context_line":"                    _(\u0027Enables Source NAT on the router gateway. NOTE: The \u0027"},{"line_number":86,"context_line":"                      \u0027default policy setting in Neutron restricts usage of \u0027"},{"line_number":87,"context_line":"                      \u0027this property to administrative users only.\u0027),"},{"line_number":88,"context_line":"                    update_allowed\u003dTrue"},{"line_number":89,"context_line":"                ),"},{"line_number":90,"context_line":"                EXTERNAL_GATEWAY_FIXED_IPS: properties.Schema("}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_a843cd6b","line":87,"range":{"start_line":83,"start_character":16,"end_line":87,"end_character":69},"updated":"2017-05-12 08:51:18.000000000","message":"the usage of this property is allow admin users in default, so we have to consider this.","commit_id":"c3741464938210b425d075094f3361dceb77b334"},{"author":{"_account_id":13009,"name":"Peter Razumovsky","email":"prazumovsky@mirantis.com","username":"prazumovsky"},"change_message_id":"d8af08343e83b5adc8fc3f36698f0e7a57397d4b","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                    required\u003dTrue,"},{"line_number":81,"context_line":"                    update_allowed\u003dTrue"},{"line_number":82,"context_line":"                ),"},{"line_number":83,"context_line":"                EXTERNAL_GATEWAY_ENABLE_SNAT: properties.Schema("},{"line_number":84,"context_line":"                    properties.Schema.BOOLEAN,"},{"line_number":85,"context_line":"                    _(\u0027Enables Source NAT on the router gateway. NOTE: The \u0027"},{"line_number":86,"context_line":"                      \u0027default policy setting in Neutron restricts usage of \u0027"},{"line_number":87,"context_line":"                      \u0027this property to administrative users only.\u0027),"},{"line_number":88,"context_line":"                    update_allowed\u003dTrue"},{"line_number":89,"context_line":"                ),"},{"line_number":90,"context_line":"                EXTERNAL_GATEWAY_FIXED_IPS: properties.Schema("}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_961f0e5a","line":87,"range":{"start_line":83,"start_character":16,"end_line":87,"end_character":69},"in_reply_to":"3f044301_a843cd6b","updated":"2017-05-12 09:59:32.000000000","message":"Done","commit_id":"c3741464938210b425d075094f3361dceb77b334"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"622cc738b9a72c336912f18adc288c9dd60606c8","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                )"},{"line_number":146,"context_line":"            ),"},{"line_number":147,"context_line":"        ),"},{"line_number":148,"context_line":"        L3_AGENT_IDS: properties.Schema("},{"line_number":149,"context_line":"            properties.Schema.LIST,"},{"line_number":150,"context_line":"            _(\u0027ID list of the L3 agent. User can specify multi-agents \u0027"},{"line_number":151,"context_line":"              \u0027for highly available router. NOTE: The default policy \u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_88481187","line":148,"range":{"start_line":148,"start_character":8,"end_line":148,"end_character":21},"updated":"2017-05-12 08:51:18.000000000","message":"same.","commit_id":"c3741464938210b425d075094f3361dceb77b334"},{"author":{"_account_id":13009,"name":"Peter Razumovsky","email":"prazumovsky@mirantis.com","username":"prazumovsky"},"change_message_id":"d8af08343e83b5adc8fc3f36698f0e7a57397d4b","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                )"},{"line_number":146,"context_line":"            ),"},{"line_number":147,"context_line":"        ),"},{"line_number":148,"context_line":"        L3_AGENT_IDS: properties.Schema("},{"line_number":149,"context_line":"            properties.Schema.LIST,"},{"line_number":150,"context_line":"            _(\u0027ID list of the L3 agent. User can specify multi-agents \u0027"},{"line_number":151,"context_line":"              \u0027for highly available router. NOTE: The default policy \u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f044301_762482af","line":148,"range":{"start_line":148,"start_character":8,"end_line":148,"end_character":21},"in_reply_to":"3f044301_88481187","updated":"2017-05-12 09:59:32.000000000","message":"Done","commit_id":"c3741464938210b425d075094f3361dceb77b334"}]}
