)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"2a2ffcf3df8da99963ac97b5e5a295013b3c1ae8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"* make the image public"},{"line_number":24,"context_line":"* ensure the public image can be seen and used from the 2nd tenant"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Implement blueprint image-basic-ops"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: I34c3d227475d99d8295f89cd9bbb6f2c30dab173"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ae5cdf2_fb196fd2","line":26,"updated":"2014-06-23 05:03:54.000000000","message":"can not access this blueprint.","commit_id":"b7d94808fa4d8e4d37d62da8ed0a37367d21a0b4"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"607ef0dbf3e279de7e5014a67f22af06e3acc09e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"* make the image public"},{"line_number":24,"context_line":"* ensure the public image can be seen and used from the 2nd tenant"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Implement blueprint image-basic-ops"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: I34c3d227475d99d8295f89cd9bbb6f2c30dab173"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ae5cdf2_a1c09a7e","line":26,"in_reply_to":"1ae5cdf2_fb196fd2","updated":"2014-06-23 06:15:06.000000000","message":"Done","commit_id":"b7d94808fa4d8e4d37d62da8ed0a37367d21a0b4"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"a3f6b32c13a2fa00c1b6db0e0022e86b815f8972","unresolved":false,"context_lines":[{"line_number":23,"context_line":"* make the image public"},{"line_number":24,"context_line":"* ensure the public image can be seen and used from the 2nd tenant"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Implement blueprint image-basic-ops"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: I34c3d227475d99d8295f89cd9bbb6f2c30dab173"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1ae5cdf2_2b79a030","line":26,"updated":"2014-06-24 01:49:34.000000000","message":"this line should be delete as it does not need BP. https://review.openstack.org/99857","commit_id":"af29ebc83d6046e5d6e2e55bec5606a2409611b8"}],"tempest/scenario/manager.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"2a2ffcf3df8da99963ac97b5e5a295013b3c1ae8","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        self.assertEqual(\"queued\", image.status)"},{"line_number":429,"context_line":"        image.update(data\u003dimage_file)"},{"line_number":430,"context_line":"        image \u003d self.image_client.images.get(image.id)"},{"line_number":431,"context_line":"        self.assertEqual(\"active\", image.status)"},{"line_number":432,"context_line":"        return image.id"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    def glance_image_create(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_c7169bf1","line":431,"updated":"2014-06-23 05:03:54.000000000","message":"This line may fail if status is not \u0027active\u0027 yet. Here should use a wait statement to check image.status.\ne.g. self.status_timeout(self.image_client.images, image.id, \"active\")","commit_id":"b7d94808fa4d8e4d37d62da8ed0a37367d21a0b4"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"607ef0dbf3e279de7e5014a67f22af06e3acc09e","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        self.assertEqual(\"queued\", image.status)"},{"line_number":429,"context_line":"        image.update(data\u003dimage_file)"},{"line_number":430,"context_line":"        image \u003d self.image_client.images.get(image.id)"},{"line_number":431,"context_line":"        self.assertEqual(\"active\", image.status)"},{"line_number":432,"context_line":"        return image.id"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    def glance_image_create(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_613e928d","line":431,"in_reply_to":"1ae5cdf2_c7169bf1","updated":"2014-06-23 06:15:06.000000000","message":"Yep, make sense for me.","commit_id":"b7d94808fa4d8e4d37d62da8ed0a37367d21a0b4"}],"tempest/scenario/test_image_basic_ops.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"2acb606405f9298001bb4877ac8e307c0bd5fcde","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _share_image_and_check(self):"},{"line_number":56,"context_line":"        self.image_client.image_members.create(self.image,"},{"line_number":57,"context_line":"                                               self.alt_tenant_id)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # The alt tenant id should be in the member list"},{"line_number":60,"context_line":"        members \u003d self.alt_image_client.image_members.list(self.image)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_b894d7e8","line":57,"updated":"2014-06-18 06:49:12.000000000","message":"test image in the job is a \u0027ami\u0027 format image. It also includes two images for \u0027kernel\u0027 and \u0027ramdisk\u0027. So you may also need create member for them.","commit_id":"9ce414333a8bc98b506f4b6ec61ce1ea73c4ca38"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"dc4922fd46fe313b5341fd8820404ac42456d519","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _share_image_and_check(self):"},{"line_number":56,"context_line":"        self.image_client.image_members.create(self.image,"},{"line_number":57,"context_line":"                                               self.alt_tenant_id)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # The alt tenant id should be in the member list"},{"line_number":60,"context_line":"        members \u003d self.alt_image_client.image_members.list(self.image)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_831c106c","line":57,"in_reply_to":"1ae5cdf2_b894d7e8","updated":"2014-06-18 06:51:48.000000000","message":"Awesome, that makes more sense. Thanks for the comments. Will submit a PS soon.","commit_id":"9ce414333a8bc98b506f4b6ec61ce1ea73c4ca38"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"2a2ffcf3df8da99963ac97b5e5a295013b3c1ae8","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from glanceclient import exc as glance_exceptoins"},{"line_number":17,"context_line":"from tempest import config"},{"line_number":18,"context_line":"from tempest.openstack.common import log as logging"},{"line_number":19,"context_line":"from tempest.scenario import manager"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_67b4e7f0","line":16,"updated":"2014-06-23 05:03:54.000000000","message":"here need add a blank line to separate glanceclient module from tempest module.","commit_id":"b7d94808fa4d8e4d37d62da8ed0a37367d21a0b4"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"607ef0dbf3e279de7e5014a67f22af06e3acc09e","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from glanceclient import exc as glance_exceptoins"},{"line_number":17,"context_line":"from tempest import config"},{"line_number":18,"context_line":"from tempest.openstack.common import log as logging"},{"line_number":19,"context_line":"from tempest.scenario import manager"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e1baa20a","line":16,"in_reply_to":"1ae5cdf2_67b4e7f0","updated":"2014-06-23 06:15:06.000000000","message":"Done","commit_id":"b7d94808fa4d8e4d37d62da8ed0a37367d21a0b4"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"6e2798e6eefe5d8113cb53f4ed192d8a43afcd2a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    def _share_image_and_check(self):"},{"line_number":60,"context_line":"        self.image_client.image_members.create(self.image,"},{"line_number":61,"context_line":"                                               self.alt_tenant_id)"},{"line_number":62,"context_line":"        if hasattr(self, \u0027kernel\u0027) and hasattr(self, \u0027ramdisk\u0027):"},{"line_number":63,"context_line":"            self.image_client.image_members.create(self.kernel,"},{"line_number":64,"context_line":"                                                   self.alt_tenant_id)"},{"line_number":65,"context_line":"            self.image_client.image_members.create(self.ramdisk,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_9faad86f","line":62,"updated":"2014-06-24 13:57:54.000000000","message":"I don\u0027t get why you need to also check the \"kernel and ramdisk\" images. If the scenario works for a qcow2 image, it should work for all image types.\n\nLet\u0027s keep this as simple as possible.","commit_id":"852f7a943fa6162cf128608fa0510bbc3e3ce163"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"943f86e0eb419b519ccff689f4251cb473da18fd","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    def _share_image_and_check(self):"},{"line_number":60,"context_line":"        self.image_client.image_members.create(self.image,"},{"line_number":61,"context_line":"                                               self.alt_tenant_id)"},{"line_number":62,"context_line":"        if hasattr(self, \u0027kernel\u0027) and hasattr(self, \u0027ramdisk\u0027):"},{"line_number":63,"context_line":"            self.image_client.image_members.create(self.kernel,"},{"line_number":64,"context_line":"                                                   self.alt_tenant_id)"},{"line_number":65,"context_line":"            self.image_client.image_members.create(self.ramdisk,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_ddfed904","line":62,"in_reply_to":"1ae5cdf2_05474ca4","updated":"2014-06-26 08:37:08.000000000","message":"Hi Fei,\n\n\u003eAs you see, and you may know, image sharing is an important function for image service.\n\nYep ! That\u0027s why this scenario is super cool.\n\n\n\u003eAs for the qcow2 image, it\u0027s only one image object in Glance, but as for ami/ari/aki, it\u0027s combined by 3 ^image object^\n\nYeah but my point is that the image sharing with the qcow2 is enough to test what you want.  IMO there\u0027s not need to share an ami/ari/aki files because the code in Glance, as far as I know, is the same that for the qcow2 case.","commit_id":"852f7a943fa6162cf128608fa0510bbc3e3ce163"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"1d225d728f2b89c08f61ea6d7188eda12a1dc60e","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    def _share_image_and_check(self):"},{"line_number":60,"context_line":"        self.image_client.image_members.create(self.image,"},{"line_number":61,"context_line":"                                               self.alt_tenant_id)"},{"line_number":62,"context_line":"        if hasattr(self, \u0027kernel\u0027) and hasattr(self, \u0027ramdisk\u0027):"},{"line_number":63,"context_line":"            self.image_client.image_members.create(self.kernel,"},{"line_number":64,"context_line":"                                                   self.alt_tenant_id)"},{"line_number":65,"context_line":"            self.image_client.image_members.create(self.ramdisk,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_05474ca4","line":62,"in_reply_to":"1ae5cdf2_9faad86f","updated":"2014-06-24 21:06:58.000000000","message":"Hi Jordon, thanks for the review. As you see, and you may know, image sharing is an important function for image service. As for the qcow2 image, it\u0027s only one image object in Glance, but as for ami/ari/aki, it\u0027s combined by 3 ^image object^, so that means you have to share all of these 3 objects to make sure the image is accessible for the other tenants. You can refer the glance_image_create method of https://review.openstack.org/#/c/100140/10/tempest/scenario/manager.py to get more info. Please feel free let me know if you have more questions. Thanks.","commit_id":"852f7a943fa6162cf128608fa0510bbc3e3ce163"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"a6f5fb42489099eba9dfd131fb64cf445d9a5a11","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    def _share_image_and_check(self):"},{"line_number":60,"context_line":"        self.image_client.image_members.create(self.image,"},{"line_number":61,"context_line":"                                               self.alt_tenant_id)"},{"line_number":62,"context_line":"        if hasattr(self, \u0027kernel\u0027) and hasattr(self, \u0027ramdisk\u0027):"},{"line_number":63,"context_line":"            self.image_client.image_members.create(self.kernel,"},{"line_number":64,"context_line":"                                                   self.alt_tenant_id)"},{"line_number":65,"context_line":"            self.image_client.image_members.create(self.ramdisk,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_9138a3d5","line":62,"in_reply_to":"1ae5cdf2_ddfed904","updated":"2014-06-26 21:09:31.000000000","message":"Ah, I can see your point, but you know, there are many machines in the gate which don\u0027t have the qcow2 image. So I have to implement the ami/ari/aki logic branch to handle that. As you see in https://review.openstack.org/#/c/100140/10/tempest/scenario/manager.py, it\u0027s doing the similar thing. Thanks again for the review.","commit_id":"852f7a943fa6162cf128608fa0510bbc3e3ce163"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"6e2798e6eefe5d8113cb53f4ed192d8a43afcd2a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def _unshare_image_and_check(self):"},{"line_number":83,"context_line":"        self.image_client.image_members.delete(self.image,"},{"line_number":84,"context_line":"                                               self.alt_tenant_id)"},{"line_number":85,"context_line":"        if hasattr(self, \u0027kernel\u0027) and hasattr(self, \u0027ramdisk\u0027):"},{"line_number":86,"context_line":"            self.image_client.image_members.delete(self.kernel,"},{"line_number":87,"context_line":"                                                   self.alt_tenant_id)"},{"line_number":88,"context_line":"            self.image_client.image_members.delete(self.ramdisk,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_bffdd4b3","line":85,"updated":"2014-06-24 13:57:54.000000000","message":"I don\u0027t get why you need to also check the \"kernel and ramdisk\" images. If the scenario works for a qcow2 image, it should work for all image types.\n\nLet\u0027s keep this as simple as possible.","commit_id":"852f7a943fa6162cf128608fa0510bbc3e3ce163"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"6e2798e6eefe5d8113cb53f4ed192d8a43afcd2a","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def _publish_image_and_check(self):"},{"line_number":102,"context_line":"        # Make the image be public"},{"line_number":103,"context_line":"        self.admin_image_client.images.update(self.image, is_public\u003dTrue)"},{"line_number":104,"context_line":"        if hasattr(self, \u0027kernel\u0027) and hasattr(self, \u0027ramdisk\u0027):"},{"line_number":105,"context_line":"            self.admin_image_client.images.update(self.kernel, is_public\u003dTrue)"},{"line_number":106,"context_line":"            self.admin_image_client.images.update(self.ramdisk, is_public\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_9fc5785e","line":103,"updated":"2014-06-24 13:57:54.000000000","message":"I don\u0027t get why you need to also check the \"kernel and ramdisk\" images. If the scenario works for a qcow2 image, it should work for all image types.\n\nGlance code path regarding image sharing is the same whether the image is a raw, kernel or ramdisk.","commit_id":"852f7a943fa6162cf128608fa0510bbc3e3ce163"}]}
