)]}'
{"nova/compute/utils.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":425,"context_line":"            context\u003dcontext,"},{"line_number":426,"context_line":"            priority\u003dfields.NotificationPriority.INFO,"},{"line_number":427,"context_line":"            publisher\u003dnotification_base.NotificationPublisher("},{"line_number":428,"context_line":"                host\u003d\u0027dummy\u0027, source\u003dsource),"},{"line_number":429,"context_line":"            event_type\u003dnotification_base.EventType("},{"line_number":430,"context_line":"                    object\u003d\u0027scheduler\u0027,"},{"line_number":431,"context_line":"                    action\u003daction,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_809d110c","line":428,"range":{"start_line":428,"start_character":22,"end_line":428,"end_character":27},"updated":"2017-10-04 14:52:08.000000000","message":"use CONF.host that is what is used in the legacy notification.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":425,"context_line":"            context\u003dcontext,"},{"line_number":426,"context_line":"            priority\u003dfields.NotificationPriority.INFO,"},{"line_number":427,"context_line":"            publisher\u003dnotification_base.NotificationPublisher("},{"line_number":428,"context_line":"                host\u003d\u0027dummy\u0027, source\u003dsource),"},{"line_number":429,"context_line":"            event_type\u003dnotification_base.EventType("},{"line_number":430,"context_line":"                    object\u003d\u0027scheduler\u0027,"},{"line_number":431,"context_line":"                    action\u003daction,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_34944044","line":428,"range":{"start_line":428,"start_character":22,"end_line":428,"end_character":27},"in_reply_to":"7f515b1d_809d110c","updated":"2017-10-06 17:04:38.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"}],"nova/notifications/objects/request_spec.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c6ce4dc2c253beb678d4643ec2bf0fd6305c6ddd","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    SCHEMA \u003d {"},{"line_number":31,"context_line":"        \u0027id\u0027: (\u0027request_spec\u0027, \u0027id\u0027),"},{"line_number":32,"context_line":"        \u0027ignore_hosts\u0027: (\u0027request_spec\u0027, \u0027ignore_hosts\u0027),"},{"line_number":33,"context_line":"        \u0027instance_uuid\u0027: (\u0027request_spec\u0027, \u0027instance_uuid\u0027),"},{"line_number":34,"context_line":"        \u0027project_id\u0027: (\u0027request_spec\u0027, \u0027project_id\u0027),"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_dd1ab869","line":31,"updated":"2018-11-20 10:20:00.000000000","message":"I think we don\u0027t need to include the database primary key","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"c89bc4fe8fe12d36957464e908f9311079e7a4f8","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    SCHEMA \u003d {"},{"line_number":31,"context_line":"        \u0027id\u0027: (\u0027request_spec\u0027, \u0027id\u0027),"},{"line_number":32,"context_line":"        \u0027ignore_hosts\u0027: (\u0027request_spec\u0027, \u0027ignore_hosts\u0027),"},{"line_number":33,"context_line":"        \u0027instance_uuid\u0027: (\u0027request_spec\u0027, \u0027instance_uuid\u0027),"},{"line_number":34,"context_line":"        \u0027project_id\u0027: (\u0027request_spec\u0027, \u0027project_id\u0027),"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_2672b4b0","line":31,"in_reply_to":"3f79a3b5_dd1ab869","updated":"2018-11-20 18:10:09.000000000","message":"Done","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c6ce4dc2c253beb678d4643ec2bf0fd6305c6ddd","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        # Note(elod.illes): according to request_spec \u0027host\u0027 shouldn\u0027t be"},{"line_number":287,"context_line":"        # nullable, but according to test_request_single_cell it seems if"},{"line_number":288,"context_line":"        # \u0027cell\u0027 is given \u0027host\u0027 could be null"},{"line_number":289,"context_line":"        # \u0027host\u0027: fields.StringField(),"},{"line_number":290,"context_line":"        # \u0027node\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":291,"context_line":"        # \u0027cell\u0027: fields.ObjectField(\u0027CellMapping\u0027, nullable\u003dTrue),"},{"line_number":292,"context_line":"        \u0027aggregates\u0027: fields.ListOfStringsField(nullable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_dd4f1867","line":289,"updated":"2018-11-20 10:20:00.000000000","message":"If we are unsure then make the notification object more generic (i.e. make the host field nullable)","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"cc4ebf6e0c1638e84a281880f195a06c73f20021","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        # Note(elod.illes): according to request_spec \u0027host\u0027 shouldn\u0027t be"},{"line_number":287,"context_line":"        # nullable, but according to test_request_single_cell it seems if"},{"line_number":288,"context_line":"        # \u0027cell\u0027 is given \u0027host\u0027 could be null"},{"line_number":289,"context_line":"        # \u0027host\u0027: fields.StringField(),"},{"line_number":290,"context_line":"        # \u0027node\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":291,"context_line":"        # \u0027cell\u0027: fields.ObjectField(\u0027CellMapping\u0027, nullable\u003dTrue),"},{"line_number":292,"context_line":"        \u0027aggregates\u0027: fields.ListOfStringsField(nullable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_e4cc9f97","line":289,"in_reply_to":"3f79a3b5_dd4f1867","updated":"2018-11-21 19:16:17.000000000","message":"As far as I understand now either host or cell should be initialized (regardless whether they are nullable or not), but populate_schema fails if host is not nullable and isn\u0027t given (e.g. the \u0027cell\u0027 field is used). So instead of using the schema I initialized the DestinationPayload \u0027manually\u0027.\n\nFurthermore, setting here the \u0027host\u0027 field to nullable does not help: populate_schema fails in that case, too.","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c6ce4dc2c253beb678d4643ec2bf0fd6305c6ddd","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        # \u0027cell\u0027 is given \u0027host\u0027 could be null"},{"line_number":289,"context_line":"        # \u0027host\u0027: fields.StringField(),"},{"line_number":290,"context_line":"        # \u0027node\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":291,"context_line":"        # \u0027cell\u0027: fields.ObjectField(\u0027CellMapping\u0027, nullable\u003dTrue),"},{"line_number":292,"context_line":"        \u0027aggregates\u0027: fields.ListOfStringsField(nullable\u003dTrue,"},{"line_number":293,"context_line":"                                                default\u003dNone),"},{"line_number":294,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_7d3e04b7","line":291,"updated":"2018-11-20 10:20:00.000000000","message":"Why do we have these fields commented out then filled later in the init?","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"cc4ebf6e0c1638e84a281880f195a06c73f20021","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        # \u0027cell\u0027 is given \u0027host\u0027 could be null"},{"line_number":289,"context_line":"        # \u0027host\u0027: fields.StringField(),"},{"line_number":290,"context_line":"        # \u0027node\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":291,"context_line":"        # \u0027cell\u0027: fields.ObjectField(\u0027CellMapping\u0027, nullable\u003dTrue),"},{"line_number":292,"context_line":"        \u0027aggregates\u0027: fields.ListOfStringsField(nullable\u003dTrue,"},{"line_number":293,"context_line":"                                                default\u003dNone),"},{"line_number":294,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_64e08ffa","line":291,"in_reply_to":"3f79a3b5_7d3e04b7","updated":"2018-11-21 19:16:17.000000000","message":"You are right we need these. Done.","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c6ce4dc2c253beb678d4643ec2bf0fd6305c6ddd","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    fields \u003d {"},{"line_number":321,"context_line":"        \u0027num_attempts\u0027: fields.IntegerField(),"},{"line_number":322,"context_line":"        \u0027hosts\u0027: fields.ObjectField(\u0027ComputeNodeList\u0027),"},{"line_number":323,"context_line":"    }"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def __init__(self, retry):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_bd5d7c18","line":322,"range":{"start_line":322,"start_character":17,"end_line":322,"end_character":55},"updated":"2018-11-20 10:20:00.000000000","message":"In a notification ovo we don\u0027t want to directly depend on non notification ovo so a change there does not cascade here. I suggest to include the hostnames as a list of string instead.","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"c89bc4fe8fe12d36957464e908f9311079e7a4f8","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    fields \u003d {"},{"line_number":321,"context_line":"        \u0027num_attempts\u0027: fields.IntegerField(),"},{"line_number":322,"context_line":"        \u0027hosts\u0027: fields.ObjectField(\u0027ComputeNodeList\u0027),"},{"line_number":323,"context_line":"    }"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def __init__(self, retry):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_464d703a","line":322,"range":{"start_line":322,"start_character":17,"end_line":322,"end_character":55},"in_reply_to":"3f79a3b5_bd5d7c18","updated":"2018-11-20 18:10:09.000000000","message":"Done","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c6ce4dc2c253beb678d4643ec2bf0fd6305c6ddd","unresolved":false,"context_lines":[{"line_number":333,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    SCHEMA \u003d {"},{"line_number":336,"context_line":"        \u0027id\u0027: (\u0027cell\u0027, \u0027id\u0027),"},{"line_number":337,"context_line":"        \u0027uuid\u0027: (\u0027cell\u0027, \u0027uuid\u0027),"},{"line_number":338,"context_line":"        \u0027name\u0027: (\u0027cell\u0027, \u0027name\u0027),"},{"line_number":339,"context_line":"        \u0027transport_url\u0027: (\u0027cell\u0027, \u0027transport_url\u0027),"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_5d5c6819","line":336,"updated":"2018-11-20 10:20:00.000000000","message":"I think we don\u0027t wan to include the database primary key.","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"c89bc4fe8fe12d36957464e908f9311079e7a4f8","unresolved":false,"context_lines":[{"line_number":333,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    SCHEMA \u003d {"},{"line_number":336,"context_line":"        \u0027id\u0027: (\u0027cell\u0027, \u0027id\u0027),"},{"line_number":337,"context_line":"        \u0027uuid\u0027: (\u0027cell\u0027, \u0027uuid\u0027),"},{"line_number":338,"context_line":"        \u0027name\u0027: (\u0027cell\u0027, \u0027name\u0027),"},{"line_number":339,"context_line":"        \u0027transport_url\u0027: (\u0027cell\u0027, \u0027transport_url\u0027),"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_e66b5cb5","line":336,"in_reply_to":"3f79a3b5_5d5c6819","updated":"2018-11-20 18:10:09.000000000","message":"Done","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1223fbe13fb45080f185d17390af98a9e4186348","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    SCHEMA \u003d {"},{"line_number":278,"context_line":"        # \u0027host\u0027: (\u0027destination\u0027, \u0027host\u0027),"},{"line_number":279,"context_line":"        # \u0027node\u0027: (\u0027destination\u0027, \u0027node\u0027),"},{"line_number":280,"context_line":"        # \u0027cell\u0027: (\u0027destination\u0027, \u0027cell\u0027),"},{"line_number":281,"context_line":"        \u0027aggregates\u0027: (\u0027destination\u0027, \u0027aggregates\u0027),"},{"line_number":282,"context_line":"    }"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f79a3b5_9eed61bb","line":280,"range":{"start_line":278,"start_character":1,"end_line":280,"end_character":42},"updated":"2018-11-30 12:14:53.000000000","message":"Delete these as the fields are manually set in init anyhow","commit_id":"c251e86a5f9421979fff8f4f9999c42e5a085693"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"1f13548da6e62f0de8ccf58c50d5a557b5529fdc","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    SCHEMA \u003d {"},{"line_number":278,"context_line":"        # \u0027host\u0027: (\u0027destination\u0027, \u0027host\u0027),"},{"line_number":279,"context_line":"        # \u0027node\u0027: (\u0027destination\u0027, \u0027node\u0027),"},{"line_number":280,"context_line":"        # \u0027cell\u0027: (\u0027destination\u0027, \u0027cell\u0027),"},{"line_number":281,"context_line":"        \u0027aggregates\u0027: (\u0027destination\u0027, \u0027aggregates\u0027),"},{"line_number":282,"context_line":"    }"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f79a3b5_7e04051b","line":280,"range":{"start_line":278,"start_character":1,"end_line":280,"end_character":42},"in_reply_to":"3f79a3b5_9eed61bb","updated":"2018-11-30 12:39:19.000000000","message":"Done","commit_id":"c251e86a5f9421979fff8f4f9999c42e5a085693"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"32975939b9ee95cba4b58a3820dcc51eeddff390","unresolved":false,"context_lines":[{"line_number":330,"context_line":"    SCHEMA \u003d {"},{"line_number":331,"context_line":"        \u0027uuid\u0027: (\u0027cell\u0027, \u0027uuid\u0027),"},{"line_number":332,"context_line":"        \u0027name\u0027: (\u0027cell\u0027, \u0027name\u0027),"},{"line_number":333,"context_line":"        \u0027transport_url\u0027: (\u0027cell\u0027, \u0027transport_url\u0027),"},{"line_number":334,"context_line":"        \u0027database_connection\u0027: (\u0027cell\u0027, \u0027database_connection\u0027),"},{"line_number":335,"context_line":"        \u0027disabled\u0027: (\u0027cell\u0027, \u0027disabled\u0027),"},{"line_number":336,"context_line":"    }"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5fc1f717_1207d71f","line":334,"range":{"start_line":333,"start_character":0,"end_line":334,"end_character":63},"updated":"2019-04-04 00:40:34.000000000","message":"Did anyone stop to think if this is something we should be exposing out of nova\u0027s notifications? What consumer needs this information? We don\u0027t expose cells information out of the API and by default we obfuscate the database_connection and transport_url in the nova-manage cell_v2 list_cells command.","commit_id":"70c7ba7324cf47179d978b4073545e3837d4fd24"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"cda8d165a36edcfaf4029c2a2c86bfc5856fe0f7","unresolved":false,"context_lines":[{"line_number":330,"context_line":"    SCHEMA \u003d {"},{"line_number":331,"context_line":"        \u0027uuid\u0027: (\u0027cell\u0027, \u0027uuid\u0027),"},{"line_number":332,"context_line":"        \u0027name\u0027: (\u0027cell\u0027, \u0027name\u0027),"},{"line_number":333,"context_line":"        \u0027transport_url\u0027: (\u0027cell\u0027, \u0027transport_url\u0027),"},{"line_number":334,"context_line":"        \u0027database_connection\u0027: (\u0027cell\u0027, \u0027database_connection\u0027),"},{"line_number":335,"context_line":"        \u0027disabled\u0027: (\u0027cell\u0027, \u0027disabled\u0027),"},{"line_number":336,"context_line":"    }"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5fc1f717_ac23ffbd","line":334,"range":{"start_line":333,"start_character":0,"end_line":334,"end_character":63},"in_reply_to":"5fc1f717_1207d71f","updated":"2019-04-04 08:03:14.000000000","message":"\u003e Did anyone stop to think if this is something we should be exposing\n \u003e out of nova\u0027s notifications? What consumer needs this information?\n \u003e We don\u0027t expose cells information out of the API and by default we\n \u003e obfuscate the database_connection and transport_url in the\n \u003e nova-manage cell_v2 list_cells command.\n\nI agree, these credentials should never go out of nova, thanks for the bug. When I initially found the commit I just thought all the notification payload objects should have all the fields in the original object. I guess there isn\u0027t a hard and fast rule for what needs to be included.\n\n@gibi: maybe we should add something to the developer notification docs where we consider what is important and not to expose.","commit_id":"70c7ba7324cf47179d978b4073545e3837d4fd24"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1038ab62b8a2a9567b68378274d27dca41f2c9a9","unresolved":false,"context_lines":[{"line_number":330,"context_line":"    SCHEMA \u003d {"},{"line_number":331,"context_line":"        \u0027uuid\u0027: (\u0027cell\u0027, \u0027uuid\u0027),"},{"line_number":332,"context_line":"        \u0027name\u0027: (\u0027cell\u0027, \u0027name\u0027),"},{"line_number":333,"context_line":"        \u0027transport_url\u0027: (\u0027cell\u0027, \u0027transport_url\u0027),"},{"line_number":334,"context_line":"        \u0027database_connection\u0027: (\u0027cell\u0027, \u0027database_connection\u0027),"},{"line_number":335,"context_line":"        \u0027disabled\u0027: (\u0027cell\u0027, \u0027disabled\u0027),"},{"line_number":336,"context_line":"    }"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5fc1f717_f57475d2","line":334,"range":{"start_line":333,"start_character":0,"end_line":334,"end_character":63},"in_reply_to":"5fc1f717_1207d71f","updated":"2019-04-04 01:51:46.000000000","message":"https://bugs.launchpad.net/nova/+bug/1823104","commit_id":"70c7ba7324cf47179d978b4073545e3837d4fd24"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"56ce7ced160c8927d7ea3dc39f7e78db947ddc45","unresolved":false,"context_lines":[{"line_number":330,"context_line":"    SCHEMA \u003d {"},{"line_number":331,"context_line":"        \u0027uuid\u0027: (\u0027cell\u0027, \u0027uuid\u0027),"},{"line_number":332,"context_line":"        \u0027name\u0027: (\u0027cell\u0027, \u0027name\u0027),"},{"line_number":333,"context_line":"        \u0027transport_url\u0027: (\u0027cell\u0027, \u0027transport_url\u0027),"},{"line_number":334,"context_line":"        \u0027database_connection\u0027: (\u0027cell\u0027, \u0027database_connection\u0027),"},{"line_number":335,"context_line":"        \u0027disabled\u0027: (\u0027cell\u0027, \u0027disabled\u0027),"},{"line_number":336,"context_line":"    }"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5fc1f717_957c0321","line":334,"range":{"start_line":333,"start_character":0,"end_line":334,"end_character":63},"in_reply_to":"5fc1f717_21e5dbdc","updated":"2019-04-04 13:30:32.000000000","message":"\u003e I\u0027m not arguing that it is not a security issue, but the\n \u003e seriousness of the issue is limited by the fact that to receive the\n \u003e notification one has to be able to connect the MQ already.\n\nNot necessarily the same MQ as the control plane use to talk to each other (and definitely not the same credentials). If these get forwarded to another service by a receiver and don\u0027t notice that there are credential in them, then it\u0027s definitely not good.","commit_id":"70c7ba7324cf47179d978b4073545e3837d4fd24"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3cdfe55f6ebe881d8e7c2224998d3872a4f5f014","unresolved":false,"context_lines":[{"line_number":330,"context_line":"    SCHEMA \u003d {"},{"line_number":331,"context_line":"        \u0027uuid\u0027: (\u0027cell\u0027, \u0027uuid\u0027),"},{"line_number":332,"context_line":"        \u0027name\u0027: (\u0027cell\u0027, \u0027name\u0027),"},{"line_number":333,"context_line":"        \u0027transport_url\u0027: (\u0027cell\u0027, \u0027transport_url\u0027),"},{"line_number":334,"context_line":"        \u0027database_connection\u0027: (\u0027cell\u0027, \u0027database_connection\u0027),"},{"line_number":335,"context_line":"        \u0027disabled\u0027: (\u0027cell\u0027, \u0027disabled\u0027),"},{"line_number":336,"context_line":"    }"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5fc1f717_e1b025e0","line":334,"range":{"start_line":333,"start_character":0,"end_line":334,"end_character":63},"in_reply_to":"5fc1f717_ac23ffbd","updated":"2019-04-04 15:56:04.000000000","message":"\u003e @gibi: maybe we should add something to the developer notification docs where we consider what is important and not to expose.\n\nStarted that here: https://review.openstack.org/#/c/650020/","commit_id":"70c7ba7324cf47179d978b4073545e3837d4fd24"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca9a178997f8eb5e4366a891dbbf39f836989f5d","unresolved":false,"context_lines":[{"line_number":330,"context_line":"    SCHEMA \u003d {"},{"line_number":331,"context_line":"        \u0027uuid\u0027: (\u0027cell\u0027, \u0027uuid\u0027),"},{"line_number":332,"context_line":"        \u0027name\u0027: (\u0027cell\u0027, \u0027name\u0027),"},{"line_number":333,"context_line":"        \u0027transport_url\u0027: (\u0027cell\u0027, \u0027transport_url\u0027),"},{"line_number":334,"context_line":"        \u0027database_connection\u0027: (\u0027cell\u0027, \u0027database_connection\u0027),"},{"line_number":335,"context_line":"        \u0027disabled\u0027: (\u0027cell\u0027, \u0027disabled\u0027),"},{"line_number":336,"context_line":"    }"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5fc1f717_21e5dbdc","line":334,"range":{"start_line":333,"start_character":0,"end_line":334,"end_character":63},"in_reply_to":"5fc1f717_d043873e","updated":"2019-04-04 06:18:52.000000000","message":"I\u0027m not arguing that it is not a security issue, but the seriousness of the issue is limited by the fact that to receive the notification one has to be able to connect the MQ already.","commit_id":"70c7ba7324cf47179d978b4073545e3837d4fd24"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b5fca3e745287469593b9d85dfd4656f2ce72a3b","unresolved":false,"context_lines":[{"line_number":330,"context_line":"    SCHEMA \u003d {"},{"line_number":331,"context_line":"        \u0027uuid\u0027: (\u0027cell\u0027, \u0027uuid\u0027),"},{"line_number":332,"context_line":"        \u0027name\u0027: (\u0027cell\u0027, \u0027name\u0027),"},{"line_number":333,"context_line":"        \u0027transport_url\u0027: (\u0027cell\u0027, \u0027transport_url\u0027),"},{"line_number":334,"context_line":"        \u0027database_connection\u0027: (\u0027cell\u0027, \u0027database_connection\u0027),"},{"line_number":335,"context_line":"        \u0027disabled\u0027: (\u0027cell\u0027, \u0027disabled\u0027),"},{"line_number":336,"context_line":"    }"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5fc1f717_d043873e","line":334,"range":{"start_line":333,"start_character":0,"end_line":334,"end_character":63},"in_reply_to":"5fc1f717_f57475d2","updated":"2019-04-04 02:05:55.000000000","message":"These definitely should not be exposed -- they contain the message queue and database credentials. This is a serious security issue.","commit_id":"70c7ba7324cf47179d978b4073545e3837d4fd24"}],"nova/notifications/objects/scheduler.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":21,"context_line":"class SchedulerPayload(base.NotificationPayloadBase):"},{"line_number":22,"context_line":"    SCHEMA \u003d {"},{"line_number":23,"context_line":"        \u0027availability_zone\u0027: (\u0027scheduler\u0027, \u0027availability_zone\u0027),"},{"line_number":24,"context_line":"        \u0027flavor\u0027: (\u0027scheduler\u0027, \u0027flavor\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_80a3d100","line":21,"updated":"2017-10-04 14:52:08.000000000","message":"It is more like a SelectDestinationPayload or a RequestSpecPayload in my head.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":21,"context_line":"class SchedulerPayload(base.NotificationPayloadBase):"},{"line_number":22,"context_line":"    SCHEMA \u003d {"},{"line_number":23,"context_line":"        \u0027availability_zone\u0027: (\u0027scheduler\u0027, \u0027availability_zone\u0027),"},{"line_number":24,"context_line":"        \u0027flavor\u0027: (\u0027scheduler\u0027, \u0027flavor\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_74e638eb","line":21,"in_reply_to":"7f515b1d_80a3d100","updated":"2017-10-06 17:04:38.000000000","message":"I chose RequestSpecPayload, because it\u0027s really a RequestSpec. But the notification is more like a SelectDestinationsNotification. Is it OK if they differs?","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":20,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":21,"context_line":"class SchedulerPayload(base.NotificationPayloadBase):"},{"line_number":22,"context_line":"    SCHEMA \u003d {"},{"line_number":23,"context_line":"        \u0027availability_zone\u0027: (\u0027scheduler\u0027, \u0027availability_zone\u0027),"},{"line_number":24,"context_line":"        \u0027flavor\u0027: (\u0027scheduler\u0027, \u0027flavor\u0027),"},{"line_number":25,"context_line":"        \u0027force_hosts\u0027: (\u0027scheduler\u0027, \u0027force_hosts\u0027),"},{"line_number":26,"context_line":"        \u0027force_nodes\u0027: (\u0027scheduler\u0027, \u0027force_nodes\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_e0b3a54c","line":23,"range":{"start_line":23,"start_character":31,"end_line":23,"end_character":40},"updated":"2017-10-04 14:52:08.000000000","message":"Let\u0027s call this request_spec as this refers to a RequestSpec object actually","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":20,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":21,"context_line":"class SchedulerPayload(base.NotificationPayloadBase):"},{"line_number":22,"context_line":"    SCHEMA \u003d {"},{"line_number":23,"context_line":"        \u0027availability_zone\u0027: (\u0027scheduler\u0027, \u0027availability_zone\u0027),"},{"line_number":24,"context_line":"        \u0027flavor\u0027: (\u0027scheduler\u0027, \u0027flavor\u0027),"},{"line_number":25,"context_line":"        \u0027force_hosts\u0027: (\u0027scheduler\u0027, \u0027force_hosts\u0027),"},{"line_number":26,"context_line":"        \u0027force_nodes\u0027: (\u0027scheduler\u0027, \u0027force_nodes\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_f420e8f9","line":23,"range":{"start_line":23,"start_character":31,"end_line":23,"end_character":40},"in_reply_to":"7f515b1d_e0b3a54c","updated":"2017-10-06 17:04:38.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":44,"context_line":"    fields \u003d {"},{"line_number":45,"context_line":"        \u0027availability_zone\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":46,"context_line":"        \u0027flavor\u0027: fields.ObjectField(\u0027Flavor\u0027),"},{"line_number":47,"context_line":"        \u0027force_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":48,"context_line":"        \u0027force_nodes\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027id\u0027: fields.DictOfStringsField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_e0996579","line":46,"range":{"start_line":46,"start_character":25,"end_line":46,"end_character":36},"updated":"2017-10-04 14:52:08.000000000","message":"We need a separate object model for notifications to avoid automatically emitting a new field when added to the internal object model. This sometimes means duplication but this separation allows as to be independent from the internal object model.\n\nWe already have a FlavorPayload to be used here.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":44,"context_line":"    fields \u003d {"},{"line_number":45,"context_line":"        \u0027availability_zone\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":46,"context_line":"        \u0027flavor\u0027: fields.ObjectField(\u0027Flavor\u0027),"},{"line_number":47,"context_line":"        \u0027force_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":48,"context_line":"        \u0027force_nodes\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027id\u0027: fields.DictOfStringsField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_54857cce","line":46,"range":{"start_line":46,"start_character":25,"end_line":46,"end_character":36},"in_reply_to":"7f515b1d_e0996579","updated":"2017-10-06 17:04:38.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    fields \u003d {"},{"line_number":45,"context_line":"        \u0027availability_zone\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":46,"context_line":"        \u0027flavor\u0027: fields.ObjectField(\u0027Flavor\u0027),"},{"line_number":47,"context_line":"        \u0027force_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":48,"context_line":"        \u0027force_nodes\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027id\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027ignore_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027image\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_8dce6981","line":48,"range":{"start_line":47,"start_character":0,"end_line":48,"end_character":64},"updated":"2017-10-04 14:52:08.000000000","message":"Based on the comments in the RequestSpec these are single strings only. So I suggest not to spread the misunderstanding here. This also means that you cannot copy the content of these fields with the schema but you have to copy by hand in the __init__","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    fields \u003d {"},{"line_number":45,"context_line":"        \u0027availability_zone\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":46,"context_line":"        \u0027flavor\u0027: fields.ObjectField(\u0027Flavor\u0027),"},{"line_number":47,"context_line":"        \u0027force_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":48,"context_line":"        \u0027force_nodes\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027id\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027ignore_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027image\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_72598158","line":48,"range":{"start_line":47,"start_character":0,"end_line":48,"end_character":64},"in_reply_to":"7f515b1d_8dce6981","updated":"2017-10-06 17:04:38.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \u0027flavor\u0027: fields.ObjectField(\u0027Flavor\u0027),"},{"line_number":47,"context_line":"        \u0027force_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":48,"context_line":"        \u0027force_nodes\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027id\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027ignore_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027image\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027instance_group\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_2dc5355c","line":49,"range":{"start_line":49,"start_character":21,"end_line":49,"end_character":39},"updated":"2017-10-04 14:52:08.000000000","message":"I don\u0027t think so. :)","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \u0027flavor\u0027: fields.ObjectField(\u0027Flavor\u0027),"},{"line_number":47,"context_line":"        \u0027force_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":48,"context_line":"        \u0027force_nodes\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027id\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027ignore_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027image\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027instance_group\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_722e21a6","line":49,"range":{"start_line":49,"start_character":21,"end_line":49,"end_character":39},"in_reply_to":"7f515b1d_2dc5355c","updated":"2017-10-06 17:04:38.000000000","message":"Neither do I anymore. :) Done.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \u0027force_nodes\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027id\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027ignore_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027image\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027instance_group\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":53,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":54,"context_line":"        \u0027limits\u0027: fields.DictOfStringsField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_2def75b1","line":51,"range":{"start_line":51,"start_character":9,"end_line":51,"end_character":14},"updated":"2017-10-04 14:52:08.000000000","message":"image_metadata","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \u0027force_nodes\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027id\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027ignore_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027image\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027instance_group\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":53,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":54,"context_line":"        \u0027limits\u0027: fields.DictOfStringsField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_8d6b091e","line":51,"range":{"start_line":51,"start_character":17,"end_line":51,"end_character":50},"updated":"2017-10-04 14:52:08.000000000","message":"the image in the RequestSpec object is an ImageMeta object that need to be represented here.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"a432dcea4a3737804d08ca610b6334a3deae4905","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \u0027force_nodes\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027id\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027ignore_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027image\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027instance_group\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":53,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":54,"context_line":"        \u0027limits\u0027: fields.DictOfStringsField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e5783_76ac078c","line":51,"range":{"start_line":51,"start_character":17,"end_line":51,"end_character":50},"in_reply_to":"7f515b1d_8d6b091e","updated":"2017-10-11 12:45:37.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \u0027id\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027ignore_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027image\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027instance_group\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":53,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":54,"context_line":"        \u0027limits\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027num_instances\u0027: fields.IntegerField(nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_edca7d18","line":52,"range":{"start_line":52,"start_character":26,"end_line":52,"end_character":59},"updated":"2017-10-04 14:52:08.000000000","message":"In the RequestSpec it is an InstanceGroup object we already have a ServerGroupPayload to represent that.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"a432dcea4a3737804d08ca610b6334a3deae4905","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \u0027id\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027ignore_hosts\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027image\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027instance_group\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":53,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":54,"context_line":"        \u0027limits\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027num_instances\u0027: fields.IntegerField(nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e5783_b6cb9f51","line":52,"range":{"start_line":52,"start_character":26,"end_line":52,"end_character":59},"in_reply_to":"7f515b1d_edca7d18","updated":"2017-10-11 12:45:37.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027image\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027instance_group\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":53,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":54,"context_line":"        \u0027limits\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027num_instances\u0027: fields.IntegerField(nullable\u003dFalse),"},{"line_number":56,"context_line":"        \u0027numa_topology\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027pci_requests\u0027: fields.ListOfStringsField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_0d94b9e7","line":54,"range":{"start_line":54,"start_character":9,"end_line":54,"end_character":15},"updated":"2017-10-04 14:52:08.000000000","message":"This is complicated I would not try to model this now. Maybe later if somebody explicitly needs this.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027image\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027instance_group\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":53,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":54,"context_line":"        \u0027limits\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027num_instances\u0027: fields.IntegerField(nullable\u003dFalse),"},{"line_number":56,"context_line":"        \u0027numa_topology\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027pci_requests\u0027: fields.ListOfStringsField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_f7346ae0","line":54,"range":{"start_line":54,"start_character":9,"end_line":54,"end_character":15},"in_reply_to":"7f515b1d_0d94b9e7","updated":"2017-10-06 17:04:38.000000000","message":"OK, removed.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":54,"context_line":"        \u0027limits\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027num_instances\u0027: fields.IntegerField(nullable\u003dFalse),"},{"line_number":56,"context_line":"        \u0027numa_topology\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027pci_requests\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":58,"context_line":"        \u0027project_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027requested_destination\u0027: fields.DictOfStringsField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_ea094395","line":56,"range":{"start_line":56,"start_character":9,"end_line":56,"end_character":22},"updated":"2017-10-04 14:52:08.000000000","message":"I\u0027m not sure we need this in the notification. The flavor and the image has all the information about the requested topology. So I feel this is more like an internal representation of that.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":54,"context_line":"        \u0027limits\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027num_instances\u0027: fields.IntegerField(nullable\u003dFalse),"},{"line_number":56,"context_line":"        \u0027numa_topology\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027pci_requests\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":58,"context_line":"        \u0027project_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027requested_destination\u0027: fields.DictOfStringsField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_f7b7ca39","line":56,"range":{"start_line":56,"start_character":9,"end_line":56,"end_character":22},"in_reply_to":"7f515b1d_ea094395","updated":"2017-10-06 17:04:38.000000000","message":"Ok, removed.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \u0027limits\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027num_instances\u0027: fields.IntegerField(nullable\u003dFalse),"},{"line_number":56,"context_line":"        \u0027numa_topology\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027pci_requests\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":58,"context_line":"        \u0027project_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027requested_destination\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":60,"context_line":"        \u0027retry\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_ea65c346","line":57,"range":{"start_line":57,"start_character":9,"end_line":57,"end_character":21},"updated":"2017-10-04 14:52:08.000000000","message":"Similar to numa_topology as this is also an internal representation. However it is more complicated as the actual request is not only in the flavor but also in the networks/ports requested during the boot and we have no access to that information deep in the scheduler any more.\nIf we want to add this to the payload then we have to try to define a Payload object for it.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \u0027limits\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027num_instances\u0027: fields.IntegerField(nullable\u003dFalse),"},{"line_number":56,"context_line":"        \u0027numa_topology\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027pci_requests\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":58,"context_line":"        \u0027project_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027requested_destination\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":60,"context_line":"        \u0027retry\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_9739b6a4","line":57,"range":{"start_line":57,"start_character":9,"end_line":57,"end_character":21},"in_reply_to":"7f515b1d_ea65c346","updated":"2017-10-06 17:04:38.000000000","message":"Removed now, for simplicity.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        \u0027numa_topology\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027pci_requests\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":58,"context_line":"        \u0027project_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027requested_destination\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":60,"context_line":"        \u0027retry\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027scheduler_hints\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":62,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_8d5e6943","line":59,"range":{"start_line":59,"start_character":40,"end_line":59,"end_character":58},"updated":"2017-10-04 14:52:08.000000000","message":"We need a payload object for it based on the Destination object.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"a432dcea4a3737804d08ca610b6334a3deae4905","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        \u0027numa_topology\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027pci_requests\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":58,"context_line":"        \u0027project_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027requested_destination\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":60,"context_line":"        \u0027retry\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027scheduler_hints\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":62,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e5783_160b938e","line":59,"range":{"start_line":59,"start_character":40,"end_line":59,"end_character":58},"in_reply_to":"7f515b1d_8d5e6943","updated":"2017-10-11 12:45:37.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \u0027pci_requests\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":58,"context_line":"        \u0027project_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027requested_destination\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":60,"context_line":"        \u0027retry\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027scheduler_hints\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":62,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027)"},{"line_number":63,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_2d55351e","line":60,"range":{"start_line":60,"start_character":24,"end_line":60,"end_character":35},"updated":"2017-10-04 14:52:08.000000000","message":"We need a payload object based on the SchedulerRetries object","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"a432dcea4a3737804d08ca610b6334a3deae4905","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \u0027pci_requests\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":58,"context_line":"        \u0027project_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027requested_destination\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":60,"context_line":"        \u0027retry\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027scheduler_hints\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":62,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027)"},{"line_number":63,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e5783_76f3e79f","line":60,"range":{"start_line":60,"start_character":24,"end_line":60,"end_character":35},"in_reply_to":"7f515b1d_2d55351e","updated":"2017-10-11 12:45:37.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \u0027requested_destination\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":60,"context_line":"        \u0027retry\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027scheduler_hints\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":62,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027)"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, spec, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_b0f61cf9","line":62,"range":{"start_line":62,"start_character":34,"end_line":62,"end_character":45},"updated":"2017-10-04 14:52:08.000000000","message":"Based on the comment in the SecurityGroup object the only non nova-network specific data here is the uuid of the neutron security group so I suggest to have a ListOfUUIDFields and populate that in the __init__","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \u0027requested_destination\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":60,"context_line":"        \u0027retry\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027scheduler_hints\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":62,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027)"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, spec, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_a80d4836","line":62,"range":{"start_line":62,"start_character":34,"end_line":62,"end_character":45},"in_reply_to":"7f515b1d_b0f61cf9","updated":"2017-10-06 17:04:38.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        \u0027retry\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027scheduler_hints\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":62,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027)"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, spec, **kwargs):"},{"line_number":66,"context_line":"        super(SchedulerPayload, self).__init__(**kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_f0025409","line":63,"updated":"2017-10-04 14:52:08.000000000","message":"I have no hard opinion what fields are really necessary in this notification. The legacy one dumped the whole RequestSpec so I see why you added everything here.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        \u0027retry\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027scheduler_hints\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":62,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027)"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, spec, **kwargs):"},{"line_number":66,"context_line":"        super(SchedulerPayload, self).__init__(**kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_c8408438","line":63,"in_reply_to":"7f515b1d_f0025409","updated":"2017-10-06 17:04:38.000000000","message":"Yes, I thought everything is needed like in the non-versioned notification. Let me know if I need to skip any other field.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027)"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, spec, **kwargs):"},{"line_number":66,"context_line":"        super(SchedulerPayload, self).__init__(**kwargs)"},{"line_number":67,"context_line":"        self.populate_schema(scheduler\u003dspec)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_807cf172","line":65,"range":{"start_line":65,"start_character":31,"end_line":65,"end_character":37},"updated":"2017-10-04 14:52:08.000000000","message":"Do we really need this kwarg?","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027)"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, spec, **kwargs):"},{"line_number":66,"context_line":"        super(SchedulerPayload, self).__init__(**kwargs)"},{"line_number":67,"context_line":"        self.populate_schema(scheduler\u003dspec)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_6081f54a","line":65,"range":{"start_line":65,"start_character":23,"end_line":65,"end_character":27},"updated":"2017-10-04 14:52:08.000000000","message":"Let\u0027s call this request_spec","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027)"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, spec, **kwargs):"},{"line_number":66,"context_line":"        super(SchedulerPayload, self).__init__(**kwargs)"},{"line_number":67,"context_line":"        self.populate_schema(scheduler\u003dspec)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_9464144b","line":65,"range":{"start_line":65,"start_character":23,"end_line":65,"end_character":27},"in_reply_to":"7f515b1d_6081f54a","updated":"2017-10-06 17:04:38.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027)"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, spec, **kwargs):"},{"line_number":66,"context_line":"        super(SchedulerPayload, self).__init__(**kwargs)"},{"line_number":67,"context_line":"        self.populate_schema(scheduler\u003dspec)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_68451043","line":65,"range":{"start_line":65,"start_character":31,"end_line":65,"end_character":37},"in_reply_to":"7f515b1d_807cf172","updated":"2017-10-06 17:04:38.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, spec, **kwargs):"},{"line_number":66,"context_line":"        super(SchedulerPayload, self).__init__(**kwargs)"},{"line_number":67,"context_line":"        self.populate_schema(scheduler\u003dspec)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_40c4b992","line":66,"range":{"start_line":66,"start_character":49,"end_line":66,"end_character":55},"updated":"2017-10-04 14:52:08.000000000","message":"you don\u0027t have to pass any parameter to NotificationPayloadBase.__init__()","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, spec, **kwargs):"},{"line_number":66,"context_line":"        super(SchedulerPayload, self).__init__(**kwargs)"},{"line_number":67,"context_line":"        self.populate_schema(scheduler\u003dspec)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_28795892","line":66,"range":{"start_line":66,"start_character":49,"end_line":66,"end_character":55},"in_reply_to":"7f515b1d_40c4b992","updated":"2017-10-06 17:04:38.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, spec, **kwargs):"},{"line_number":66,"context_line":"        super(SchedulerPayload, self).__init__(**kwargs)"},{"line_number":67,"context_line":"        self.populate_schema(scheduler\u003dspec)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"@base.notification_sample(\u0027scheduler-select_destination-start.json\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_00900195","line":67,"range":{"start_line":67,"start_character":29,"end_line":67,"end_character":38},"updated":"2017-10-04 14:52:08.000000000","message":"let\u0027s call this request_spec","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, spec, **kwargs):"},{"line_number":66,"context_line":"        super(SchedulerPayload, self).__init__(**kwargs)"},{"line_number":67,"context_line":"        self.populate_schema(scheduler\u003dspec)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"@base.notification_sample(\u0027scheduler-select_destination-start.json\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_14d5c4b7","line":67,"range":{"start_line":67,"start_character":29,"end_line":67,"end_character":38},"in_reply_to":"7f515b1d_00900195","updated":"2017-10-06 17:04:38.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":70,"context_line":"@base.notification_sample(\u0027scheduler-select_destination-start.json\u0027)"},{"line_number":71,"context_line":"@base.notification_sample(\u0027scheduler-select_destination-end.json\u0027)"},{"line_number":72,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":73,"context_line":"class SchedulerNotification(base.NotificationBase):"},{"line_number":74,"context_line":"    # Version 1.0: Initial version"},{"line_number":75,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_60cfb5b0","line":73,"range":{"start_line":73,"start_character":6,"end_line":73,"end_character":15},"updated":"2017-10-04 14:52:08.000000000","message":"It is more like a SelectDestinationNotification in my head","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":70,"context_line":"@base.notification_sample(\u0027scheduler-select_destination-start.json\u0027)"},{"line_number":71,"context_line":"@base.notification_sample(\u0027scheduler-select_destination-end.json\u0027)"},{"line_number":72,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":73,"context_line":"class SchedulerNotification(base.NotificationBase):"},{"line_number":74,"context_line":"    # Version 1.0: Initial version"},{"line_number":75,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_54e9fcb4","line":73,"range":{"start_line":73,"start_character":6,"end_line":73,"end_character":15},"in_reply_to":"7f515b1d_60cfb5b0","updated":"2017-10-06 17:04:38.000000000","message":"1 more \u0027s\u0027 in the middle, but otherwise: Done.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"}],"nova/notifications/objects/server_group.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c6ce4dc2c253beb678d4643ec2bf0fd6305c6ddd","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    # Version 1.2: Set UUIDField nullable"},{"line_number":36,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":37,"context_line":"    fields \u003d {"},{"line_number":38,"context_line":"        # Note(elod.illes): According to InstanceGroup implementation this is"},{"line_number":39,"context_line":"        # not nullable, but in reality some cases/tests it is actually None"},{"line_number":40,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":41,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":42,"context_line":"        \u0027user_id\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_7dacc4ea","line":39,"range":{"start_line":38,"start_character":1,"end_line":39,"end_character":75},"updated":"2018-11-20 10:20:00.000000000","message":"Then those tests are not setting the env up properly. Fix the test instead, please.","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"8bdb71d5e0c5c1ec9a40c14d95c298f9feed729f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    # Version 1.2: Set UUIDField nullable"},{"line_number":36,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":37,"context_line":"    fields \u003d {"},{"line_number":38,"context_line":"        # Note(elod.illes): According to InstanceGroup implementation this is"},{"line_number":39,"context_line":"        # not nullable, but in reality some cases/tests it is actually None"},{"line_number":40,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":41,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":42,"context_line":"        \u0027user_id\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_ed824d51","line":39,"range":{"start_line":38,"start_character":1,"end_line":39,"end_character":75},"in_reply_to":"3f79a3b5_7dacc4ea","updated":"2018-11-21 12:11:04.000000000","message":"It seems that I was wrong. Removed this change.","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"}],"nova/objects/fields.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":838,"context_line":"    RESIZE_CONFIRM \u003d \u0027resize_confirm\u0027"},{"line_number":839,"context_line":"    RESIZE_PREP \u003d \u0027resize_prep\u0027"},{"line_number":840,"context_line":"    RESIZE_REVERT \u003d \u0027resize_revert\u0027"},{"line_number":841,"context_line":"    SELECT_DESTINATIONS \u003d \u0027select_destinations\u0027"},{"line_number":842,"context_line":"    SHELVE_OFFLOAD \u003d \u0027shelve_offload\u0027"},{"line_number":843,"context_line":"    SOFT_DELETE \u003d \u0027soft_delete\u0027"},{"line_number":844,"context_line":"    TRIGGER_CRASH_DUMP \u003d \u0027trigger_crash_dump\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_ca58c7fb","line":841,"updated":"2017-10-04 14:52:08.000000000","message":"You have to bump the version of the EvenType object.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"d5d6dd76ae212f4c1ece7dcc49be7923c52573a5","unresolved":false,"context_lines":[{"line_number":838,"context_line":"    RESIZE_CONFIRM \u003d \u0027resize_confirm\u0027"},{"line_number":839,"context_line":"    RESIZE_PREP \u003d \u0027resize_prep\u0027"},{"line_number":840,"context_line":"    RESIZE_REVERT \u003d \u0027resize_revert\u0027"},{"line_number":841,"context_line":"    SELECT_DESTINATIONS \u003d \u0027select_destinations\u0027"},{"line_number":842,"context_line":"    SHELVE_OFFLOAD \u003d \u0027shelve_offload\u0027"},{"line_number":843,"context_line":"    SOFT_DELETE \u003d \u0027soft_delete\u0027"},{"line_number":844,"context_line":"    TRIGGER_CRASH_DUMP \u003d \u0027trigger_crash_dump\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_7483d805","line":841,"in_reply_to":"7f515b1d_ca58c7fb","updated":"2017-10-06 17:04:38.000000000","message":"Done","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"}],"nova/scheduler/filter_scheduler.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"318b90ca3ce3530c76c38b438dd0b79c9419aeba","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        compute_utils.notify_about_scheduler_action("},{"line_number":116,"context_line":"            context\u003dcontext, spec\u003dspec_obj,"},{"line_number":117,"context_line":"            action\u003dfields_obj.NotificationAction.SELECT_DESTINATIONS,"},{"line_number":118,"context_line":"            phase\u003dfields_obj.NotificationPhase.END)"},{"line_number":119,"context_line":"        return selected_hosts"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _schedule(self, context, spec_obj, instance_uuids,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_2a73db4f","line":118,"updated":"2017-10-04 14:52:08.000000000","message":"This is clearly following the pattern to of the legacy select_destination notification. However it seems strange that only the FilterScheduler emits this as there is a generic select_destination method in the scheduler/manager.py as well. Lets try to keep this here now for simplicity and move it later if needed.","commit_id":"a4eae376bcb8002c4512f1a420d2d19ce4150379"}],"nova/tests/functional/notification_sample_tests/notification_sample_base.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c6ce4dc2c253beb678d4643ec2bf0fd6305c6ddd","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        self.assertJsonEqual(sample_obj, notification)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _pop_and_verify_dest_select_notification(self,"},{"line_number":160,"context_line":"            server_id, replacements\u003dNone):"},{"line_number":161,"context_line":"        if replacements is None:"},{"line_number":162,"context_line":"            replacements \u003d {}"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_3de5ec3d","line":159,"range":{"start_line":159,"start_character":8,"end_line":159,"end_character":13},"updated":"2018-11-20 10:20:00.000000000","message":"Does this really pop?","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"c89bc4fe8fe12d36957464e908f9311079e7a4f8","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        self.assertJsonEqual(sample_obj, notification)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _pop_and_verify_dest_select_notification(self,"},{"line_number":160,"context_line":"            server_id, replacements\u003dNone):"},{"line_number":161,"context_line":"        if replacements is None:"},{"line_number":162,"context_line":"            replacements \u003d {}"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_4666d0be","line":159,"range":{"start_line":159,"start_character":8,"end_line":159,"end_character":13},"in_reply_to":"3f79a3b5_3de5ec3d","updated":"2018-11-20 18:10:09.000000000","message":"It is a bit hidden, but yes: see line 175","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1223fbe13fb45080f185d17390af98a9e4186348","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        self.assertJsonEqual(sample_obj, notification)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _pop_and_verify_dest_select_notification(self,"},{"line_number":160,"context_line":"            server_id, replacements\u003dNone):"},{"line_number":161,"context_line":"        if replacements is None:"},{"line_number":162,"context_line":"            replacements \u003d {}"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_5e3ca92c","line":159,"range":{"start_line":159,"start_character":8,"end_line":159,"end_character":13},"in_reply_to":"3f79a3b5_4666d0be","updated":"2018-11-30 12:14:53.000000000","message":"Thanks. I see now.","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c6ce4dc2c253beb678d4643ec2bf0fd6305c6ddd","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            replacements \u003d {}"},{"line_number":163,"context_line":"        replacements[\u0027instance_uuid\u0027] \u003d server_id"},{"line_number":164,"context_line":"        replacements[\u0027pci_requests.instance_uuid\u0027] \u003d server_id"},{"line_number":165,"context_line":"        replacements[\u0027flavor.extra_specs\u0027] \u003d self.ANY"},{"line_number":166,"context_line":"        replacements[\u0027numa_topology\u0027] \u003d self.ANY"},{"line_number":167,"context_line":"        scheduler_expected_notifications \u003d ["},{"line_number":168,"context_line":"            \u0027scheduler-select_destinations-start\u0027,"},{"line_number":169,"context_line":"            \u0027scheduler-select_destinations-end\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_5d4d483a","line":166,"range":{"start_line":165,"start_character":0,"end_line":166,"end_character":48},"updated":"2018-11-20 10:20:00.000000000","message":"So in general we didn\u0027t check the these fields in the sample but is some specific tests we do check them. That is OK to me.","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c6ce4dc2c253beb678d4643ec2bf0fd6305c6ddd","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        # Note(elod.illes): if ERROR state is expected then either only"},{"line_number":249,"context_line":"        # scheduler.select_destinations.start comes or both start and end."},{"line_number":250,"context_line":"        # Let\u0027s just handle those cases in their tests."},{"line_number":251,"context_line":"        if scheduler_hints is None and expected_status !\u003d \u0027ERROR\u0027:"},{"line_number":252,"context_line":"            self._pop_and_verify_dest_select_notification(found_server[\u0027id\u0027])"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        if found_server[\u0027status\u0027] \u003d\u003d \u0027ACTIVE\u0027:"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_7dda8476","line":251,"range":{"start_line":251,"start_character":11,"end_line":251,"end_character":34},"updated":"2018-11-20 10:20:00.000000000","message":"Why we need this?","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"cc4ebf6e0c1638e84a281880f195a06c73f20021","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        # Note(elod.illes): if ERROR state is expected then either only"},{"line_number":249,"context_line":"        # scheduler.select_destinations.start comes or both start and end."},{"line_number":250,"context_line":"        # Let\u0027s just handle those cases in their tests."},{"line_number":251,"context_line":"        if scheduler_hints is None and expected_status !\u003d \u0027ERROR\u0027:"},{"line_number":252,"context_line":"            self._pop_and_verify_dest_select_notification(found_server[\u0027id\u0027])"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        if found_server[\u0027status\u0027] \u003d\u003d \u0027ACTIVE\u0027:"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_446a3350","line":251,"range":{"start_line":251,"start_character":11,"end_line":251,"end_character":34},"in_reply_to":"3f79a3b5_7dda8476","updated":"2018-11-21 19:16:17.000000000","message":"If the expected status of the booting VM is \u0027ERROR\u0027 or there are scheduler_hints, then we have some special cases with a bit different notifications. In these cases the best/easiest is to handle those in the given test case, in my opinion.","commit_id":"ef6fe2491f5d3d6a7f41ccc31dbf49db933b916f"}]}
