)]}'
{"etc/glance-image-import.conf.sample":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"041464cc0fc29ee21f869414aa591352b5b43d53","unresolved":false,"context_lines":[{"line_number":29,"context_line":"#     * Any provided Task object name to be included"},{"line_number":30,"context_line":"#       in to the flow."},{"line_number":31,"context_line":"#  (list value)"},{"line_number":32,"context_line":"#image_import_plugins \u003d [no_op]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"[inject_metadata_properties]"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"bf8cb3f7_3bcf8980","line":32,"range":{"start_line":32,"start_character":25,"end_line":32,"end_character":30},"updated":"2017-12-21 03:53:27.000000000","message":"this should be [\"no_op\"]","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"e6558f7499d8cefae48463a065d46d5bcb1a0078","unresolved":false,"context_lines":[{"line_number":29,"context_line":"#     * Any provided Task object name to be included"},{"line_number":30,"context_line":"#       in to the flow."},{"line_number":31,"context_line":"#  (list value)"},{"line_number":32,"context_line":"#image_import_plugins \u003d [no_op]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"[inject_metadata_properties]"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"bf8cb3f7_7291ab52","line":32,"range":{"start_line":32,"start_character":25,"end_line":32,"end_character":30},"in_reply_to":"bf8cb3f7_3bcf8980","updated":"2017-12-21 12:19:33.000000000","message":"No need, the beauty of the StringType(quotes\u003dTrue) is that it expects the list item being string and it can handle quotes so [no_op, foo_bar] [\"no_op\", \"foo_bar\"] and [\"no_op\", foo_bar] should all work.","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"f310333e6d154765974a5da648e71cf9eade0523","unresolved":false,"context_lines":[{"line_number":54,"context_line":"# Dictionary contains metadata properties to be injected in image."},{"line_number":55,"context_line":"#"},{"line_number":56,"context_line":"# Possible values:"},{"line_number":57,"context_line":"#     * Dictionary containing key/value pairs. Key and value characters"},{"line_number":58,"context_line":"#     length should be \u003c\u003d 255. For example: k1:v1,k2:v2"},{"line_number":59,"context_line":"#"},{"line_number":60,"context_line":"#"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"bf8cb3f7_f3a2689a","line":57,"range":{"start_line":57,"start_character":55,"end_line":57,"end_character":60},"updated":"2017-12-26 09:14:41.000000000","message":"You need to regenerate the sample conf file to reflect the change in config option.","commit_id":"3915bf3dc6f7d8df3b829073dbc02aadd7f3c17f"}],"glance/async/flows/api_image_import.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"201992ee0699e1afe69bcba1a2466ae671df959f","unresolved":false,"context_lines":[{"line_number":255,"context_line":"            name\u003d\u0027%s-InjectMetadataProperties-%s\u0027 % (task_type, task_id))"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def execute(self):"},{"line_number":258,"context_line":"        \"\"\"Transition image properties to active"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        :param image_id: Glance Image ID"},{"line_number":261,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_2ff747d7","line":258,"range":{"start_line":258,"start_character":11,"end_line":258,"end_character":48},"updated":"2017-12-13 10:30:36.000000000","message":"This should be inject custom metadata properties to image?","commit_id":"9ca0c59c82ef7351de27f76e38b1542d8241e70f"}],"glance/async/flows/plugins/inject_image_metadata.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"041464cc0fc29ee21f869414aa591352b5b43d53","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License.\r"},{"line_number":15,"context_line":"\r"},{"line_number":16,"context_line":"\r"},{"line_number":17,"context_line":"import glance_store as store_api\r"},{"line_number":18,"context_line":"from glance_store import backend\r"},{"line_number":19,"context_line":"from oslo_config import cfg\r"},{"line_number":20,"context_line":"from oslo_log import log as logging\r"},{"line_number":21,"context_line":"from oslo_utils import encodeutils\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_bbb719d9","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":32},"updated":"2017-12-21 03:53:27.000000000","message":"unused","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"041464cc0fc29ee21f869414aa591352b5b43d53","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import glance_store as store_api\r"},{"line_number":18,"context_line":"from glance_store import backend\r"},{"line_number":19,"context_line":"from oslo_config import cfg\r"},{"line_number":20,"context_line":"from oslo_log import log as logging\r"},{"line_number":21,"context_line":"from oslo_utils import encodeutils\r"},{"line_number":22,"context_line":"import six\r"},{"line_number":23,"context_line":"from taskflow.patterns import linear_flow as lf\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_5b912d52","line":20,"range":{"start_line":20,"start_character":28,"end_line":20,"end_character":35},"updated":"2017-12-21 03:53:27.000000000","message":"you are not using logs anywhere, does it required?","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"041464cc0fc29ee21f869414aa591352b5b43d53","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from glance_store import backend\r"},{"line_number":19,"context_line":"from oslo_config import cfg\r"},{"line_number":20,"context_line":"from oslo_log import log as logging\r"},{"line_number":21,"context_line":"from oslo_utils import encodeutils\r"},{"line_number":22,"context_line":"import six\r"},{"line_number":23,"context_line":"from taskflow.patterns import linear_flow as lf\r"},{"line_number":24,"context_line":"from taskflow import retry\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_fb9da166","line":21,"range":{"start_line":21,"start_character":24,"end_line":21,"end_character":34},"updated":"2017-12-21 03:53:27.000000000","message":"unused import","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"041464cc0fc29ee21f869414aa591352b5b43d53","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_config import cfg\r"},{"line_number":20,"context_line":"from oslo_log import log as logging\r"},{"line_number":21,"context_line":"from oslo_utils import encodeutils\r"},{"line_number":22,"context_line":"import six\r"},{"line_number":23,"context_line":"from taskflow.patterns import linear_flow as lf\r"},{"line_number":24,"context_line":"from taskflow import retry\r"},{"line_number":25,"context_line":"from taskflow import task\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_1ba9657a","line":22,"range":{"start_line":22,"start_character":10,"end_line":22,"end_character":10},"updated":"2017-12-21 03:53:27.000000000","message":"unused","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"041464cc0fc29ee21f869414aa591352b5b43d53","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from oslo_utils import encodeutils\r"},{"line_number":22,"context_line":"import six\r"},{"line_number":23,"context_line":"from taskflow.patterns import linear_flow as lf\r"},{"line_number":24,"context_line":"from taskflow import retry\r"},{"line_number":25,"context_line":"from taskflow import task\r"},{"line_number":26,"context_line":"\r"},{"line_number":27,"context_line":"from glance.common import exception\r"},{"line_number":28,"context_line":"from glance.common.scripts.image_import import main as image_import\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_fbab6172","line":25,"range":{"start_line":24,"start_character":0,"end_line":25,"end_character":25},"updated":"2017-12-21 03:53:27.000000000","message":"unused","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d2cf9c520d8e85db14a567f4920251e446d3d8cb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from oslo_utils import encodeutils\r"},{"line_number":22,"context_line":"import six\r"},{"line_number":23,"context_line":"from taskflow.patterns import linear_flow as lf\r"},{"line_number":24,"context_line":"from taskflow import retry\r"},{"line_number":25,"context_line":"from taskflow import task\r"},{"line_number":26,"context_line":"\r"},{"line_number":27,"context_line":"from glance.common import exception\r"},{"line_number":28,"context_line":"from glance.common.scripts.image_import import main as image_import\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_9b39f542","line":25,"range":{"start_line":24,"start_character":0,"end_line":25,"end_character":25},"in_reply_to":"bf8cb3f7_fbab6172","updated":"2017-12-21 04:00:42.000000000","message":"task is required, but retry is unused","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"041464cc0fc29ee21f869414aa591352b5b43d53","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from taskflow.patterns import linear_flow as lf\r"},{"line_number":24,"context_line":"from taskflow import retry\r"},{"line_number":25,"context_line":"from taskflow import task\r"},{"line_number":26,"context_line":"\r"},{"line_number":27,"context_line":"from glance.common import exception\r"},{"line_number":28,"context_line":"from glance.common.scripts.image_import import main as image_import\r"},{"line_number":29,"context_line":"from glance.common.scripts import utils as script_utils\r"},{"line_number":30,"context_line":"from glance.i18n import _, _LE, _LI\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_5b9fed4f","line":27,"range":{"start_line":26,"start_character":0,"end_line":27,"end_character":35},"updated":"2017-12-21 03:53:27.000000000","message":"unused","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"041464cc0fc29ee21f869414aa591352b5b43d53","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from taskflow import task\r"},{"line_number":26,"context_line":"\r"},{"line_number":27,"context_line":"from glance.common import exception\r"},{"line_number":28,"context_line":"from glance.common.scripts.image_import import main as image_import\r"},{"line_number":29,"context_line":"from glance.common.scripts import utils as script_utils\r"},{"line_number":30,"context_line":"from glance.i18n import _, _LE, _LI\r"},{"line_number":31,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_5b7a8d24","line":28,"range":{"start_line":28,"start_character":1,"end_line":28,"end_character":67},"updated":"2017-12-21 03:53:27.000000000","message":"unused import","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"041464cc0fc29ee21f869414aa591352b5b43d53","unresolved":false,"context_lines":[{"line_number":26,"context_line":"\r"},{"line_number":27,"context_line":"from glance.common import exception\r"},{"line_number":28,"context_line":"from glance.common.scripts.image_import import main as image_import\r"},{"line_number":29,"context_line":"from glance.common.scripts import utils as script_utils\r"},{"line_number":30,"context_line":"from glance.i18n import _, _LE, _LI\r"},{"line_number":31,"context_line":"\r"},{"line_number":32,"context_line":"\r"},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_db93fd4e","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":35},"updated":"2017-12-21 03:53:27.000000000","message":"unused as well","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"041464cc0fc29ee21f869414aa591352b5b43d53","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from glance.i18n import _, _LE, _LI\r"},{"line_number":31,"context_line":"\r"},{"line_number":32,"context_line":"\r"},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"CONF \u003d cfg.CONF\r"},{"line_number":36,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_1b9ba572","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":33},"updated":"2017-12-21 03:53:27.000000000","message":"ditto","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"041464cc0fc29ee21f869414aa591352b5b43d53","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \"\"\"\r"},{"line_number":54,"context_line":"        if self.properties:\r"},{"line_number":55,"context_line":"            image \u003d self.image_repo.get(self.image_id)\r"},{"line_number":56,"context_line":"            image.extra_properties \u003d self.properties\r"},{"line_number":57,"context_line":"            self.image_repo.save(image)\r"},{"line_number":58,"context_line":"\r"},{"line_number":59,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_bbd2b933","line":56,"range":{"start_line":56,"start_character":13,"end_line":56,"end_character":52},"updated":"2017-12-21 03:53:27.000000000","message":"Here I guess you are overwriting existing image properties.\nFor example while creating image user has passed --property custom_key\u003d\"custom_value\" and you are injecting abc\u003d\"abcd\" then image should show both the properties (I have not tested though, please confirm the same).\n\nIf this is the behavior, then you need something like;\nimage.extra_properties.update(self.properties)","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"e6558f7499d8cefae48463a065d46d5bcb1a0078","unresolved":false,"context_lines":[{"line_number":58,"context_line":"\r"},{"line_number":59,"context_line":"\r"},{"line_number":60,"context_line":"def get_flow(**kwargs):\r"},{"line_number":61,"context_line":"    \"\"\"Return task flow for no-op.\r"},{"line_number":62,"context_line":"\r"},{"line_number":63,"context_line":"    :param task_id: Task ID.\r"},{"line_number":64,"context_line":"    :param task_type: Type of the task.\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_d2c67717","line":61,"range":{"start_line":61,"start_character":28,"end_line":61,"end_character":33},"updated":"2017-12-21 12:19:33.000000000","message":"nit: inject_metadata_properties","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"e6558f7499d8cefae48463a065d46d5bcb1a0078","unresolved":false,"context_lines":[{"line_number":62,"context_line":"\r"},{"line_number":63,"context_line":"    :param task_id: Task ID.\r"},{"line_number":64,"context_line":"    :param task_type: Type of the task.\r"},{"line_number":65,"context_line":"    :param image_repo: Image repository used.\r"},{"line_number":66,"context_line":"    \"\"\"\r"},{"line_number":67,"context_line":"    task_id \u003d kwargs.get(\u0027task_id\u0027)\r"},{"line_number":68,"context_line":"    task_type \u003d kwargs.get(\u0027task_type\u0027)\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_92d0efcb","line":65,"updated":"2017-12-21 12:19:33.000000000","message":"image_id, context","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"4955b7516742e45327c415fe6843f1fd8bb5e9a7","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\r"},{"line_number":22,"context_line":"from glance.i18n import _\r"},{"line_number":23,"context_line":"\r"},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)\r"},{"line_number":25,"context_line":"\r"},{"line_number":26,"context_line":"\r"},{"line_number":27,"context_line":"CONF \u003d cfg.CONF\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_0daa4fd1","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":33},"updated":"2017-12-26 05:21:16.000000000","message":"Why does we need this if not logging any thing?","commit_id":"3e11d19abbf9a3a8ab5172b9d251a6e184ef6eea"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"4955b7516742e45327c415fe6843f1fd8bb5e9a7","unresolved":false,"context_lines":[{"line_number":47,"context_line":"Dictionary contains metadata properties to be injected in image.\r"},{"line_number":48,"context_line":"\r"},{"line_number":49,"context_line":"Possible values:\r"},{"line_number":50,"context_line":"    * Dictionary containing key/value pairs. Key and value characters\r"},{"line_number":51,"context_line":"    length should be \u003c\u003d 255. For example: k1:v1,k2:v2\r"},{"line_number":52,"context_line":"\r"},{"line_number":53,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf8cb3f7_8d02df08","line":50,"range":{"start_line":50,"start_character":53,"end_line":50,"end_character":58},"updated":"2017-12-26 05:21:16.000000000","message":"no limit on value as it\u0027s type is text in the database.","commit_id":"3e11d19abbf9a3a8ab5172b9d251a6e184ef6eea"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"91535e03b84b77df4daa87008607588b00252ed5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 NTT DATA, Inc.\r"},{"line_number":2,"context_line":"# All Rights Reserved.\r"},{"line_number":3,"context_line":"#\r"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\r"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_8a01da3a","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2018-01-18 09:35:21.000000000","message":"2018","commit_id":"17eb5204175fa4e5c8986755b750efb7b8298ff8"},{"author":{"_account_id":20182,"name":"Bhagyashri Shewale","email":"bshewale@redhat.com","username":"bhagyashris"},"change_message_id":"fea070013966c046d3068d9b7a09e99802afc692","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 NTT DATA, Inc.\r"},{"line_number":2,"context_line":"# All Rights Reserved.\r"},{"line_number":3,"context_line":"#\r"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\r"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_90a6e80e","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"7f96bb07_8a01da3a","updated":"2018-01-18 11:59:00.000000000","message":"Done","commit_id":"17eb5204175fa4e5c8986755b750efb7b8298ff8"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"91535e03b84b77df4daa87008607588b00252ed5","unresolved":false,"context_lines":[{"line_number":32,"context_line":"Specify name of user roles to be ignored for injecting metadata\r"},{"line_number":33,"context_line":"properties in the image.\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"Specify name of the user roles\r"},{"line_number":36,"context_line":"\r"},{"line_number":37,"context_line":"Possible values:\r"},{"line_number":38,"context_line":"    * List containing user roles. For example: [admin,member]\r"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_2a91a6f1","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":30},"updated":"2018-01-18 09:35:21.000000000","message":"is this required as it is quiet clear on above line?","commit_id":"17eb5204175fa4e5c8986755b750efb7b8298ff8"},{"author":{"_account_id":20182,"name":"Bhagyashri Shewale","email":"bshewale@redhat.com","username":"bhagyashris"},"change_message_id":"fea070013966c046d3068d9b7a09e99802afc692","unresolved":false,"context_lines":[{"line_number":32,"context_line":"Specify name of user roles to be ignored for injecting metadata\r"},{"line_number":33,"context_line":"properties in the image.\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"Specify name of the user roles\r"},{"line_number":36,"context_line":"\r"},{"line_number":37,"context_line":"Possible values:\r"},{"line_number":38,"context_line":"    * List containing user roles. For example: [admin,member]\r"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_50ace0eb","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":30},"in_reply_to":"7f96bb07_2a91a6f1","updated":"2018-01-18 11:59:00.000000000","message":"Done","commit_id":"17eb5204175fa4e5c8986755b750efb7b8298ff8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7cae6bf04026cd06bb5395ee01e00feb8df3ae3d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"\r"},{"line_number":44,"context_line":"Possible values:\r"},{"line_number":45,"context_line":"    * Dictionary containing key/value pairs. Key characters\r"},{"line_number":46,"context_line":"    length should be \u003c\u003d 255. For example: k1:v1,k2:v2\r"},{"line_number":47,"context_line":"\r"},{"line_number":48,"context_line":"\r"},{"line_number":49,"context_line":"\"\"\")),\r"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f96bb07_c2bc696e","line":46,"updated":"2018-01-20 18:01:10.000000000","message":"You can hit this is a follow-up patch.\n\n(1) Might as well mention that the length restriction also applies to the values.\n\n(2) Your example above of a list in the previous option includes the brackets; for consistency, should put {} around the example here.\n\n(3) Maybe we should mention as related config opts:\n- allow_additional_image_properties\n- image_property_quota","commit_id":"f5ae04b9f392fb9a9f5c5932b4c5920de98efffc"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"4b5af0860f76252a65421dde00aecd25fa60ce73","unresolved":false,"context_lines":[{"line_number":43,"context_line":"\r"},{"line_number":44,"context_line":"Possible values:\r"},{"line_number":45,"context_line":"    * Dictionary containing key/value pairs. Key characters\r"},{"line_number":46,"context_line":"    length should be \u003c\u003d 255. For example: k1:v1,k2:v2\r"},{"line_number":47,"context_line":"\r"},{"line_number":48,"context_line":"\r"},{"line_number":49,"context_line":"\"\"\")),\r"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f96bb07_82d653c3","line":46,"in_reply_to":"7f96bb07_c2bc696e","updated":"2018-01-22 04:35:10.000000000","message":"Hi Brian,\n\nThere is no length restriction on value as it\u0027s type in database is \u0027Text\u0027.","commit_id":"f5ae04b9f392fb9a9f5c5932b4c5920de98efffc"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7cae6bf04026cd06bb5395ee01e00feb8df3ae3d","unresolved":false,"context_lines":[{"line_number":49,"context_line":"\"\"\")),\r"},{"line_number":50,"context_line":"]\r"},{"line_number":51,"context_line":"\r"},{"line_number":52,"context_line":"CONF.register_opts(inject_metadata_opts, group\u003d\u0027inject_metadata_properties\u0027)\r"},{"line_number":53,"context_line":"\r"},{"line_number":54,"context_line":"\r"},{"line_number":55,"context_line":"class _InjectMetadataProperties(task.Task):\r"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f96bb07_62ad5530","line":52,"updated":"2018-01-20 18:01:10.000000000","message":"This note is for whoever follows up on the DocImpact of this patch:\n\nPart of the DocImpact of this is to mention how to do new configuration options in doc/source/admin/interoperable-image-import.rst , because the example no-op plugin didn\u0027t have any.  Maybe just a pointer to this plugin is sufficient.","commit_id":"f5ae04b9f392fb9a9f5c5932b4c5920de98efffc"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7cae6bf04026cd06bb5395ee01e00feb8df3ae3d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        user_roles \u003d self.context.roles\r"},{"line_number":72,"context_line":"        ignore_user_roles \u003d CONF.inject_metadata_properties.ignore_user_roles\r"},{"line_number":73,"context_line":"\r"},{"line_number":74,"context_line":"        if not [role for role in user_roles if role in ignore_user_roles]:\r"},{"line_number":75,"context_line":"            properties \u003d CONF.inject_metadata_properties.inject\r"},{"line_number":76,"context_line":"\r"},{"line_number":77,"context_line":"            if properties:\r"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f96bb07_4275b9cb","line":74,"range":{"start_line":74,"start_character":15,"end_line":74,"end_character":73},"updated":"2018-01-20 18:01:10.000000000","message":"nice use of list comprehension!","commit_id":"f5ae04b9f392fb9a9f5c5932b4c5920de98efffc"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7cae6bf04026cd06bb5395ee01e00feb8df3ae3d","unresolved":false,"context_lines":[{"line_number":83,"context_line":"def get_flow(**kwargs):\r"},{"line_number":84,"context_line":"    \"\"\"Return task flow for inject_image_metadata.\r"},{"line_number":85,"context_line":"\r"},{"line_number":86,"context_line":"    :param task_id: Task ID.\r"},{"line_number":87,"context_line":"    :param task_type: Type of the task.\r"},{"line_number":88,"context_line":"    :param image_repo: Image repository used.\r"},{"line_number":89,"context_line":"    :param image_id: Image_ID used.\r"},{"line_number":90,"context_line":"    :param context: Context used.\r"},{"line_number":91,"context_line":"    \"\"\"\r"},{"line_number":92,"context_line":"    task_id \u003d kwargs.get(\u0027task_id\u0027)\r"},{"line_number":93,"context_line":"    task_type \u003d kwargs.get(\u0027task_type\u0027)\r"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f96bb07_22550d1e","line":90,"range":{"start_line":86,"start_character":5,"end_line":90,"end_character":33},"updated":"2018-01-20 18:01:10.000000000","message":"Some more DocImpact, need to explain what these are (I think the current docs just say you can expect to get these in the kwargs).\n\nThis kind of makes image_repo a public interface.  We should probably set some expectations around that.  (Bhagyshri, please make sure we follow up on this at a glance meeting!)","commit_id":"f5ae04b9f392fb9a9f5c5932b4c5920de98efffc"}],"glance/common/config.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"e6558f7499d8cefae48463a065d46d5bcb1a0078","unresolved":false,"context_lines":[{"line_number":728,"context_line":"    * [DEFAULT]/node_staging_uri\"\"\")),"},{"line_number":729,"context_line":"]"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"inject_metadata_opts \u003d ["},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"    cfg.ListOpt(\u0027ignore_user_roles\u0027,"},{"line_number":734,"context_line":"                default\u003d\u0027admin\u0027,"},{"line_number":735,"context_line":"                help\u003d_(\"\"\""},{"line_number":736,"context_line":"Specify name of user roles to be ignored for injecting metadata"},{"line_number":737,"context_line":"properties in the image."},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"Specify name of the user roles"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"Possible values:"},{"line_number":742,"context_line":"    * List containing user roles. For example: [admin,member]"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"\"\"\")),"},{"line_number":745,"context_line":"    cfg.DictOpt(\u0027inject\u0027,"},{"line_number":746,"context_line":"                default\u003d{},"},{"line_number":747,"context_line":"                help\u003d_(\"\"\""},{"line_number":748,"context_line":"Dictionary contains metadata properties to be injected in image."},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"Possible values:"},{"line_number":751,"context_line":"    * Dictionary containing key/value pairs. Key and value characters"},{"line_number":752,"context_line":"    length should be \u003c\u003d 255. For example: k1:v1,k2:v2"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"\"\"\")),"},{"line_number":756,"context_line":"]"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_92b78f87","line":755,"range":{"start_line":731,"start_character":0,"end_line":755,"end_character":3},"updated":"2017-12-21 12:19:33.000000000","message":"I\u0027d prefer having these declared in the plugin so that it\u0027s self contained (also sets handy example for future plugins) in the glance/async/flows/plugins/inject_image_metadata.py","commit_id":"66b38037b7ed298b6c6f917e86ce83ab32312811"}],"glance/common/property_utils.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"201992ee0699e1afe69bcba1a2466ae671df959f","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    def check_property_rules(self, property_name, action, context):"},{"line_number":218,"context_line":"        roles \u003d context.roles"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        if context.service_roles:"},{"line_number":221,"context_line":"            roles.extend(context.service_roles)"},{"line_number":222,"context_line":"        if not self.rules:"},{"line_number":223,"context_line":"            return True"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_2fe5070b","line":221,"range":{"start_line":220,"start_character":8,"end_line":221,"end_character":47},"updated":"2017-12-13 10:30:36.000000000","message":"Commenting here would help why you are doing this.","commit_id":"9ca0c59c82ef7351de27f76e38b1542d8241e70f"}],"glance/common/wsgi_app.py":[{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"077a1f139890629bd7bd33447a7a58f55b72ce93","unresolved":false,"context_lines":[{"line_number":25,"context_line":"logging.register_options(CONF)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"CONFIG_FILES \u003d [\u0027glance-api-paste.ini\u0027,"},{"line_number":28,"context_line":"                \u0027glance-image-import.conf\u0027, \u0027glance-api.conf\u0027]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def _get_config_files(env\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f96bb07_dbbec5ac","line":28,"updated":"2018-01-18 19:51:40.000000000","message":"might as well get this on a separate line, easier to add/remove entries from the list w/o over populating the commit log","commit_id":"ef70a5fa5db199887103fd7686f814f222a2a766"},{"author":{"_account_id":20182,"name":"Bhagyashri Shewale","email":"bshewale@redhat.com","username":"bhagyashris"},"change_message_id":"e5d86137f8dd03c1792547e4545dc820879187c8","unresolved":false,"context_lines":[{"line_number":25,"context_line":"logging.register_options(CONF)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"CONFIG_FILES \u003d [\u0027glance-api-paste.ini\u0027,"},{"line_number":28,"context_line":"                \u0027glance-image-import.conf\u0027, \u0027glance-api.conf\u0027]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def _get_config_files(env\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f96bb07_5e5daae7","line":28,"in_reply_to":"7f96bb07_dbbec5ac","updated":"2018-01-19 14:44:21.000000000","message":"Done","commit_id":"ef70a5fa5db199887103fd7686f814f222a2a766"}],"glance/opts.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7cae6bf04026cd06bb5395ee01e00feb8df3ae3d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"import glance.api.versions"},{"line_number":31,"context_line":"import glance.async.flows.api_image_import"},{"line_number":32,"context_line":"import glance.async.flows.convert"},{"line_number":33,"context_line":"import glance.async.flows.plugins.inject_image_metadata"},{"line_number":34,"context_line":"import glance.async.taskflow_executor"},{"line_number":35,"context_line":"import glance.common.config"},{"line_number":36,"context_line":"import glance.common.location_strategy"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f96bb07_bd4b825d","line":33,"updated":"2018-01-20 18:01:10.000000000","message":"I don\u0027t think we want to require people adding plugins to have to modify this file, or else we can only have \"official\" plugins (or, an operator has  to patch glance to add a custom plugin).\n\nMaybe define the plugin classes as a config option?\n\n(We can file this as a bug to fix for RC-1, I\u0027m not going to hold this patch up over this.)","commit_id":"f5ae04b9f392fb9a9f5c5932b4c5920de98efffc"}],"glance/tests/unit/async/flows/plugins/test_inject_image_metadata.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"f59e550a2cd3c606116196bbd8c02758b446d7b3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"TENANT1 \u003d \u00276838eb7b-6ded-434a-882c-b344c77fe8df\u0027\r"},{"line_number":35,"context_line":"\r"},{"line_number":36,"context_line":"\r"},{"line_number":37,"context_line":"class _ErrorTask(task.Task):\r"},{"line_number":38,"context_line":"\r"},{"line_number":39,"context_line":"    def execute(self):\r"},{"line_number":40,"context_line":"        raise RuntimeError()\r"},{"line_number":41,"context_line":"\r"},{"line_number":42,"context_line":"\r"},{"line_number":43,"context_line":"class TestInjectImageMetadataTask(test_utils.BaseTestCase):\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf8cb3f7_f3da68e7","line":40,"range":{"start_line":37,"start_character":0,"end_line":40,"end_character":28},"updated":"2017-12-26 09:32:43.000000000","message":"this is unused.","commit_id":"fcbc63a6bd5bea754af9bc6df55e595081e785eb"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"91535e03b84b77df4daa87008607588b00252ed5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 NTT DATA, Inc.\r"},{"line_number":2,"context_line":"# All Rights Reserved.\r"},{"line_number":3,"context_line":"#\r"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\r"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_2af2069b","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2018-01-18 09:35:21.000000000","message":"this should be 2018?","commit_id":"17eb5204175fa4e5c8986755b750efb7b8298ff8"},{"author":{"_account_id":20182,"name":"Bhagyashri Shewale","email":"bshewale@redhat.com","username":"bhagyashris"},"change_message_id":"fea070013966c046d3068d9b7a09e99802afc692","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 NTT DATA, Inc.\r"},{"line_number":2,"context_line":"# All Rights Reserved.\r"},{"line_number":3,"context_line":"#\r"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\r"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_b0868465","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"7f96bb07_2af2069b","updated":"2018-01-18 11:59:00.000000000","message":"Done","commit_id":"17eb5204175fa4e5c8986755b750efb7b8298ff8"}],"releasenotes/notes/bp-inject-image-metadata-0a08af539bcce7f2.yaml":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"4955b7516742e45327c415fe6843f1fd8bb5e9a7","unresolved":false,"context_lines":[{"line_number":68,"context_line":"         [property1]"},{"line_number":69,"context_line":"         create \u003d admin,service_role"},{"line_number":70,"context_line":"         read \u003d admin,service_role,member,_member_"},{"line_number":71,"context_line":"         update \u003d admin,service_role"},{"line_number":72,"context_line":"         delete \u003d admin,service_role"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bf8cb3f7_cd4f8732","line":71,"range":{"start_line":71,"start_character":24,"end_line":71,"end_character":36},"updated":"2017-12-26 05:21:16.000000000","message":"IMO for update and delete service_role is not required as no cross service api is present to update or delete the image property.","commit_id":"3e11d19abbf9a3a8ab5172b9d251a6e184ef6eea"}]}
