)]}'
{"ironic/drivers/modules/deploy_utils.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"1fd6a37af8c78c9121d3ed71cd0912d1a3ba77fd","unresolved":false,"context_lines":[{"line_number":742,"context_line":"    :param node: A single Node."},{"line_number":743,"context_line":"    :returns: The PXE config template file name."},{"line_number":744,"context_line":"    \"\"\""},{"line_number":745,"context_line":"    config_template \u003d node.driver_info.get(\"pxe_template\", None)"},{"line_number":746,"context_line":"    if config_template is None:"},{"line_number":747,"context_line":"        cpu_arch \u003d node.properties.get(\u0027cpu_arch\u0027)"},{"line_number":748,"context_line":"        config_template \u003d CONF.pxe.pxe_config_template_by_arch.get(cpu_arch)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f769fc5_1e605101","line":745,"range":{"start_line":745,"start_character":43,"end_line":745,"end_character":57},"updated":"2019-01-02 11:01:27.000000000","message":"nit: use single quotes instead","commit_id":"0bda09acf4e0f8ef72f774e0bd7b247453994a7e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"be766f0aee58e7b0c288b32ec3e5e25fdf45a1b1","unresolved":false,"context_lines":[{"line_number":742,"context_line":"    :param node: A single Node."},{"line_number":743,"context_line":"    :returns: The PXE config template file name."},{"line_number":744,"context_line":"    \"\"\""},{"line_number":745,"context_line":"    config_template \u003d node.driver_info.get(\"pxe_template\", None)"},{"line_number":746,"context_line":"    if config_template is None:"},{"line_number":747,"context_line":"        cpu_arch \u003d node.properties.get(\u0027cpu_arch\u0027)"},{"line_number":748,"context_line":"        config_template \u003d CONF.pxe.pxe_config_template_by_arch.get(cpu_arch)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f769fc5_384438b7","line":745,"range":{"start_line":745,"start_character":43,"end_line":745,"end_character":57},"in_reply_to":"1f769fc5_1e605101","updated":"2019-01-02 21:07:36.000000000","message":"Likely better just to quietly follow-up and change them to single quotes after the fact.","commit_id":"0bda09acf4e0f8ef72f774e0bd7b247453994a7e"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"019f3d0b5a94c88bc6cd75b0f69c76af56c1989a","unresolved":false,"context_lines":[{"line_number":742,"context_line":"    :param node: A single Node."},{"line_number":743,"context_line":"    :returns: The PXE config template file name."},{"line_number":744,"context_line":"    \"\"\""},{"line_number":745,"context_line":"    config_template \u003d node.driver_info.get(\"pxe_template\", None)"},{"line_number":746,"context_line":"    if config_template is None:"},{"line_number":747,"context_line":"        cpu_arch \u003d node.properties.get(\u0027cpu_arch\u0027)"},{"line_number":748,"context_line":"        config_template \u003d CONF.pxe.pxe_config_template_by_arch.get(cpu_arch)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffd0ebdf_614ca076","line":745,"range":{"start_line":745,"start_character":43,"end_line":745,"end_character":57},"in_reply_to":"1f769fc5_384438b7","updated":"2019-01-03 08:02:21.000000000","message":"ideally we should validate this is a valid path and that is accessible by ironic, but it seems we didn\u0027t validate other paths in the CONF.pxe too.","commit_id":"0bda09acf4e0f8ef72f774e0bd7b247453994a7e"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"8903ef076bfd9a55e2951d8ad6dc8a3a2435806e","unresolved":false,"context_lines":[{"line_number":742,"context_line":"    :param node: A single Node."},{"line_number":743,"context_line":"    :returns: The PXE config template file name."},{"line_number":744,"context_line":"    \"\"\""},{"line_number":745,"context_line":"    config_template \u003d node.driver_info.get(\"pxe_template\", None)"},{"line_number":746,"context_line":"    if config_template is None:"},{"line_number":747,"context_line":"        cpu_arch \u003d node.properties.get(\u0027cpu_arch\u0027)"},{"line_number":748,"context_line":"        config_template \u003d CONF.pxe.pxe_config_template_by_arch.get(cpu_arch)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfd5e7cf_6d555950","line":745,"range":{"start_line":745,"start_character":43,"end_line":745,"end_character":57},"in_reply_to":"dfd5e7cf_14407a07","updated":"2019-01-08 02:23:48.000000000","message":"a good addition I think, maybe it\u0027s not in every case, but in the scenario I imagine this feature applies, the template files will be placed by deployers, so the admin could put a non-existing path there.\n\nfrom a user perspective, I would want to know my request is valid from API request, but we didn\u0027t have such checking mechanism when updating nodes, it\u0027s another story though.","commit_id":"0bda09acf4e0f8ef72f774e0bd7b247453994a7e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"31f7ec81041946a5f0a3638ed43522ac87b63a0d","unresolved":false,"context_lines":[{"line_number":742,"context_line":"    :param node: A single Node."},{"line_number":743,"context_line":"    :returns: The PXE config template file name."},{"line_number":744,"context_line":"    \"\"\""},{"line_number":745,"context_line":"    config_template \u003d node.driver_info.get(\"pxe_template\", None)"},{"line_number":746,"context_line":"    if config_template is None:"},{"line_number":747,"context_line":"        cpu_arch \u003d node.properties.get(\u0027cpu_arch\u0027)"},{"line_number":748,"context_line":"        config_template \u003d CONF.pxe.pxe_config_template_by_arch.get(cpu_arch)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfd5e7cf_14407a07","line":745,"range":{"start_line":745,"start_character":43,"end_line":745,"end_character":57},"in_reply_to":"ffd0ebdf_614ca076","updated":"2019-01-04 23:52:06.000000000","message":"I think I remember someone proposing that actually.... *sigh*","commit_id":"0bda09acf4e0f8ef72f774e0bd7b247453994a7e"}],"ironic/tests/unit/drivers/modules/test_deploy_utils.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"1fd6a37af8c78c9121d3ed71cd0912d1a3ba77fd","unresolved":false,"context_lines":[{"line_number":1116,"context_line":"    def test_get_pxe_config_template_per_node(self):"},{"line_number":1117,"context_line":"        node \u003d obj_utils.create_test_node("},{"line_number":1118,"context_line":"            self.context, driver\u003d\u0027fake-hardware\u0027,"},{"line_number":1119,"context_line":"            driver_info\u003d{\"pxe_template\": \"fake-template\"},"},{"line_number":1120,"context_line":"        )"},{"line_number":1121,"context_line":"        result \u003d utils.get_pxe_config_template(node)"},{"line_number":1122,"context_line":"        self.assertEqual(\u0027fake-template\u0027, result)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f769fc5_015f960e","line":1119,"range":{"start_line":1119,"start_character":25,"end_line":1119,"end_character":56},"updated":"2019-01-02 11:01:27.000000000","message":"nit: use single quotes instead","commit_id":"0bda09acf4e0f8ef72f774e0bd7b247453994a7e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"be766f0aee58e7b0c288b32ec3e5e25fdf45a1b1","unresolved":false,"context_lines":[{"line_number":1119,"context_line":"            driver_info\u003d{\"pxe_template\": \"fake-template\"},"},{"line_number":1120,"context_line":"        )"},{"line_number":1121,"context_line":"        result \u003d utils.get_pxe_config_template(node)"},{"line_number":1122,"context_line":"        self.assertEqual(\u0027fake-template\u0027, result)"},{"line_number":1123,"context_line":""},{"line_number":1124,"context_line":""},{"line_number":1125,"context_line":"@mock.patch(\u0027time.sleep\u0027, lambda sec: None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f769fc5_78687020","line":1122,"updated":"2019-01-02 21:07:36.000000000","message":"Side note. I feel like we need to expand the security model some so we get admin/has admin privs, metal owner/user of baremetal, and then auditor/observer.\n\nI have some slight concerns about this since the template parsing is a weakness where an attacker could do more. That being said, they would already need to have placed the file, so maybe I\u0027m just being paranoid. :)","commit_id":"0bda09acf4e0f8ef72f774e0bd7b247453994a7e"}],"releasenotes/notes/add-pxe-per-node-526fd79df17efda8.yaml":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"be766f0aee58e7b0c288b32ec3e5e25fdf45a1b1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add a new field pxe_template that can be set at driver-info level. This"},{"line_number":5,"context_line":"    will specify a path for a custom pxe boot template. If present, this"},{"line_number":6,"context_line":"    template will be read and will have priority in front of the per-arch and"},{"line_number":7,"context_line":"    general pxe templates."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"1f769fc5_d862e43e","line":4,"range":{"start_line":4,"start_character":52,"end_line":4,"end_character":63},"updated":"2019-01-02 21:07:36.000000000","message":"s/driver-info/``driver_info``/","commit_id":"0bda09acf4e0f8ef72f774e0bd7b247453994a7e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"be766f0aee58e7b0c288b32ec3e5e25fdf45a1b1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add a new field pxe_template that can be set at driver-info level. This"},{"line_number":5,"context_line":"    will specify a path for a custom pxe boot template. If present, this"},{"line_number":6,"context_line":"    template will be read and will have priority in front of the per-arch and"},{"line_number":7,"context_line":"    general pxe templates."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"1f769fc5_1877fc04","line":4,"range":{"start_line":4,"start_character":20,"end_line":4,"end_character":32},"updated":"2019-01-02 21:07:36.000000000","message":"s/pxe_template/``pxe_template``/","commit_id":"0bda09acf4e0f8ef72f774e0bd7b247453994a7e"}]}
