)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e77e6df0447ff6b688734c578fbd060b2134fa41","unresolved":false,"context_lines":[{"line_number":10,"context_line":"has been transformed to the versioned notification framework."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Icadc53d84fa021aae0f9ec2e18e9125de98e00f6"},{"line_number":13,"context_line":"Implements: bp versioned-notification-transformation-pike"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3f4b6375_bd82c1fe","line":13,"range":{"start_line":13,"start_character":15,"end_line":13,"end_character":57},"updated":"2017-10-26 08:14:53.000000000","message":"nit: versioned-notification-transformation-queens","commit_id":"2990af9111bbd731026a8f2ad55ceaa8324bea50"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"337e8c0776780e7e6d178e6b0b34ad68c23d912d","unresolved":false,"context_lines":[{"line_number":10,"context_line":"has been transformed to the versioned notification framework."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Icadc53d84fa021aae0f9ec2e18e9125de98e00f6"},{"line_number":13,"context_line":"Implements: bp versioned-notification-transformation-pike"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3f4b6375_9f15b242","line":13,"range":{"start_line":13,"start_character":15,"end_line":13,"end_character":57},"in_reply_to":"3f4b6375_bd82c1fe","updated":"2017-10-26 13:15:04.000000000","message":"Thanks for noticing! Done.","commit_id":"2990af9111bbd731026a8f2ad55ceaa8324bea50"}],"nova/compute/api.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"21a64e8b9d8030ee85652e93c2fd39be1d29f714","unresolved":false,"context_lines":[{"line_number":4909,"context_line":"        keypair.name \u003d key_name"},{"line_number":4910,"context_line":"        keypair.type \u003d key_type"},{"line_number":4911,"context_line":"        keypair.fingerprint \u003d None"},{"line_number":4912,"context_line":"        keypair.public_key \u003d None"},{"line_number":4913,"context_line":""},{"line_number":4914,"context_line":"        compute_utils.notify_about_keypair_action("},{"line_number":4915,"context_line":"            context\u003dcontext,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_8f6b9483","line":4912,"range":{"start_line":4912,"start_character":29,"end_line":4912,"end_character":33},"updated":"2017-06-15 08:19:15.000000000","message":"\u0027public_key\u0027 is specified, not generated in the case of \u0027import keypair\u0027 case.\nSo it should be \u0027public_key\u0027 instead of None.\n\n\nhttps://github.com/openstack/nova/blob/28769f999041ac1d4b24a2a34d23575b12a6291f/nova/api/openstack/compute/keypairs.py#L126-L127","commit_id":"ce6240ff367b7cf6eac57d9039d13749f3152f38"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fe1df0a4f2ecb8914b1937781bf0f99fc1ff06a3","unresolved":false,"context_lines":[{"line_number":4914,"context_line":"        compute_utils.notify_about_keypair_action("},{"line_number":4915,"context_line":"            context\u003dcontext,"},{"line_number":4916,"context_line":"            keypair\u003dkeypair,"},{"line_number":4917,"context_line":"            action\u003dfields_obj.NotificationAction.IMPORT,"},{"line_number":4918,"context_line":"            phase\u003dfields_obj.NotificationPhase.START)"},{"line_number":4919,"context_line":""},{"line_number":4920,"context_line":"        fingerprint \u003d self._generate_fingerprint(public_key, key_type)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_682fe787","line":4917,"range":{"start_line":4917,"start_character":26,"end_line":4917,"end_character":56},"updated":"2017-06-16 10:44:30.000000000","message":"see my comment in the objects module, I wonder if we should just provide a CREATE notification, given even if the user used their existing keypair, that\u0027s creating a new keypair in Nova, right?","commit_id":"57b60ba6ad7d41d69ee86219030d4882ee2a42a8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a94f460ae6bbaeacbb05492f34e6c040f4850ed2","unresolved":false,"context_lines":[{"line_number":4914,"context_line":"        compute_utils.notify_about_keypair_action("},{"line_number":4915,"context_line":"            context\u003dcontext,"},{"line_number":4916,"context_line":"            keypair\u003dkeypair,"},{"line_number":4917,"context_line":"            action\u003dfields_obj.NotificationAction.IMPORT,"},{"line_number":4918,"context_line":"            phase\u003dfields_obj.NotificationPhase.START)"},{"line_number":4919,"context_line":""},{"line_number":4920,"context_line":"        fingerprint \u003d self._generate_fingerprint(public_key, key_type)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_7b2bc82f","line":4917,"range":{"start_line":4917,"start_character":26,"end_line":4917,"end_character":56},"in_reply_to":"3f1d235d_ec475a1c","updated":"2017-07-25 09:35:07.000000000","message":"Well, if the legacy notification made a distinction, then okay to distinguish again. I\u0027m just a bit concerned that we set a new type of action (ie. \"import\") just for a specific REST resource which isn\u0027t super RESTful but anyway...","commit_id":"57b60ba6ad7d41d69ee86219030d4882ee2a42a8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"489875c58226b89309752f322f1fcdb504174f6a","unresolved":false,"context_lines":[{"line_number":4914,"context_line":"        compute_utils.notify_about_keypair_action("},{"line_number":4915,"context_line":"            context\u003dcontext,"},{"line_number":4916,"context_line":"            keypair\u003dkeypair,"},{"line_number":4917,"context_line":"            action\u003dfields_obj.NotificationAction.IMPORT,"},{"line_number":4918,"context_line":"            phase\u003dfields_obj.NotificationPhase.START)"},{"line_number":4919,"context_line":""},{"line_number":4920,"context_line":"        fingerprint \u003d self._generate_fingerprint(public_key, key_type)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f1d235d_ec475a1c","line":4917,"range":{"start_line":4917,"start_character":26,"end_line":4917,"end_character":56},"in_reply_to":"7f231b9d_682fe787","updated":"2017-07-07 08:08:30.000000000","message":"The REST API says create or import [1] keypair. So user already familiar with the concept of importing. Also the legacy notification made a distinction between create and import. This distinction gives a bit more information to the notification consumer about what was the exact interaction between the user and nova. Is there a good reason not to provide this extra information?\n\n\n[1] https://developer.openstack.org/api-ref/compute/#create-or-import-keypair","commit_id":"57b60ba6ad7d41d69ee86219030d4882ee2a42a8"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"400ee9fc46856ba39c061dcd64e90e2b197f7350","unresolved":false,"context_lines":[{"line_number":4914,"context_line":"        compute_utils.notify_about_keypair_action("},{"line_number":4915,"context_line":"            context\u003dcontext,"},{"line_number":4916,"context_line":"            keypair\u003dkeypair,"},{"line_number":4917,"context_line":"            action\u003dfields_obj.NotificationAction.IMPORT,"},{"line_number":4918,"context_line":"            phase\u003dfields_obj.NotificationPhase.START)"},{"line_number":4919,"context_line":""},{"line_number":4920,"context_line":"        fingerprint \u003d self._generate_fingerprint(public_key, key_type)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_f64fcd31","line":4917,"range":{"start_line":4917,"start_character":26,"end_line":4917,"end_character":56},"in_reply_to":"ff346bd7_7b2bc82f","updated":"2017-07-25 09:55:26.000000000","message":"This is a true point. Maybe we can extend the create notification payload to have an attribute if the keypair was imported (something like a simple boolean field, whether the keypair was imported or not). How about this idea?","commit_id":"57b60ba6ad7d41d69ee86219030d4882ee2a42a8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fe1df0a4f2ecb8914b1937781bf0f99fc1ff06a3","unresolved":false,"context_lines":[{"line_number":4921,"context_line":""},{"line_number":4922,"context_line":"        keypair.fingerprint \u003d fingerprint"},{"line_number":4923,"context_line":"        keypair.public_key \u003d public_key"},{"line_number":4924,"context_line":"        keypair.create()"},{"line_number":4925,"context_line":""},{"line_number":4926,"context_line":"        compute_utils.notify_about_keypair_action("},{"line_number":4927,"context_line":"            context\u003dcontext,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_e8589731","line":4924,"updated":"2017-06-16 10:44:30.000000000","message":"see, even if the API is about importing the keypair, it\u0027s creating a new for nova.","commit_id":"57b60ba6ad7d41d69ee86219030d4882ee2a42a8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b17cc369008becbfa37eefde087ed441c7775d6a","unresolved":false,"context_lines":[{"line_number":4974,"context_line":"        keypair.name \u003d key_name"},{"line_number":4975,"context_line":"        keypair.type \u003d key_type"},{"line_number":4976,"context_line":"        keypair.fingerprint \u003d None"},{"line_number":4977,"context_line":"        keypair.public_key \u003d \u0027public_key\u0027"},{"line_number":4978,"context_line":""},{"line_number":4979,"context_line":"        compute_utils.notify_about_keypair_action("},{"line_number":4980,"context_line":"            context\u003dcontext,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f1d235d_e9c86c55","line":4977,"updated":"2017-07-07 07:55:51.000000000","message":"This seems odd. Can we move L4988 safely up here?","commit_id":"74321a15c9a0f5613ac70b6086514d97b013b026"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"755266519974f8eaae27755e0e85cf9811caae2c","unresolved":false,"context_lines":[{"line_number":4974,"context_line":"        keypair.name \u003d key_name"},{"line_number":4975,"context_line":"        keypair.type \u003d key_type"},{"line_number":4976,"context_line":"        keypair.fingerprint \u003d None"},{"line_number":4977,"context_line":"        keypair.public_key \u003d \u0027public_key\u0027"},{"line_number":4978,"context_line":""},{"line_number":4979,"context_line":"        compute_utils.notify_about_keypair_action("},{"line_number":4980,"context_line":"            context\u003dcontext,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_f33b48ce","line":4977,"in_reply_to":"3f1d235d_e9c86c55","updated":"2017-10-21 00:29:31.000000000","message":"Done","commit_id":"74321a15c9a0f5613ac70b6086514d97b013b026"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f0dabd645a15b4335ecca216ceb6667db42167a7","unresolved":false,"context_lines":[{"line_number":4782,"context_line":""},{"line_number":4783,"context_line":"    def _notify(self, context, event_suffix, keypair_name):"},{"line_number":4784,"context_line":"        payload \u003d {"},{"line_number":4785,"context_line":"            \u0027tenant_id\u0027: context.project_id,"},{"line_number":4786,"context_line":"            \u0027user_id\u0027: context.user_id,"},{"line_number":4787,"context_line":"            \u0027key_name\u0027: keypair_name,"},{"line_number":4788,"context_line":"        }"},{"line_number":4789,"context_line":"        notify \u003d self.get_notifier()"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f4b6375_8e3411e0","line":4786,"range":{"start_line":4785,"start_character":12,"end_line":4786,"end_character":39},"updated":"2017-10-30 20:23:02.000000000","message":"This is likely wrong or misleading now, because with microversion 2.10 an administrator can create/import a keypair for another user, so the context.user_id here isn\u0027t necessarily correct. That\u0027s not really an issue for versioned notifications, but just something I noticed while reviewing this.","commit_id":"fbc48bf1a596e7c7e53fe75eb616fba298f78558"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f0dabd645a15b4335ecca216ceb6667db42167a7","unresolved":false,"context_lines":[{"line_number":4828,"context_line":"            action\u003dfields_obj.NotificationAction.IMPORT,"},{"line_number":4829,"context_line":"            phase\u003dfields_obj.NotificationPhase.START)"},{"line_number":4830,"context_line":""},{"line_number":4831,"context_line":"        fingerprint \u003d self._generate_fingerprint(public_key, key_type)"},{"line_number":4832,"context_line":""},{"line_number":4833,"context_line":"        keypair.fingerprint \u003d fingerprint"},{"line_number":4834,"context_line":"        keypair.create()"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f4b6375_ee0ca53c","line":4831,"updated":"2017-10-30 20:23:02.000000000","message":"Why do we make a distinction between the time the fingerprint is generated or not? I assume to have some consistency with create_key_pair? Would be nice to have mentioned the reasoning in the commit message.","commit_id":"fbc48bf1a596e7c7e53fe75eb616fba298f78558"}],"nova/objects/fields.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fe1df0a4f2ecb8914b1937781bf0f99fc1ff06a3","unresolved":false,"context_lines":[{"line_number":822,"context_line":"    UNSHELVE \u003d \u0027unshelve\u0027"},{"line_number":823,"context_line":"    ADD_HOST \u003d \u0027add_host\u0027"},{"line_number":824,"context_line":"    REMOVE_HOST \u003d \u0027remove_host\u0027"},{"line_number":825,"context_line":"    IMPORT \u003d \u0027import\u0027"},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"    ALL \u003d (UPDATE, EXCEPTION, DELETE, PAUSE, UNPAUSE, RESIZE, VOLUME_SWAP,"},{"line_number":828,"context_line":"           SUSPEND, POWER_ON, REBOOT, SHUTDOWN, SNAPSHOT, ADD_FIXED_IP,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_5d286f95","line":825,"updated":"2017-06-16 10:44:30.000000000","message":"well, I\u0027m not super happy with that.\n\nWe already have all the user operations and \u0027import\u0027 doesn\u0027t like one. For sure, I understand why you add this one ( https://review.openstack.org/#/c/467514/5/nova/compute/api.py@4917 ) but I wonder if we should just use CREATE.","commit_id":"57b60ba6ad7d41d69ee86219030d4882ee2a42a8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ac7039eddbb538cd6f6a2db2bfb58ea1f3691f7d","unresolved":false,"context_lines":[{"line_number":822,"context_line":"    UNSHELVE \u003d \u0027unshelve\u0027"},{"line_number":823,"context_line":"    ADD_HOST \u003d \u0027add_host\u0027"},{"line_number":824,"context_line":"    REMOVE_HOST \u003d \u0027remove_host\u0027"},{"line_number":825,"context_line":"    IMPORT \u003d \u0027import\u0027"},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"    ALL \u003d (UPDATE, EXCEPTION, DELETE, PAUSE, UNPAUSE, RESIZE, VOLUME_SWAP,"},{"line_number":828,"context_line":"           SUSPEND, POWER_ON, REBOOT, SHUTDOWN, SNAPSHOT, ADD_FIXED_IP,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_7612bd0b","line":825,"in_reply_to":"3f1d235d_ec707a74","updated":"2017-07-25 09:57:01.000000000","message":"From a RESTful perspective, you only generate a new resource, right ? Of course, you\u0027re either generating it from scratch (like a single POST) or using a specific payload (like a PUT) but at the end, you\u0027ll get one more resource in your bucket.\nIf I were a notifications user, I guess I\u0027d rather want to know the number of keypairs (for chargeback by example) than rather knowing how the keypair was created, but I guess the only reason why people want to distinguish between create and import is because they just use notifications as Nova hooks for doing extra actions. \n\nAnyway, things are quite settled down now, and I don\u0027t want to block on such things, so just worth discussion for later.","commit_id":"57b60ba6ad7d41d69ee86219030d4882ee2a42a8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"489875c58226b89309752f322f1fcdb504174f6a","unresolved":false,"context_lines":[{"line_number":822,"context_line":"    UNSHELVE \u003d \u0027unshelve\u0027"},{"line_number":823,"context_line":"    ADD_HOST \u003d \u0027add_host\u0027"},{"line_number":824,"context_line":"    REMOVE_HOST \u003d \u0027remove_host\u0027"},{"line_number":825,"context_line":"    IMPORT \u003d \u0027import\u0027"},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"    ALL \u003d (UPDATE, EXCEPTION, DELETE, PAUSE, UNPAUSE, RESIZE, VOLUME_SWAP,"},{"line_number":828,"context_line":"           SUSPEND, POWER_ON, REBOOT, SHUTDOWN, SNAPSHOT, ADD_FIXED_IP,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f1d235d_ec707a74","line":825,"in_reply_to":"7f231b9d_5d286f95","updated":"2017-07-07 08:08:30.000000000","message":"I think import is a user operation as the REST API says create or import keypair.\n\n[1] https://developer.openstack.org/api-ref/compute/#create-or-import-keypair","commit_id":"57b60ba6ad7d41d69ee86219030d4882ee2a42a8"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"755266519974f8eaae27755e0e85cf9811caae2c","unresolved":false,"context_lines":[{"line_number":822,"context_line":"    UNSHELVE \u003d \u0027unshelve\u0027"},{"line_number":823,"context_line":"    ADD_HOST \u003d \u0027add_host\u0027"},{"line_number":824,"context_line":"    REMOVE_HOST \u003d \u0027remove_host\u0027"},{"line_number":825,"context_line":"    IMPORT \u003d \u0027import\u0027"},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"    ALL \u003d (UPDATE, EXCEPTION, DELETE, PAUSE, UNPAUSE, RESIZE, VOLUME_SWAP,"},{"line_number":828,"context_line":"           SUSPEND, POWER_ON, REBOOT, SHUTDOWN, SNAPSHOT, ADD_FIXED_IP,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_48cf0ab0","line":825,"in_reply_to":"ff346bd7_7612bd0b","updated":"2017-10-21 00:29:31.000000000","message":"Import readded.","commit_id":"57b60ba6ad7d41d69ee86219030d4882ee2a42a8"}],"nova/tests/functional/notification_sample_tests/notification_sample_base.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b7787fa365f8876b2d3933ba55827da7698f052a","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        # Ignore the create flavor notification"},{"line_number":163,"context_line":"        fake_notifier.reset()"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        keypair_req \u003d {"},{"line_number":166,"context_line":"            \"keypair\": {"},{"line_number":167,"context_line":"                \"name\": \"my-key\","},{"line_number":168,"context_line":"                \"public_key\": fake_crypto.get_ssh_public_key()"},{"line_number":169,"context_line":"            }}"},{"line_number":170,"context_line":"        self.api.post_keypair(keypair_req)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        server \u003d self._build_minimal_create_server_request("},{"line_number":173,"context_line":"            self.api, \u0027some-server\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f4b6375_29ed1725","line":170,"range":{"start_line":165,"start_character":8,"end_line":170,"end_character":42},"updated":"2017-10-30 20:39:13.000000000","message":"Oh I see, this is why. It would be more obvious if we moved the keypair import notification closer to this.","commit_id":"fbc48bf1a596e7c7e53fe75eb616fba298f78558"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f0dabd645a15b4335ecca216ceb6667db42167a7","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                                                   expected_status)"},{"line_number":198,"context_line":"        found_server[\u0027reservation_id\u0027] \u003d reservation_id"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        keypair_expected_notifications \u003d ["},{"line_number":201,"context_line":"            \u0027keypair-import-start\u0027,"},{"line_number":202,"context_line":"            \u0027keypair-import-end\u0027"},{"line_number":203,"context_line":"        ]"},{"line_number":204,"context_line":"        self.assertLessEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":205,"context_line":"        for notification in keypair_expected_notifications:"},{"line_number":206,"context_line":"            self._verify_notification("},{"line_number":207,"context_line":"                notification,"},{"line_number":208,"context_line":"                actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS.pop(0))"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        if found_server[\u0027status\u0027] \u003d\u003d \u0027ACTIVE\u0027:"},{"line_number":211,"context_line":"            self.api.put_server_tags(found_server[\u0027id\u0027], [\u0027tag1\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f4b6375_ae510d65","line":208,"range":{"start_line":200,"start_character":8,"end_line":208,"end_character":68},"updated":"2017-10-30 20:23:02.000000000","message":"I\u0027m not really sure what\u0027s the reason behind needing to add this. I can pull this change down and remove it to find out I guess.","commit_id":"fbc48bf1a596e7c7e53fe75eb616fba298f78558"}],"nova/tests/functional/notification_sample_tests/test_instance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b17cc369008becbfa37eefde087ed441c7775d6a","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        self.assertEqual(9, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        # This list needs to be in order."},{"line_number":160,"context_line":"        keypair_expected_notifications \u003d ["},{"line_number":161,"context_line":"            \u0027keypair-create-start\u0027,"},{"line_number":162,"context_line":"            \u0027keypair-create-end\u0027"},{"line_number":163,"context_line":"        ]"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        instance_expected_notifications \u003d ["},{"line_number":166,"context_line":"            \u0027instance-create-start\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f1d235d_49440074","line":163,"range":{"start_line":160,"start_character":0,"end_line":163,"end_character":9},"updated":"2017-07-07 07:55:51.000000000","message":"I\u0027m wondering if we can somehow get rid of the repetitive modification of every test case that boots a VM.\n\nCan we move the assertion of the keypair-create notifications to the _boot_a_server call? Also pop this two notifications out from fake_notifier.VERSIONED_NOTIFICATIONS after the move so most of the test cases below doesn\u0027t need to be changed.","commit_id":"74321a15c9a0f5613ac70b6086514d97b013b026"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"e6a27aec80cb14aa87fee42adeae6455f00992eb","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        self.assertEqual(9, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        # This list needs to be in order."},{"line_number":160,"context_line":"        keypair_expected_notifications \u003d ["},{"line_number":161,"context_line":"            \u0027keypair-create-start\u0027,"},{"line_number":162,"context_line":"            \u0027keypair-create-end\u0027"},{"line_number":163,"context_line":"        ]"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        instance_expected_notifications \u003d ["},{"line_number":166,"context_line":"            \u0027instance-create-start\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_c8bada08","line":163,"range":{"start_line":160,"start_character":0,"end_line":163,"end_character":9},"in_reply_to":"3f1d235d_49440074","updated":"2017-10-21 00:30:36.000000000","message":"Done","commit_id":"74321a15c9a0f5613ac70b6086514d97b013b026"}]}
