)]}'
{"heat/engine/resources/neutron/network_gateway.py":[{"author":{"_account_id":6917,"name":"Bartosz Górski","email":"bartosz@codilime.com","username":"bartosz-gorski"},"change_message_id":"e825d18afe50e6cf11c527257aa95f7263fdb0b8","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class NetworkGateway(neutron.NeutronResource):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    devices_schema \u003d {"},{"line_number":36,"context_line":"        \u0027id\u0027: properties.Schema("},{"line_number":37,"context_line":"            properties.Schema.STRING,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F8%2BBU%3D","line":34,"updated":"2013-12-18 10:10:06.000000000","message":"You should define all properties names here as static variables and the use them later.\nCheck Zane\u0027s patch with moving to new properties schema as a reference https://review.openstack.org/#/c/61823/4/heat/engine/resources/neutron/firewall.py","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"6f35c6ccfbb9e8409c27fb8d04bb5a22108d72d1","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class NetworkGateway(neutron.NeutronResource):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    devices_schema \u003d {"},{"line_number":36,"context_line":"        \u0027id\u0027: properties.Schema("},{"line_number":37,"context_line":"            properties.Schema.STRING,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F84eY%3D","line":34,"in_reply_to":"AAAATn%2F8%2BBU%3D","updated":"2013-12-19 08:51:37.000000000","message":"Hi Bartosz! Thank you for review. It\u0027s done.","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":7225,"name":"Serg Melikyan","email":"smelikyan@mirantis.com","username":"smelikyan"},"change_message_id":"f1bf9ef5023c6d82bd7faff95cbb6e5877c60697","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            return"},{"line_number":92,"context_line":"        client \u003d self.neutron()"},{"line_number":93,"context_line":"        try:"},{"line_number":94,"context_line":"            client.delete_network_gateway(self.resource_id)"},{"line_number":95,"context_line":"        except NeutronClientException as ex:"},{"line_number":96,"context_line":"            if ex.status_code !\u003d 404:"},{"line_number":97,"context_line":"                raise ex"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F8%2B68%3D","line":94,"updated":"2013-12-18 04:08:49.000000000","message":"This code is already implemented in the base class, please use Neutron Port handle_delete as a reference: https://github.com/openstack/heat/blob/master/heat/engine/resources/neutron/port.py#L178","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"6f35c6ccfbb9e8409c27fb8d04bb5a22108d72d1","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            return"},{"line_number":92,"context_line":"        client \u003d self.neutron()"},{"line_number":93,"context_line":"        try:"},{"line_number":94,"context_line":"            client.delete_network_gateway(self.resource_id)"},{"line_number":95,"context_line":"        except NeutronClientException as ex:"},{"line_number":96,"context_line":"            if ex.status_code !\u003d 404:"},{"line_number":97,"context_line":"                raise ex"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F84eI%3D","line":94,"in_reply_to":"AAAATn%2F8%2B68%3D","updated":"2013-12-19 08:51:37.000000000","message":"Hi Serg! Thank you for review. It\u0027s done.","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":6917,"name":"Bartosz Górski","email":"bartosz@codilime.com","username":"bartosz-gorski"},"change_message_id":"e825d18afe50e6cf11c527257aa95f7263fdb0b8","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            constraints\u003d[constraints.AllowedValues((\u0027flat\u0027, \u0027vlan\u0027))]"},{"line_number":129,"context_line":"        ),"},{"line_number":130,"context_line":"        \u0027segmentation_id\u0027: properties.Schema("},{"line_number":131,"context_line":"            properties.Schema.INTEGER,"},{"line_number":132,"context_line":"            description\u003d_("},{"line_number":133,"context_line":"                \u0027The id for L2 segment on the external side of the gateway.\u0027"},{"line_number":134,"context_line":"            ),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F893c%3D","line":131,"updated":"2013-12-18 10:10:06.000000000","message":"Why this property is not required?\nI see two case:\n\n1. segmentation_type \u003d \u0027vlan\u0027 -\u003e segmentation_id must be specified\n\n2. segmentation_type \u003d \u0027flat\u0027 -\u003e segmentation_id can be equal to 0\n\nMy suggestion is to make segmentation_id required and specified default value as 0.","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"6f35c6ccfbb9e8409c27fb8d04bb5a22108d72d1","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            constraints\u003d[constraints.AllowedValues((\u0027flat\u0027, \u0027vlan\u0027))]"},{"line_number":129,"context_line":"        ),"},{"line_number":130,"context_line":"        \u0027segmentation_id\u0027: properties.Schema("},{"line_number":131,"context_line":"            properties.Schema.INTEGER,"},{"line_number":132,"context_line":"            description\u003d_("},{"line_number":133,"context_line":"                \u0027The id for L2 segment on the external side of the gateway.\u0027"},{"line_number":134,"context_line":"            ),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F84QI%3D","line":131,"in_reply_to":"AAAATn%2F893c%3D","updated":"2013-12-19 08:51:37.000000000","message":"I think, a segmentation_id have to keep currently attributes.\nBecause segmentation_id\u003d0 is special parameter when using vlan.\nThe parameter provides flat(not vlan) network, in my understand.\n\nIf segmentation_id have default value 0, user can omit segmentation_id when using segmentation_type\u003dvlan.\nThe network behavior of above case is flat.\nI think, It\u0027s unexpected behavior from end users eye.","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":6917,"name":"Bartosz Górski","email":"bartosz@codilime.com","username":"bartosz-gorski"},"change_message_id":"e825d18afe50e6cf11c527257aa95f7263fdb0b8","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        Validate any of the provided params"},{"line_number":154,"context_line":"        \u0027\u0027\u0027"},{"line_number":155,"context_line":"        super(NetworkGatewayConnection, self).validate()"},{"line_number":156,"context_line":"        segmentation_type \u003d self.properties.get(\u0027segmentation_type\u0027)"},{"line_number":157,"context_line":"        segmentation_id \u003d self.properties.get(\u0027segmentation_id\u0027)"},{"line_number":158,"context_line":"        if segmentation_type \u003d\u003d \u0027vlan\u0027 and segmentation_id is None:"},{"line_number":159,"context_line":"            msg \u003d \u0027segmentation_id must be specified for using vlan\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F8%2BA4%3D","line":156,"updated":"2013-12-18 10:10:06.000000000","message":"segmentation_type is required property so you can avoid using get and just do lookup self.properties[\u0027segmentation_type\u0027]. You can avoid get for all required properties in this patch.","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"6f35c6ccfbb9e8409c27fb8d04bb5a22108d72d1","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        Validate any of the provided params"},{"line_number":154,"context_line":"        \u0027\u0027\u0027"},{"line_number":155,"context_line":"        super(NetworkGatewayConnection, self).validate()"},{"line_number":156,"context_line":"        segmentation_type \u003d self.properties.get(\u0027segmentation_type\u0027)"},{"line_number":157,"context_line":"        segmentation_id \u003d self.properties.get(\u0027segmentation_id\u0027)"},{"line_number":158,"context_line":"        if segmentation_type \u003d\u003d \u0027vlan\u0027 and segmentation_id is None:"},{"line_number":159,"context_line":"            msg \u003d \u0027segmentation_id must be specified for using vlan\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F84QA%3D","line":156,"in_reply_to":"AAAATn%2F8%2BA4%3D","updated":"2013-12-19 08:51:37.000000000","message":"Done","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":6917,"name":"Bartosz Górski","email":"bartosz@codilime.com","username":"bartosz-gorski"},"change_message_id":"e825d18afe50e6cf11c527257aa95f7263fdb0b8","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        segmentation_type \u003d self.properties.get(\u0027segmentation_type\u0027)"},{"line_number":157,"context_line":"        segmentation_id \u003d self.properties.get(\u0027segmentation_id\u0027)"},{"line_number":158,"context_line":"        if segmentation_type \u003d\u003d \u0027vlan\u0027 and segmentation_id is None:"},{"line_number":159,"context_line":"            msg \u003d \u0027segmentation_id must be specified for using vlan\u0027"},{"line_number":160,"context_line":"            raise exception.StackValidationFailed(message\u003dmsg)"},{"line_number":161,"context_line":"        if segmentation_type \u003d\u003d \u0027flat\u0027 and segmentation_id:"},{"line_number":162,"context_line":"            msg \u003d \u0027segmentation_id cannot be specified except 0 for using flat\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F8%2BAk%3D","line":159,"updated":"2013-12-18 10:10:06.000000000","message":"You forgot about translation brackets ie. _(\u0027segmentation_id must be specified for using vlan\u0027)","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"6f35c6ccfbb9e8409c27fb8d04bb5a22108d72d1","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        segmentation_type \u003d self.properties.get(\u0027segmentation_type\u0027)"},{"line_number":157,"context_line":"        segmentation_id \u003d self.properties.get(\u0027segmentation_id\u0027)"},{"line_number":158,"context_line":"        if segmentation_type \u003d\u003d \u0027vlan\u0027 and segmentation_id is None:"},{"line_number":159,"context_line":"            msg \u003d \u0027segmentation_id must be specified for using vlan\u0027"},{"line_number":160,"context_line":"            raise exception.StackValidationFailed(message\u003dmsg)"},{"line_number":161,"context_line":"        if segmentation_type \u003d\u003d \u0027flat\u0027 and segmentation_id:"},{"line_number":162,"context_line":"            msg \u003d \u0027segmentation_id cannot be specified except 0 for using flat\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F84P8%3D","line":159,"in_reply_to":"AAAATn%2F8%2BAk%3D","updated":"2013-12-19 08:51:37.000000000","message":"Done","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":7225,"name":"Serg Melikyan","email":"smelikyan@mirantis.com","username":"smelikyan"},"change_message_id":"705c0928ababadc05085a7d795ca7e92fdb785f0","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        segmentation_id \u003d self.properties.get(\u0027segmentation_id\u0027)"},{"line_number":158,"context_line":"        if segmentation_type \u003d\u003d \u0027vlan\u0027 and segmentation_id is None:"},{"line_number":159,"context_line":"            msg \u003d \u0027segmentation_id must be specified for using vlan\u0027"},{"line_number":160,"context_line":"            raise exception.StackValidationFailed(message\u003dmsg)"},{"line_number":161,"context_line":"        if segmentation_type \u003d\u003d \u0027flat\u0027 and segmentation_id:"},{"line_number":162,"context_line":"            msg \u003d \u0027segmentation_id cannot be specified except 0 for using flat\u0027"},{"line_number":163,"context_line":"            raise exception.StackValidationFailed(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9DLQ%3D","line":160,"updated":"2013-12-17 09:50:14.000000000","message":"Inserting a few empty lines for readability would in this method would be great","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"6f35c6ccfbb9e8409c27fb8d04bb5a22108d72d1","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        segmentation_id \u003d self.properties.get(\u0027segmentation_id\u0027)"},{"line_number":158,"context_line":"        if segmentation_type \u003d\u003d \u0027vlan\u0027 and segmentation_id is None:"},{"line_number":159,"context_line":"            msg \u003d \u0027segmentation_id must be specified for using vlan\u0027"},{"line_number":160,"context_line":"            raise exception.StackValidationFailed(message\u003dmsg)"},{"line_number":161,"context_line":"        if segmentation_type \u003d\u003d \u0027flat\u0027 and segmentation_id:"},{"line_number":162,"context_line":"            msg \u003d \u0027segmentation_id cannot be specified except 0 for using flat\u0027"},{"line_number":163,"context_line":"            raise exception.StackValidationFailed(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F84P4%3D","line":160,"in_reply_to":"AAAATn%2F9DLQ%3D","updated":"2013-12-19 08:51:37.000000000","message":"Done","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":6917,"name":"Bartosz Górski","email":"bartosz@codilime.com","username":"bartosz-gorski"},"change_message_id":"e825d18afe50e6cf11c527257aa95f7263fdb0b8","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            msg \u003d \u0027segmentation_id must be specified for using vlan\u0027"},{"line_number":160,"context_line":"            raise exception.StackValidationFailed(message\u003dmsg)"},{"line_number":161,"context_line":"        if segmentation_type \u003d\u003d \u0027flat\u0027 and segmentation_id:"},{"line_number":162,"context_line":"            msg \u003d \u0027segmentation_id cannot be specified except 0 for using flat\u0027"},{"line_number":163,"context_line":"            raise exception.StackValidationFailed(message\u003dmsg)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def handle_create(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F8%2BAc%3D","line":162,"updated":"2013-12-18 10:10:06.000000000","message":"same here _(...)","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"6f35c6ccfbb9e8409c27fb8d04bb5a22108d72d1","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            msg \u003d \u0027segmentation_id must be specified for using vlan\u0027"},{"line_number":160,"context_line":"            raise exception.StackValidationFailed(message\u003dmsg)"},{"line_number":161,"context_line":"        if segmentation_type \u003d\u003d \u0027flat\u0027 and segmentation_id:"},{"line_number":162,"context_line":"            msg \u003d \u0027segmentation_id cannot be specified except 0 for using flat\u0027"},{"line_number":163,"context_line":"            raise exception.StackValidationFailed(message\u003dmsg)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def handle_create(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F84P0%3D","line":162,"in_reply_to":"AAAATn%2F8%2BAc%3D","updated":"2013-12-19 08:51:37.000000000","message":"Done","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":7225,"name":"Serg Melikyan","email":"smelikyan@mirantis.com","username":"smelikyan"},"change_message_id":"705c0928ababadc05085a7d795ca7e92fdb785f0","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        network_id \u003d self.properties.get(\u0027network_id\u0027)"},{"line_number":168,"context_line":"        segmentation_type \u003d self.properties.get(\u0027segmentation_type\u0027)"},{"line_number":169,"context_line":"        segmentation_id \u003d self.properties.get(\u0027segmentation_id\u0027)"},{"line_number":170,"context_line":"        props \u003d {\u0027network_id\u0027: network_id,"},{"line_number":171,"context_line":"                 \u0027segmentation_type\u0027: segmentation_type}"},{"line_number":172,"context_line":"        if segmentation_id is not None:"},{"line_number":173,"context_line":"            props[\u0027segmentation_id\u0027] \u003d int(segmentation_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9DLM%3D","line":170,"updated":"2013-12-17 09:50:14.000000000","message":"Same here","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"6f35c6ccfbb9e8409c27fb8d04bb5a22108d72d1","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        network_id \u003d self.properties.get(\u0027network_id\u0027)"},{"line_number":168,"context_line":"        segmentation_type \u003d self.properties.get(\u0027segmentation_type\u0027)"},{"line_number":169,"context_line":"        segmentation_id \u003d self.properties.get(\u0027segmentation_id\u0027)"},{"line_number":170,"context_line":"        props \u003d {\u0027network_id\u0027: network_id,"},{"line_number":171,"context_line":"                 \u0027segmentation_type\u0027: segmentation_type}"},{"line_number":172,"context_line":"        if segmentation_id is not None:"},{"line_number":173,"context_line":"            props[\u0027segmentation_id\u0027] \u003d int(segmentation_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F84Pw%3D","line":170,"in_reply_to":"AAAATn%2F9DLM%3D","updated":"2013-12-19 08:51:37.000000000","message":"Done","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":7225,"name":"Serg Melikyan","email":"smelikyan@mirantis.com","username":"smelikyan"},"change_message_id":"705c0928ababadc05085a7d795ca7e92fdb785f0","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        try:"},{"line_number":190,"context_line":"            props \u003d {\u0027network_id\u0027: network_id,"},{"line_number":191,"context_line":"                     \u0027segmentation_type\u0027: segmentation_type}"},{"line_number":192,"context_line":"            if segmentation_id !\u003d \u0027None\u0027:"},{"line_number":193,"context_line":"                props[\u0027segmentation_id\u0027] \u003d int(segmentation_id)"},{"line_number":194,"context_line":"            client.disconnect_network_gateway(gateway_id, props)"},{"line_number":195,"context_line":"        except NeutronClientException as ex:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9DK4%3D","line":192,"updated":"2013-12-17 09:50:14.000000000","message":"Extracting from Try lines were no exception is expected looks reasonable.","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"6f35c6ccfbb9e8409c27fb8d04bb5a22108d72d1","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        try:"},{"line_number":190,"context_line":"            props \u003d {\u0027network_id\u0027: network_id,"},{"line_number":191,"context_line":"                     \u0027segmentation_type\u0027: segmentation_type}"},{"line_number":192,"context_line":"            if segmentation_id !\u003d \u0027None\u0027:"},{"line_number":193,"context_line":"                props[\u0027segmentation_id\u0027] \u003d int(segmentation_id)"},{"line_number":194,"context_line":"            client.disconnect_network_gateway(gateway_id, props)"},{"line_number":195,"context_line":"        except NeutronClientException as ex:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F84Ps%3D","line":192,"in_reply_to":"AAAATn%2F9DK4%3D","updated":"2013-12-19 08:51:37.000000000","message":"Done","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":7225,"name":"Serg Melikyan","email":"smelikyan@mirantis.com","username":"smelikyan"},"change_message_id":"f1bf9ef5023c6d82bd7faff95cbb6e5877c60697","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            if segmentation_id !\u003d \u0027None\u0027:"},{"line_number":193,"context_line":"                props[\u0027segmentation_id\u0027] \u003d int(segmentation_id)"},{"line_number":194,"context_line":"            client.disconnect_network_gateway(gateway_id, props)"},{"line_number":195,"context_line":"        except NeutronClientException as ex:"},{"line_number":196,"context_line":"            if ex.status_code !\u003d 404:"},{"line_number":197,"context_line":"                raise ex"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F8%2B64%3D","line":195,"updated":"2013-12-18 04:08:49.000000000","message":"Same as with resource above","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"6f35c6ccfbb9e8409c27fb8d04bb5a22108d72d1","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            if segmentation_id !\u003d \u0027None\u0027:"},{"line_number":193,"context_line":"                props[\u0027segmentation_id\u0027] \u003d int(segmentation_id)"},{"line_number":194,"context_line":"            client.disconnect_network_gateway(gateway_id, props)"},{"line_number":195,"context_line":"        except NeutronClientException as ex:"},{"line_number":196,"context_line":"            if ex.status_code !\u003d 404:"},{"line_number":197,"context_line":"                raise ex"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F84Pk%3D","line":195,"in_reply_to":"AAAATn%2F8%2B64%3D","updated":"2013-12-19 08:51:37.000000000","message":"Done","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"57828292d712a47e804cebbcfcaefa48c04fc403","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    devices_schema \u003d {"},{"line_number":45,"context_line":"        ID: properties.Schema("},{"line_number":46,"context_line":"            properties.Schema.STRING,"},{"line_number":47,"context_line":"            description\u003d_(\u0027The device id for network_gateway.\u0027),"},{"line_number":48,"context_line":"            required\u003dTrue"},{"line_number":49,"context_line":"        ),"},{"line_number":50,"context_line":"        INTERFACE_NAME: properties.Schema("}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F%2BR4%3D","line":47,"updated":"2014-01-06 01:01:54.000000000","message":"replace \"network_gateway\" with \"the network gateway\" to be more consistent with below, and to read as more human-friendly","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"b2b6e0092da2ec58d724c0413d257746bb275ed0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    devices_schema \u003d {"},{"line_number":45,"context_line":"        ID: properties.Schema("},{"line_number":46,"context_line":"            properties.Schema.STRING,"},{"line_number":47,"context_line":"            description\u003d_(\u0027The device id for network_gateway.\u0027),"},{"line_number":48,"context_line":"            required\u003dTrue"},{"line_number":49,"context_line":"        ),"},{"line_number":50,"context_line":"        INTERFACE_NAME: properties.Schema("}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F9IQ%3D","line":47,"in_reply_to":"AAAAUH%2F%2F%2BR4%3D","updated":"2014-01-06 09:16:58.000000000","message":"Done","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"57828292d712a47e804cebbcfcaefa48c04fc403","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        ),"},{"line_number":50,"context_line":"        INTERFACE_NAME: properties.Schema("},{"line_number":51,"context_line":"            properties.Schema.STRING,"},{"line_number":52,"context_line":"            description\u003d_(\u0027The interface name for network_gateway.\u0027),"},{"line_number":53,"context_line":"            required\u003dTrue"},{"line_number":54,"context_line":"        )"},{"line_number":55,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F%2BRw%3D","line":52,"updated":"2014-01-06 01:01:54.000000000","message":"same here","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"b2b6e0092da2ec58d724c0413d257746bb275ed0","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        ),"},{"line_number":50,"context_line":"        INTERFACE_NAME: properties.Schema("},{"line_number":51,"context_line":"            properties.Schema.STRING,"},{"line_number":52,"context_line":"            description\u003d_(\u0027The interface name for network_gateway.\u0027),"},{"line_number":53,"context_line":"            required\u003dTrue"},{"line_number":54,"context_line":"        )"},{"line_number":55,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F9II%3D","line":52,"in_reply_to":"AAAAUH%2F%2F%2BRw%3D","updated":"2014-01-06 09:16:58.000000000","message":"Done","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"57828292d712a47e804cebbcfcaefa48c04fc403","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    attributes_schema \u003d {"},{"line_number":83,"context_line":"        \"name\": _(\"The name of network gateway.\"),"},{"line_number":84,"context_line":"        \"tenant_id\": _(\"Tenant owning the network gateway.\"),"},{"line_number":85,"context_line":"        \"devices\": _(\"Device info for this network gateway.\"),"},{"line_number":86,"context_line":"        \"default\": _(\"A boolean value of default flag.\"),"},{"line_number":87,"context_line":"        \"show\": _(\"All attributes.\")"},{"line_number":88,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F%2BQk%3D","line":85,"updated":"2014-01-06 01:01:54.000000000","message":"No need to expose the above three attributes, since they are already properties.","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"b2b6e0092da2ec58d724c0413d257746bb275ed0","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    attributes_schema \u003d {"},{"line_number":83,"context_line":"        \"name\": _(\"The name of network gateway.\"),"},{"line_number":84,"context_line":"        \"tenant_id\": _(\"Tenant owning the network gateway.\"),"},{"line_number":85,"context_line":"        \"devices\": _(\"Device info for this network gateway.\"),"},{"line_number":86,"context_line":"        \"default\": _(\"A boolean value of default flag.\"),"},{"line_number":87,"context_line":"        \"show\": _(\"All attributes.\")"},{"line_number":88,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F9IE%3D","line":85,"in_reply_to":"AAAAUH%2F%2F%2BQk%3D","updated":"2014-01-06 09:16:58.000000000","message":"Done","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"57828292d712a47e804cebbcfcaefa48c04fc403","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        except NeutronClientException as ex:"},{"line_number":114,"context_line":"            self._handle_not_found_exception(ex)"},{"line_number":115,"context_line":"        else:"},{"line_number":116,"context_line":"            return scheduler.TaskRunner(self._confirm_delete)()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def handle_update(self, json_snippet, tmpl_diff, prop_diff):"},{"line_number":119,"context_line":"        props \u003d self.prepare_update_properties(json_snippet)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F%2BSA%3D","line":116,"updated":"2014-01-06 01:01:54.000000000","message":"This change should depend on https://review.openstack.org/#/c/62580/ and use _delete_task instead of _confirm_delete","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"b2b6e0092da2ec58d724c0413d257746bb275ed0","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        except NeutronClientException as ex:"},{"line_number":114,"context_line":"            self._handle_not_found_exception(ex)"},{"line_number":115,"context_line":"        else:"},{"line_number":116,"context_line":"            return scheduler.TaskRunner(self._confirm_delete)()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def handle_update(self, json_snippet, tmpl_diff, prop_diff):"},{"line_number":119,"context_line":"        props \u003d self.prepare_update_properties(json_snippet)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F9GY%3D","line":116,"in_reply_to":"AAAAUH%2F%2F%2BSA%3D","updated":"2014-01-06 09:16:58.000000000","message":"Didn\u0027t modify now. I have understand your comment. But that gerrit review is unfinished now. I\u0027ll hold this change until that review will be merged.","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"7f5e1672fc87e33a0487946c0dacf1de22077363","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        except NeutronClientException as ex:"},{"line_number":114,"context_line":"            self._handle_not_found_exception(ex)"},{"line_number":115,"context_line":"        else:"},{"line_number":116,"context_line":"            return scheduler.TaskRunner(self._confirm_delete)()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def handle_update(self, json_snippet, tmpl_diff, prop_diff):"},{"line_number":119,"context_line":"        props \u003d self.prepare_update_properties(json_snippet)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FT%2BE%3D","line":116,"in_reply_to":"AAAAUH%2F%2F9GY%3D","updated":"2014-01-15 06:43:39.000000000","message":"Hi Steve, thank you notify me. I replaced _confirm_delete with _delete_task in PatchSet5.","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"57828292d712a47e804cebbcfcaefa48c04fc403","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                \u0027L2 segmentation strategy on the external side of the gateway.\u0027"},{"line_number":155,"context_line":"            ),"},{"line_number":156,"context_line":"            required\u003dTrue,"},{"line_number":157,"context_line":"            constraints\u003d[constraints.AllowedValues((\u0027flat\u0027, \u0027vlan\u0027))]"},{"line_number":158,"context_line":"        ),"},{"line_number":159,"context_line":"        SEGMENTATION_ID: properties.Schema("},{"line_number":160,"context_line":"            properties.Schema.INTEGER,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F%2BQc%3D","line":157,"updated":"2014-01-06 01:01:54.000000000","message":"Is there a most likely default value? flat?","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"b2b6e0092da2ec58d724c0413d257746bb275ed0","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                \u0027L2 segmentation strategy on the external side of the gateway.\u0027"},{"line_number":155,"context_line":"            ),"},{"line_number":156,"context_line":"            required\u003dTrue,"},{"line_number":157,"context_line":"            constraints\u003d[constraints.AllowedValues((\u0027flat\u0027, \u0027vlan\u0027))]"},{"line_number":158,"context_line":"        ),"},{"line_number":159,"context_line":"        SEGMENTATION_ID: properties.Schema("},{"line_number":160,"context_line":"            properties.Schema.INTEGER,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F9E4%3D","line":157,"in_reply_to":"AAAAUH%2F%2F%2BQc%3D","updated":"2014-01-06 09:16:58.000000000","message":"Didn\u0027t modify. Probably, appropriate default value is \"flat\".\nBut I think, segmentation_type have to set obviously by user for prevent unexpected behavior. What do you think?","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"57828292d712a47e804cebbcfcaefa48c04fc403","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        \"segmentation_type\": _("},{"line_number":173,"context_line":"            \"L2 segmentation strategy on the external side of the gateway.\"),"},{"line_number":174,"context_line":"        \"segmentation_id\": _("},{"line_number":175,"context_line":"            \"The id for L2 segment on the external side of the gateway.\"),"},{"line_number":176,"context_line":"        \"port_id\": _(\"The port id for the gateway\"),"},{"line_number":177,"context_line":"        \"show\": _(\"All attributes.\")"},{"line_number":178,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F%2BQs%3D","line":175,"updated":"2014-01-06 01:01:54.000000000","message":"The above 4 attributes are already known as properties, so do not need to be exposed as attributes.","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"b2b6e0092da2ec58d724c0413d257746bb275ed0","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        \"segmentation_type\": _("},{"line_number":173,"context_line":"            \"L2 segmentation strategy on the external side of the gateway.\"),"},{"line_number":174,"context_line":"        \"segmentation_id\": _("},{"line_number":175,"context_line":"            \"The id for L2 segment on the external side of the gateway.\"),"},{"line_number":176,"context_line":"        \"port_id\": _(\"The port id for the gateway\"),"},{"line_number":177,"context_line":"        \"show\": _(\"All attributes.\")"},{"line_number":178,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F9Eo%3D","line":175,"in_reply_to":"AAAAUH%2F%2F%2BQs%3D","updated":"2014-01-06 09:16:58.000000000","message":"Done","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"57828292d712a47e804cebbcfcaefa48c04fc403","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            \"L2 segmentation strategy on the external side of the gateway.\"),"},{"line_number":174,"context_line":"        \"segmentation_id\": _("},{"line_number":175,"context_line":"            \"The id for L2 segment on the external side of the gateway.\"),"},{"line_number":176,"context_line":"        \"port_id\": _(\"The port id for the gateway\"),"},{"line_number":177,"context_line":"        \"show\": _(\"All attributes.\")"},{"line_number":178,"context_line":"    }"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F%2BQo%3D","line":176,"updated":"2014-01-06 01:01:54.000000000","message":"If the port_id becomes the resource_id then this attribute won\u0027t be needed. (see below #214)","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"b2b6e0092da2ec58d724c0413d257746bb275ed0","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            \"L2 segmentation strategy on the external side of the gateway.\"),"},{"line_number":174,"context_line":"        \"segmentation_id\": _("},{"line_number":175,"context_line":"            \"The id for L2 segment on the external side of the gateway.\"),"},{"line_number":176,"context_line":"        \"port_id\": _(\"The port id for the gateway\"),"},{"line_number":177,"context_line":"        \"show\": _(\"All attributes.\")"},{"line_number":178,"context_line":"    }"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F9Ek%3D","line":176,"in_reply_to":"AAAAUH%2F%2F%2BQo%3D","updated":"2014-01-06 09:16:58.000000000","message":"Done","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"57828292d712a47e804cebbcfcaefa48c04fc403","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        )"},{"line_number":212,"context_line":"        port_id \u003d ret[\u0027connection_info\u0027][\u0027port_id\u0027]"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        self.resource_id_set("},{"line_number":215,"context_line":"            \u0027%s:%s:%s:%s:%s\u0027 %"},{"line_number":216,"context_line":"            (gateway_id, network_id,"},{"line_number":217,"context_line":"                segmentation_type, segmentation_id, port_id))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F%2BQ0%3D","line":214,"updated":"2014-01-06 01:01:54.000000000","message":"I think the port_id should be used for the resource_id. \n\ngateway_id, network_id, segmentation_type, segmentation_id do not need to be stored at all since they exist as properties.","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"b2b6e0092da2ec58d724c0413d257746bb275ed0","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        )"},{"line_number":212,"context_line":"        port_id \u003d ret[\u0027connection_info\u0027][\u0027port_id\u0027]"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        self.resource_id_set("},{"line_number":215,"context_line":"            \u0027%s:%s:%s:%s:%s\u0027 %"},{"line_number":216,"context_line":"            (gateway_id, network_id,"},{"line_number":217,"context_line":"                segmentation_type, segmentation_id, port_id))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F9D0%3D","line":214,"in_reply_to":"AAAAUH%2F%2F%2BQ0%3D","updated":"2014-01-06 09:16:58.000000000","message":"Done.\nYour comment\u0027s implementation looks like smart.","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"7f5e1672fc87e33a0487946c0dacf1de22077363","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        )"},{"line_number":212,"context_line":"        port_id \u003d ret[\u0027connection_info\u0027][\u0027port_id\u0027]"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        self.resource_id_set("},{"line_number":215,"context_line":"            \u0027%s:%s:%s:%s:%s\u0027 %"},{"line_number":216,"context_line":"            (gateway_id, network_id,"},{"line_number":217,"context_line":"                segmentation_type, segmentation_id, port_id))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FT7Q%3D","line":214,"in_reply_to":"AAAAUH%2F%2F9D0%3D","updated":"2014-01-15 06:43:39.000000000","message":"I used port_id as resource_id in PatchSet4. But I have reverted this change to solve problem that occured our test. I implemented handle_update(Delete-\u003eCreate) to avoid conflict error that occured UpdateReplace(Create-\u003eDelete). At that time, we should delete old resource with using old properties. However, heat framework doesn\u0027t provide old properties in handle_update(in my understand). For to cope the problem, I use resource_id as old properties storage.","commit_id":"c3d37ade206e4e67aa7582aeda7836de366a18f5"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"bcf65e8d96880b0374be70b3d8e5a9e0c571c960","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    A resource for the Network Gateway resource in Neutron Network Gateway."},{"line_number":36,"context_line":"    \u0027\u0027\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    DEVICES \u003d ("},{"line_number":39,"context_line":"        ID, INTERFACE_NAME,"},{"line_number":40,"context_line":"    ) \u003d ("},{"line_number":41,"context_line":"        \u0027id\u0027, \u0027interface_name\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F0iw%3D","line":38,"updated":"2014-01-08 04:00:00.000000000","message":"Can this be renamed to something else? This name will be overwritten at line 58. Though this doesn\u0027t seem to cause any issue for now.","commit_id":"4bd9a785d75e5b48ce80f95b811eec7d90c47a6d"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"0e350a0ee891581942823f0e548f407acb7a6abe","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    A resource for the Network Gateway resource in Neutron Network Gateway."},{"line_number":36,"context_line":"    \u0027\u0027\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    DEVICES \u003d ("},{"line_number":39,"context_line":"        ID, INTERFACE_NAME,"},{"line_number":40,"context_line":"    ) \u003d ("},{"line_number":41,"context_line":"        \u0027id\u0027, \u0027interface_name\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FT6I%3D","line":38,"in_reply_to":"AAAAUH%2F%2F0iw%3D","updated":"2014-01-15 06:47:29.000000000","message":"Hi Liang, thank you for review and I\u0027m sorry my reply is too late.\nIt\u0027s done in PatchSet5.","commit_id":"4bd9a785d75e5b48ce80f95b811eec7d90c47a6d"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"bcf65e8d96880b0374be70b3d8e5a9e0c571c960","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        except NeutronClientException as ex:"},{"line_number":111,"context_line":"            self._handle_not_found_exception(ex)"},{"line_number":112,"context_line":"        else:"},{"line_number":113,"context_line":"            return scheduler.TaskRunner(self._confirm_delete)()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def handle_update(self, json_snippet, tmpl_diff, prop_diff):"},{"line_number":116,"context_line":"        props \u003d self.prepare_update_properties(json_snippet)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F0cw%3D","line":113,"updated":"2014-01-08 04:00:00.000000000","message":"Actually you don\u0027t need to wait until https://review.openstack.org/#/c/62580/ is merged. It can be rebased onto that change if you like.","commit_id":"4bd9a785d75e5b48ce80f95b811eec7d90c47a6d"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"957549be4668772ce1edb8b5b220eeb1bbcd6f26","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        except NeutronClientException as ex:"},{"line_number":111,"context_line":"            self._handle_not_found_exception(ex)"},{"line_number":112,"context_line":"        else:"},{"line_number":113,"context_line":"            return scheduler.TaskRunner(self._confirm_delete)()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def handle_update(self, json_snippet, tmpl_diff, prop_diff):"},{"line_number":116,"context_line":"        props \u003d self.prepare_update_properties(json_snippet)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FWBM%3D","line":113,"in_reply_to":"AAAAUH%2F%2F0cw%3D","updated":"2014-01-14 20:33:35.000000000","message":"_delete_task is merged now, so this change can be updated.","commit_id":"4bd9a785d75e5b48ce80f95b811eec7d90c47a6d"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"0e350a0ee891581942823f0e548f407acb7a6abe","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        except NeutronClientException as ex:"},{"line_number":111,"context_line":"            self._handle_not_found_exception(ex)"},{"line_number":112,"context_line":"        else:"},{"line_number":113,"context_line":"            return scheduler.TaskRunner(self._confirm_delete)()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def handle_update(self, json_snippet, tmpl_diff, prop_diff):"},{"line_number":116,"context_line":"        props \u003d self.prepare_update_properties(json_snippet)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FT6E%3D","line":113,"in_reply_to":"AAAAUH%2F%2FWBM%3D","updated":"2014-01-15 06:47:29.000000000","message":"Thank you for notify! It\u0027s done in PatchSet5.","commit_id":"4bd9a785d75e5b48ce80f95b811eec7d90c47a6d"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"bcf65e8d96880b0374be70b3d8e5a9e0c571c960","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            properties.Schema.INTEGER,"},{"line_number":159,"context_line":"            description\u003d_("},{"line_number":160,"context_line":"                \u0027The id for L2 segment on the external side of the network \u0027"},{"line_number":161,"context_line":"                \u0027gateway.\u0027),"},{"line_number":162,"context_line":"            constraints\u003d[constraints.Range(0, 4094)]"},{"line_number":163,"context_line":"        )"},{"line_number":164,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F0fQ%3D","line":161,"updated":"2014-01-08 04:00:00.000000000","message":"not a -1 thing, but we can probably mention a bit about when this id can be specified, e.g. not if segmentation_type is flat.","commit_id":"4bd9a785d75e5b48ce80f95b811eec7d90c47a6d"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"0e350a0ee891581942823f0e548f407acb7a6abe","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            properties.Schema.INTEGER,"},{"line_number":159,"context_line":"            description\u003d_("},{"line_number":160,"context_line":"                \u0027The id for L2 segment on the external side of the network \u0027"},{"line_number":161,"context_line":"                \u0027gateway.\u0027),"},{"line_number":162,"context_line":"            constraints\u003d[constraints.Range(0, 4094)]"},{"line_number":163,"context_line":"        )"},{"line_number":164,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FT54%3D","line":161,"in_reply_to":"AAAAUH%2F%2F0fQ%3D","updated":"2014-01-15 06:47:29.000000000","message":"It\u0027s done in PatchSet5.","commit_id":"4bd9a785d75e5b48ce80f95b811eec7d90c47a6d"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"8b52fdc2ee7b202166d9d4961b7c861117fefb08","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def _show_resource(self):"},{"line_number":219,"context_line":"        (gateway_id, network_id, segmentation_type,"},{"line_number":220,"context_line":"         segmentation_id) \u003d self.resource_id.split(\u0027:\u0027)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        props \u003d {"},{"line_number":223,"context_line":"            self.NETWORK_GATEWAY_ID: gateway_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FBYs%3D","line":220,"updated":"2014-01-18 18:37:18.000000000","message":"Get these values from the properties. See comment below.","commit_id":"15100a86c6a8cfe367afb197ccc23106098aacd7"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"be00e071942e5ecaef8bfca19ef7f164e35f6d7c","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def _show_resource(self):"},{"line_number":219,"context_line":"        (gateway_id, network_id, segmentation_type,"},{"line_number":220,"context_line":"         segmentation_id) \u003d self.resource_id.split(\u0027:\u0027)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        props \u003d {"},{"line_number":223,"context_line":"            self.NETWORK_GATEWAY_ID: gateway_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2Bjkc%3D","line":220,"in_reply_to":"AAAAUH%2F%2FBYs%3D","updated":"2014-01-24 12:38:55.000000000","message":"Done","commit_id":"15100a86c6a8cfe367afb197ccc23106098aacd7"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"8b52fdc2ee7b202166d9d4961b7c861117fefb08","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            gateway_id, props"},{"line_number":243,"context_line":"        )"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        self.resource_id_set("},{"line_number":246,"context_line":"            \u0027%s:%s:%s:%s\u0027 % ("},{"line_number":247,"context_line":"                gateway_id,"},{"line_number":248,"context_line":"                props[self.NETWORK_ID],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FBYw%3D","line":245,"updated":"2014-01-18 18:37:18.000000000","message":"This resource_id just re-stores values that are already known from the properties. I propose that you don\u0027t call resource_id_set at all, and just fetch these values from the properties whenever you need them.","commit_id":"15100a86c6a8cfe367afb197ccc23106098aacd7"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"97676cc0f4967a15d79e68467cdcd54e24cf41fe","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            gateway_id, props"},{"line_number":243,"context_line":"        )"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        self.resource_id_set("},{"line_number":246,"context_line":"            \u0027%s:%s:%s:%s\u0027 % ("},{"line_number":247,"context_line":"                gateway_id,"},{"line_number":248,"context_line":"                props[self.NETWORK_ID],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2B0PQ%3D","line":245,"in_reply_to":"AAAAUH%2F%2B%2Bg8%3D","updated":"2014-01-21 20:01:54.000000000","message":"In handle_update the old properties are in self.properties, the new ones are in prop_diff.","commit_id":"15100a86c6a8cfe367afb197ccc23106098aacd7"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"88c9c3deb12392c0be1e373c3fab4a8874342b43","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            gateway_id, props"},{"line_number":243,"context_line":"        )"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        self.resource_id_set("},{"line_number":246,"context_line":"            \u0027%s:%s:%s:%s\u0027 % ("},{"line_number":247,"context_line":"                gateway_id,"},{"line_number":248,"context_line":"                props[self.NETWORK_ID],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2Bqp0%3D","line":245,"in_reply_to":"AAAAUH%2F%2B0PQ%3D","updated":"2014-01-23 11:54:04.000000000","message":"Thank you, I had misunderstand about self.properties.\nI\u0027m in re-consideration. I\u0027ll reply after.","commit_id":"15100a86c6a8cfe367afb197ccc23106098aacd7"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"be00e071942e5ecaef8bfca19ef7f164e35f6d7c","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            gateway_id, props"},{"line_number":243,"context_line":"        )"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        self.resource_id_set("},{"line_number":246,"context_line":"            \u0027%s:%s:%s:%s\u0027 % ("},{"line_number":247,"context_line":"                gateway_id,"},{"line_number":248,"context_line":"                props[self.NETWORK_ID],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2BjkA%3D","line":245,"in_reply_to":"AAAAUH%2F%2Bqp0%3D","updated":"2014-01-24 12:38:55.000000000","message":"I re-implemented in PatchSet6. Please check that patch.\nI\u0027m using port_id as NetworkGatewayConnection\u0027s resource_id in PatchSet6.","commit_id":"15100a86c6a8cfe367afb197ccc23106098aacd7"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"3593803cb213ec2cc33cb7eb8b833cd1a07a62b2","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            gateway_id, props"},{"line_number":243,"context_line":"        )"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        self.resource_id_set("},{"line_number":246,"context_line":"            \u0027%s:%s:%s:%s\u0027 % ("},{"line_number":247,"context_line":"                gateway_id,"},{"line_number":248,"context_line":"                props[self.NETWORK_ID],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2B%2Bg8%3D","line":245,"in_reply_to":"AAAAUH%2F%2FBYw%3D","updated":"2014-01-20 07:55:16.000000000","message":"This implementation has the reason. I\u0027ll write the reason\u0027s detail.\n\nDeleting NetworkGatewayConnection needs API parameters that are network_gateway_id, network_id, segmentation_type and segmentation_id when it  was created.\nIt means, Heat should store those parameters to somewhere.\n\nWhen handle_delete happened, it doesn\u0027t have a problem.\nBut when handle_update happened, it needs the care.\n\nIn my understand, Heat framework provide us properties below when handle_update happened.\n\n  1) All resource properties provided via self.properties or json_snippet. However, these properties value have overridden by Heat as new properties.\n  2) Different properties via prop_diff. However, these properties value have overridden by Heat also.\n\nWe can\u0027t get old properties value from self.properties, json_snippet and prop_diff.\nSo, I have stored properties value to resource_id for time to handle_update.\nIt\u0027s similar implementation as RouterInterface. RouterInterface are using resource_id as storage of key.\n\nPlease advise me, if you know the method to get old properties value when handle_update happened.\nIf we can\u0027t get old properties value when handle_update happened, I believe currently implementation is better way at present time.","commit_id":"15100a86c6a8cfe367afb197ccc23106098aacd7"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"8b52fdc2ee7b202166d9d4961b7c861117fefb08","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                segmentation_id))"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def handle_delete(self):"},{"line_number":253,"context_line":"        if not self.resource_id:"},{"line_number":254,"context_line":"            return"},{"line_number":255,"context_line":"        client \u003d self.neutron()"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FBYo%3D","line":253,"updated":"2014-01-18 18:37:18.000000000","message":"This check isn\u0027t needed, see comment above.","commit_id":"15100a86c6a8cfe367afb197ccc23106098aacd7"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"97676cc0f4967a15d79e68467cdcd54e24cf41fe","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        In this case, heat should process disconnect_network_gateway"},{"line_number":270,"context_line":"        before process connect_network_gateway."},{"line_number":271,"context_line":"        \u0027\u0027\u0027"},{"line_number":272,"context_line":"        self.handle_delete()"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        props \u003d self.prepare_update_properties(json_snippet)"},{"line_number":275,"context_line":"        self.properties \u003d props"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2B0PM%3D","line":272,"updated":"2014-01-21 20:01:54.000000000","message":"I don\u0027t know if this the the actual behaviour you want, but you\u0027ve just re-implemented the default UpdateReplace behaviour.\n\nIf this is the behaviour you want, you should delete handle_update, update_allowed_keys and all the update_allowed\u003dTrue","commit_id":"15100a86c6a8cfe367afb197ccc23106098aacd7"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"64852fd7ab007a860086e0c10879f839af3496f7","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        In this case, heat should process disconnect_network_gateway"},{"line_number":270,"context_line":"        before process connect_network_gateway."},{"line_number":271,"context_line":"        \u0027\u0027\u0027"},{"line_number":272,"context_line":"        self.handle_delete()"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        props \u003d self.prepare_update_properties(json_snippet)"},{"line_number":275,"context_line":"        self.properties \u003d props"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2BwyM%3D","line":272,"in_reply_to":"AAAAUH%2F%2B0PM%3D","updated":"2014-01-22 12:03:03.000000000","message":"The behavior what I want isn\u0027t same of UpdateReplace. Processing order is different.\nUpdateReplace\u0027s processing order is \"create new underlying resource -\u003e delete old underlying backup resource\".\nBut, this processing order makes 409 error in few resouces. NetworkGateway and NetworkGatewayConnection is one of them. Liang said that VolumeAttachment has same problem.\nI want processing order of \"delete old underlying resource -\u003e create new underlying resource\" for avoiding 409.\nI think handle_update is need in this resources.","commit_id":"15100a86c6a8cfe367afb197ccc23106098aacd7"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"c927d8dbd9df466e7ffae5cddab2fdf4cccb269b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    devices_schema \u003d {"},{"line_number":44,"context_line":"        ID: properties.Schema("},{"line_number":45,"context_line":"            properties.Schema.STRING,"},{"line_number":46,"context_line":"            description\u003d_(\u0027The device id for the network gateway.\u0027),"},{"line_number":47,"context_line":"            required\u003dTrue"},{"line_number":48,"context_line":"        ),"},{"line_number":49,"context_line":"        INTERFACE_NAME: properties.Schema("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9whc%3D","line":46,"updated":"2014-02-04 09:47:06.000000000","message":"I am not sure, where _ does come from as it is not imported from gettextutils explicitly. Is it automagically available from parent class somewhere higher in hierarchy?","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"4bc83a398ac6d18b25127541460c2c3783043095","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    devices_schema \u003d {"},{"line_number":44,"context_line":"        ID: properties.Schema("},{"line_number":45,"context_line":"            properties.Schema.STRING,"},{"line_number":46,"context_line":"            description\u003d_(\u0027The device id for the network gateway.\u0027),"},{"line_number":47,"context_line":"            required\u003dTrue"},{"line_number":48,"context_line":"        ),"},{"line_number":49,"context_line":"        INTERFACE_NAME: properties.Schema("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9wCE%3D","line":46,"in_reply_to":"AAAAUH%2F9whc%3D","updated":"2014-02-04 11:49:46.000000000","message":"\"_\" comes from resource.py.\n\n  https://github.com/openstack/heat/blob/master/heat/engine/resource.py#L33\n\nI think, it\u0027s no problem :-)","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"fbabf3aff29cce16b44d6bea94ddd6d6d25fd15d","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            description\u003d_("},{"line_number":73,"context_line":"                \u0027L2 segmentation strategy on the external side of the network \u0027"},{"line_number":74,"context_line":"                \u0027gateway.\u0027),"},{"line_number":75,"context_line":"            required\u003dTrue,"},{"line_number":76,"context_line":"            constraints\u003d[constraints.AllowedValues((\u0027flat\u0027, \u0027vlan\u0027))]"},{"line_number":77,"context_line":"        ),"},{"line_number":78,"context_line":"        SEGMENTATION_ID: properties.Schema("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9pCI%3D","line":75,"updated":"2014-02-05 13:43:38.000000000","message":"Could you explain why this option is required?\nIn help description for net-gateway-connect command it is optional.","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"68c357e70b7310461fbc2be8c5142e57ff1c0994","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            description\u003d_("},{"line_number":73,"context_line":"                \u0027L2 segmentation strategy on the external side of the network \u0027"},{"line_number":74,"context_line":"                \u0027gateway.\u0027),"},{"line_number":75,"context_line":"            required\u003dTrue,"},{"line_number":76,"context_line":"            constraints\u003d[constraints.AllowedValues((\u0027flat\u0027, \u0027vlan\u0027))]"},{"line_number":77,"context_line":"        ),"},{"line_number":78,"context_line":"        SEGMENTATION_ID: properties.Schema("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9hnk%3D","line":75,"in_reply_to":"AAAAUH%2F9pCI%3D","updated":"2014-02-06 10:57:42.000000000","message":"Done.\nI thought once, it\u0027s appropriate to set segmentation_type obviously by user for prevent miss configuration. But, I removed required along neutron\u0027s spec.","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"fbabf3aff29cce16b44d6bea94ddd6d6d25fd15d","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            description\u003d_(\u0027The name of the network gateway.\u0027),"},{"line_number":97,"context_line":"            update_allowed\u003dTrue"},{"line_number":98,"context_line":"        ),"},{"line_number":99,"context_line":"        TENANT_ID: properties.Schema("},{"line_number":100,"context_line":"            properties.Schema.STRING,"},{"line_number":101,"context_line":"            description\u003d_(\u0027Tenant owning the network gateway.\u0027)"},{"line_number":102,"context_line":"        ),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9pDA%3D","line":99,"updated":"2014-02-05 13:43:38.000000000","message":"I am not sure, that tenant_id option is necessary here.\nAFAIK, tenant_id is not used now in neutron resources. For explanation why, you may look in commets for https://review.openstack.org/#/c/68870/ or for https://review.openstack.org/#/c/60607/.","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"68c357e70b7310461fbc2be8c5142e57ff1c0994","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            description\u003d_(\u0027The name of the network gateway.\u0027),"},{"line_number":97,"context_line":"            update_allowed\u003dTrue"},{"line_number":98,"context_line":"        ),"},{"line_number":99,"context_line":"        TENANT_ID: properties.Schema("},{"line_number":100,"context_line":"            properties.Schema.STRING,"},{"line_number":101,"context_line":"            description\u003d_(\u0027Tenant owning the network gateway.\u0027)"},{"line_number":102,"context_line":"        ),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9hnU%3D","line":99,"in_reply_to":"AAAAUH%2F9pDA%3D","updated":"2014-02-06 10:57:42.000000000","message":"Done.\nOK, I removed tenant_id from properties.","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"fbabf3aff29cce16b44d6bea94ddd6d6d25fd15d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            properties.Schema.STRING,"},{"line_number":101,"context_line":"            description\u003d_(\u0027Tenant owning the network gateway.\u0027)"},{"line_number":102,"context_line":"        ),"},{"line_number":103,"context_line":"        DEVICES: properties.Schema("},{"line_number":104,"context_line":"            properties.Schema.LIST,"},{"line_number":105,"context_line":"            description\u003d_(\u0027Device info for this network gateway.\u0027),"},{"line_number":106,"context_line":"            required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9pAk%3D","line":103,"updated":"2014-02-05 13:43:38.000000000","message":"Also, why is it required too?","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"89818f6db7058a4837cc53b5b62a0306b19ff68a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            properties.Schema.STRING,"},{"line_number":101,"context_line":"            description\u003d_(\u0027Tenant owning the network gateway.\u0027)"},{"line_number":102,"context_line":"        ),"},{"line_number":103,"context_line":"        DEVICES: properties.Schema("},{"line_number":104,"context_line":"            properties.Schema.LIST,"},{"line_number":105,"context_line":"            description\u003d_(\u0027Device info for this network gateway.\u0027),"},{"line_number":106,"context_line":"            required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9gI4%3D","line":103,"in_reply_to":"AAAAUH%2F9hYQ%3D","updated":"2014-02-06 13:51:24.000000000","message":"Thanks, I am confused this. because I have gotten next help usage:\n\ndevstack:~$ neutron help net-gateway-create \nusage: neutron net-gateway-create [-h] [-f {shell,table}] [-c COLUMN]\n                                  [--variable VARIABLE] [--prefix PREFIX]\n                                  [--request-format {json,xml}]\n                                  [--tenant-id TENANT_ID] [--device DEVICE]\n                                  NAME\n\nCreate a network gateway.\n\npositional arguments:\n  NAME                  Name of network gateway to create\n\noptional arguments:\n  -h, --help            show this help message and exit\n  --request-format {json,xml}\n                        The xml or json request format\n  --tenant-id TENANT_ID\n                        The owner tenant ID\n  --device DEVICE       Device info for this gateway device_id\u003d\u003cdevice\n                        identifier\u003e,interface_name\u003d\u003cname_or_identifier\u003e It can\n                        be repeated for multiple devices for HA gateways\n\n\nBut, it\u0027s ok","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"68c357e70b7310461fbc2be8c5142e57ff1c0994","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            properties.Schema.STRING,"},{"line_number":101,"context_line":"            description\u003d_(\u0027Tenant owning the network gateway.\u0027)"},{"line_number":102,"context_line":"        ),"},{"line_number":103,"context_line":"        DEVICES: properties.Schema("},{"line_number":104,"context_line":"            properties.Schema.LIST,"},{"line_number":105,"context_line":"            description\u003d_(\u0027Device info for this network gateway.\u0027),"},{"line_number":106,"context_line":"            required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9hYQ%3D","line":103,"in_reply_to":"AAAAUH%2F9pAk%3D","updated":"2014-02-06 10:57:42.000000000","message":"Not changed.\ndevices list is required property by neutron.\n\n  $ neutron net-gateway-create test\n  Failed to parse request. Required attribute \u0027devices\u0027 not specified","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0aa4ea6de893087728570b8d8e105d5112216cc7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                            \u0027side of the network gateway.\u0027),"},{"line_number":104,"context_line":"                        default\u003d\u0027flat\u0027,"},{"line_number":105,"context_line":"                        constraints\u003d[constraints.AllowedValues("},{"line_number":106,"context_line":"                            (\u0027flat\u0027, \u0027vlan\u0027))]"},{"line_number":107,"context_line":"                    ),"},{"line_number":108,"context_line":"                    SEGMENTATION_ID: properties.Schema("},{"line_number":109,"context_line":"                        properties.Schema.INTEGER,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2B8UE%3D","line":106,"updated":"2014-02-18 03:22:52.000000000","message":"It looks like this should be required\u003dTrue. Unlikely but it might be possible to set this to null.","commit_id":"55dd69128dd903e9a69c545b607a7e3d3f2d4e44"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"ebd487e647c727b25c5d72513c6d530fc772afe4","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                            \u0027side of the network gateway.\u0027),"},{"line_number":104,"context_line":"                        default\u003d\u0027flat\u0027,"},{"line_number":105,"context_line":"                        constraints\u003d[constraints.AllowedValues("},{"line_number":106,"context_line":"                            (\u0027flat\u0027, \u0027vlan\u0027))]"},{"line_number":107,"context_line":"                    ),"},{"line_number":108,"context_line":"                    SEGMENTATION_ID: properties.Schema("},{"line_number":109,"context_line":"                        properties.Schema.INTEGER,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2B7Wc%3D","line":106,"in_reply_to":"AAAAUX%2F%2B8UE%3D","updated":"2014-02-18 06:26:42.000000000","message":"Sure. It\u0027s done.","commit_id":"55dd69128dd903e9a69c545b607a7e3d3f2d4e44"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"937c36a939d823afcedd182d27c08f89c7c64fcd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 NTT Corp."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAU3%2F%2F%2BvU%3D","line":1,"updated":"2014-02-23 05:21:06.000000000","message":"This can be removed if the patch needs another iteration.","commit_id":"5b437a646d5e3758d1b6324ca314823a882fc73b"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"453db291f8de9a7664ec77632fd588d8056f36e9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 NTT Corp."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAU3%2F%2F7bM%3D","line":1,"in_reply_to":"AAAAU3%2F%2F%2BvU%3D","updated":"2014-02-24 01:49:57.000000000","message":"Thanks.\nI hope to merge PatchSet11 for to get i3.\nIf it need next patch, I\u0027ll remove this line.","commit_id":"5b437a646d5e3758d1b6324ca314823a882fc73b"}],"heat/tests/test_neutron_network_gateway.py":[{"author":{"_account_id":6917,"name":"Bartosz Górski","email":"bartosz@codilime.com","username":"bartosz-gorski"},"change_message_id":"e825d18afe50e6cf11c527257aa95f7263fdb0b8","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        self.assertEqual((rsrc.DELETE, rsrc.FAILED), rsrc.state)"},{"line_number":449,"context_line":"        self.m.VerifyAll()"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def test_gateway_validate_failed(self):"},{"line_number":452,"context_line":"        gwc_template_err \u003d \u0027\u0027\u0027"},{"line_number":453,"context_line":"        {"},{"line_number":454,"context_line":"          \u0027AWSTemplateFormatVersion\u0027: \u00272010-09-09\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F895o%3D","line":451,"updated":"2013-12-18 10:10:06.000000000","message":"You should split it on two separate tests","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"6f35c6ccfbb9e8409c27fb8d04bb5a22108d72d1","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        self.assertEqual((rsrc.DELETE, rsrc.FAILED), rsrc.state)"},{"line_number":449,"context_line":"        self.m.VerifyAll()"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def test_gateway_validate_failed(self):"},{"line_number":452,"context_line":"        gwc_template_err \u003d \u0027\u0027\u0027"},{"line_number":453,"context_line":"        {"},{"line_number":454,"context_line":"          \u0027AWSTemplateFormatVersion\u0027: \u00272010-09-09\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F84Pc%3D","line":451,"in_reply_to":"AAAATn%2F895o%3D","updated":"2013-12-19 08:51:37.000000000","message":"Done","commit_id":"c78edcadb09d2c201eb4183eb7b072806f717bfe"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"fbabf3aff29cce16b44d6bea94ddd6d6d25fd15d","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        neutronclient.Client.show_network_gateway("},{"line_number":185,"context_line":"            u\u0027ed4c03b9-8251-4c09-acc4-e59ee9e6aa37\u0027"},{"line_number":186,"context_line":"        ).AndReturn(sng)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        neutronclient.Client.show_network_gateway("},{"line_number":189,"context_line":"            u\u0027ed4c03b9-8251-4c09-acc4-e59ee9e6aa37\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9org%3D","line":186,"updated":"2014-02-05 13:43:38.000000000","message":"I don\u0027t understand why do you return success description after delete here.\nI have tried to delete this line and tests have still worked.\nI am not sure, that I am right, but could you check it or explain why do you do it?","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"68c357e70b7310461fbc2be8c5142e57ff1c0994","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        neutronclient.Client.show_network_gateway("},{"line_number":185,"context_line":"            u\u0027ed4c03b9-8251-4c09-acc4-e59ee9e6aa37\u0027"},{"line_number":186,"context_line":"        ).AndReturn(sng)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        neutronclient.Client.show_network_gateway("},{"line_number":189,"context_line":"            u\u0027ed4c03b9-8251-4c09-acc4-e59ee9e6aa37\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9hOU%3D","line":186,"in_reply_to":"AAAAUH%2F9org%3D","updated":"2014-02-06 10:57:42.000000000","message":"It\u0027s need for testing _confirm_delete in super class. _confirm_delete\u0027s processing route depend on return. I think it\u0027s better for test coverage.","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"fbabf3aff29cce16b44d6bea94ddd6d6d25fd15d","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        self.m.VerifyAll()"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def test_gateway_validate_failed_with_vlan(self):"},{"line_number":352,"context_line":"        gw_template_err \u003d \u0027\u0027\u0027"},{"line_number":353,"context_line":"        {"},{"line_number":354,"context_line":"            \u0027AWSTemplateFormatVersion\u0027: \u00272010-09-09\u0027,"},{"line_number":355,"context_line":"            \u0027Description\u0027: \u0027Template to test Network Gateway resource\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9osM%3D","line":352,"updated":"2014-02-05 13:43:38.000000000","message":"Could you use base template for these tests test_gateway_validate_failed_with_vlan and test_gateway_validate_failed_with_flat.\n\nCurrently two test contain big templates with little difference, also base template gw_template is same too.\n\nI suggest, use gw_template here and then change it, if you want test other behavior. For example in test_gateway_validate_failed_with_flat use:\n\nt \u003d template_format.parse(gw_template)\n\nt[\u0027Resources\u0027][\u0027NetworkGateway\u0027][\u0027Properties\u0027][\u0027connections\u0027][0][\u0027segmentation_type\u0027] \u003d \u0027flat\u0027","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"68c357e70b7310461fbc2be8c5142e57ff1c0994","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        self.m.VerifyAll()"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def test_gateway_validate_failed_with_vlan(self):"},{"line_number":352,"context_line":"        gw_template_err \u003d \u0027\u0027\u0027"},{"line_number":353,"context_line":"        {"},{"line_number":354,"context_line":"            \u0027AWSTemplateFormatVersion\u0027: \u00272010-09-09\u0027,"},{"line_number":355,"context_line":"            \u0027Description\u0027: \u0027Template to test Network Gateway resource\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9hV4%3D","line":352,"in_reply_to":"AAAAUH%2F9osM%3D","updated":"2014-02-06 10:57:42.000000000","message":"Done. Your suggestion is really good. Thanks.","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"fbabf3aff29cce16b44d6bea94ddd6d6d25fd15d","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                            \u0027network_id\u0027:"},{"line_number":411,"context_line":"                                \u00276af055d3-26f6-48dd-a597-7611d7e58d35\u0027,"},{"line_number":412,"context_line":"                                \u0027segmentation_type\u0027: \u0027flat\u0027,"},{"line_number":413,"context_line":"                            \u0027segmentation_id\u0027: 10"},{"line_number":414,"context_line":"                        }]"},{"line_number":415,"context_line":"                    }"},{"line_number":416,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9ozA%3D","line":413,"updated":"2014-02-05 13:43:38.000000000","message":"fix indent for segmentation_id.","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"68c357e70b7310461fbc2be8c5142e57ff1c0994","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                            \u0027network_id\u0027:"},{"line_number":411,"context_line":"                                \u00276af055d3-26f6-48dd-a597-7611d7e58d35\u0027,"},{"line_number":412,"context_line":"                                \u0027segmentation_type\u0027: \u0027flat\u0027,"},{"line_number":413,"context_line":"                            \u0027segmentation_id\u0027: 10"},{"line_number":414,"context_line":"                        }]"},{"line_number":415,"context_line":"                    }"},{"line_number":416,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F9hVc%3D","line":413,"in_reply_to":"AAAAUH%2F9ozA%3D","updated":"2014-02-06 10:57:42.000000000","message":"gw_template_err was deleted by previous comments effect.","commit_id":"c8440ee3a99d33691c0373feba58fe0408ed4921"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"9f267565ca6dac4b0fc49631d8a19fd22da182dd","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"gw_template \u003d \u0027\u0027\u0027"},{"line_number":37,"context_line":"{"},{"line_number":38,"context_line":"    \u0027AWSTemplateFormatVersion\u0027: \u00272010-09-09\u0027,"},{"line_number":39,"context_line":"    \u0027Description\u0027: \u0027Template to test Network Gateway resource\u0027,"},{"line_number":40,"context_line":"    \u0027Parameters\u0027: {},"},{"line_number":41,"context_line":"    \u0027Resources\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9gEA%3D","line":38,"updated":"2014-02-06 13:53:21.000000000","message":"When I told about indent it was about segmentation_id in deleted template only.\nAFAIK, in inline template normal style of indent is 2 whitespace (not 4).\nSo, Could you turn back these two templates? (F.e. look in https://github.com/openstack/heat/blob/master/heat/tests/test_server.py)","commit_id":"0c78af9f1d008c6484a7b6a7bbcfc654e2eeb1e3"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"379b659e47c8b8f2811a076f175efcda1efc7aee","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"gw_template \u003d \u0027\u0027\u0027"},{"line_number":37,"context_line":"{"},{"line_number":38,"context_line":"    \u0027AWSTemplateFormatVersion\u0027: \u00272010-09-09\u0027,"},{"line_number":39,"context_line":"    \u0027Description\u0027: \u0027Template to test Network Gateway resource\u0027,"},{"line_number":40,"context_line":"    \u0027Parameters\u0027: {},"},{"line_number":41,"context_line":"    \u0027Resources\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9as0%3D","line":38,"in_reply_to":"AAAAUH%2F9gEA%3D","updated":"2014-02-07 02:15:19.000000000","message":"Done. I adjusted gw_template\u0027s indent to 2. And I understood, appropriate dict\u0027s indent is 4, it\u0027s right? So, sng is dict object, I didn\u0027t change it.","commit_id":"0c78af9f1d008c6484a7b6a7bbcfc654e2eeb1e3"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"8688f1ca8f3fbea74f904d43737fe4057b742b90","unresolved":false,"context_lines":[{"line_number":56,"context_line":"}"},{"line_number":57,"context_line":"\u0027\u0027\u0027"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"sng \u003d {"},{"line_number":60,"context_line":"    \u0027network_gateway\u0027: {"},{"line_number":61,"context_line":"        \u0027id\u0027: \u0027ed4c03b9-8251-4c09-acc4-e59ee9e6aa37\u0027,"},{"line_number":62,"context_line":"        \u0027name\u0027: \u0027NetworkGateway\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9ZbU%3D","line":59,"updated":"2014-02-07 07:12:43.000000000","message":"Yeap, It\u0027s ok.","commit_id":"55dd69128dd903e9a69c545b607a7e3d3f2d4e44"}]}
