)]}'
{"doc/source/webapi/v1.rst":[{"author":{"_account_id":12459,"name":"Stephanie Miller","email":"stephane@alum.mit.edu","username":"cinerama"},"change_message_id":"5a267b25359294108afb7dc32ae3b7535a4f2b18","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"**1.18**"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    Add the ``/v1/volume_targets`` endpoints and node ``volume_targets`` field."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"**1.17**"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_117e8269","line":37,"range":{"start_line":37,"start_character":18,"end_line":37,"end_character":32},"updated":"2016-07-22 21:25:55.000000000","message":"Should be volume/targets as per the spec.","commit_id":"76de79a85675a4e61b165d6ac545792bc4c582b5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d4bbc5f62dc82ec28adf8b5bc75aa90aefc2a123","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"**1.18**"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    Add the ``/v1/volume_targets`` endpoints and node ``volume_targets`` field."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"**1.17**"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_91b3924c","line":37,"range":{"start_line":37,"start_character":13,"end_line":37,"end_character":32},"updated":"2016-07-21 21:40:28.000000000","message":"Spec calls for /v1/volume/targets","commit_id":"76de79a85675a4e61b165d6ac545792bc4c582b5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d4bbc5f62dc82ec28adf8b5bc75aa90aefc2a123","unresolved":false,"context_lines":[{"line_number":270,"context_line":"Volume Targets"},{"line_number":271,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":".. rest-controller:: ironic.api.controllers.v1.volume_target:VolumeTargetsController"},{"line_number":274,"context_line":"   :webprefix: /v1/volume_targets"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":".. autotype:: ironic.api.controllers.v1.volume_target.VolumeTargetCollection"},{"line_number":277,"context_line":"   :members:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dada55a8_716b7eb7","line":274,"range":{"start_line":273,"start_character":0,"end_line":274,"end_character":33},"updated":"2016-07-21 21:40:28.000000000","message":"Specification calls for /v1/volume/targets","commit_id":"76de79a85675a4e61b165d6ac545792bc4c582b5"}],"ironic/api/controllers/v1/__init__.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d4bbc5f62dc82ec28adf8b5bc75aa90aefc2a123","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                                                    \u0027volume_connectors\u0027, \u0027\u0027,"},{"line_number":137,"context_line":"                                                    bookmark\u003dTrue)"},{"line_number":138,"context_line":"                                ]"},{"line_number":139,"context_line":"        v1.volume_targets \u003d [link.Link.make_link(\u0027self\u0027,"},{"line_number":140,"context_line":"                                                 pecan.request.public_url,"},{"line_number":141,"context_line":"                                                 \u0027volume_targets\u0027, \u0027\u0027),"},{"line_number":142,"context_line":"                             link.Link.make_link(\u0027bookmark\u0027,"},{"line_number":143,"context_line":"                                                 pecan.request.public_url,"},{"line_number":144,"context_line":"                                                 \u0027volume_targets\u0027, \u0027\u0027,"},{"line_number":145,"context_line":"                                                 bookmark\u003dTrue)"},{"line_number":146,"context_line":"                             ]"},{"line_number":147,"context_line":"        return v1"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_315746cb","line":145,"range":{"start_line":139,"start_character":3,"end_line":145,"end_character":63},"updated":"2016-07-21 21:40:28.000000000","message":"Needs to be be structured as v1.volumes and merged in with the previous connectors change.","commit_id":"76de79a85675a4e61b165d6ac545792bc4c582b5"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":7080,"name":"Mathieu Mitchell","email":"mat128@gmail.com","username":"mat128"},"change_message_id":"eabc1d9b5ff3d970e5cf89cb9955d987918770df","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        obj.volume_connectors \u003d wsme.Unset"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    # If requested version is \u003c 1.18, hide volume_targets."},{"line_number":127,"context_line":"    if pecan.request.version.minor \u003c versions.MINOR_18_VOLUME_TARGET:"},{"line_number":128,"context_line":"        obj.volume_targets \u003d wsme.Unset"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a061dce_b0ae09e4","line":127,"updated":"2016-04-06 11:49:53.000000000","message":"There doesn\u0027t seem to be any unit test around this","commit_id":"f95964fa39d3cf1805acad56f16f0ed1838a097d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"43ee856586df8002f1eb47dc5e5a210dfaf1d883","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        obj.volume_connectors \u003d wsme.Unset"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    # If requested version is \u003c 1.18, hide volume_targets."},{"line_number":127,"context_line":"    if pecan.request.version.minor \u003c versions.MINOR_18_VOLUME_TARGET:"},{"line_number":128,"context_line":"        obj.volume_targets \u003d wsme.Unset"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_14d83852","line":127,"in_reply_to":"9a061dce_b0ae09e4","updated":"2016-06-14 17:35:30.000000000","message":"I think your looking for https://review.openstack.org/#/c/285221/2/ironic/tests/unit/api/v1/test_nodes.py@322","commit_id":"f95964fa39d3cf1805acad56f16f0ed1838a097d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d4bbc5f62dc82ec28adf8b5bc75aa90aefc2a123","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        obj.raid_config \u003d wsme.Unset"},{"line_number":130,"context_line":"        obj.target_raid_config \u003d wsme.Unset"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    # If requested version is \u003c 1.17, hide volume_connectors."},{"line_number":133,"context_line":"    if pecan.request.version.minor \u003c versions.MINOR_17_VOLUME_CONNECTOR:"},{"line_number":134,"context_line":"        obj.volume_connectors \u003d wsme.Unset"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_310e26e5","line":132,"range":{"start_line":132,"start_character":33,"end_line":132,"end_character":37},"updated":"2016-07-21 21:40:28.000000000","message":"This version should be addressed in an earlier rev.. it will likely merge conflict with the other rev anyway since the minor numbers will need to be updated.","commit_id":"76de79a85675a4e61b165d6ac545792bc4c582b5"},{"author":{"_account_id":12459,"name":"Stephanie Miller","email":"stephane@alum.mit.edu","username":"cinerama"},"change_message_id":"5a267b25359294108afb7dc32ae3b7535a4f2b18","unresolved":false,"context_lines":[{"line_number":763,"context_line":"                                    bookmark\u003dTrue)]"},{"line_number":764,"context_line":"            node.volume_targets \u003d ["},{"line_number":765,"context_line":"                link.Link.make_link(\u0027self\u0027, url, \u0027nodes\u0027,"},{"line_number":766,"context_line":"                                    node_uuid + \"/volume_targets\"),"},{"line_number":767,"context_line":"                link.Link.make_link(\u0027bookmark\u0027, url, \u0027nodes\u0027,"},{"line_number":768,"context_line":"                                    node_uuid + \"/volume_targets\","},{"line_number":769,"context_line":"                                    bookmark\u003dTrue)]"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_115a02f2","line":766,"range":{"start_line":766,"start_character":50,"end_line":766,"end_character":64},"updated":"2016-07-22 21:25:55.000000000","message":"Should be volume/targets as per the spec.","commit_id":"76de79a85675a4e61b165d6ac545792bc4c582b5"}],"ironic/api/controllers/v1/volume_target.py":[{"author":{"_account_id":9066,"name":"Satoru Moriya","email":"satoru.moriya.br@hitachi.com","username":"satoru-moriya-br"},"change_message_id":"51c3845139f34c0556c4668b9ad941f020465392","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    target_properties \u003d {wtypes.text: types.jsontype}"},{"line_number":78,"context_line":"    \"\"\"The target_properties for this volume target\"\"\""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    boot_index \u003d wsme.wsattr(int, mandatory\u003dTrue)"},{"line_number":81,"context_line":"    \"\"\"The boot_index of volume target\"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    extra \u003d {wtypes.text: types.jsontype}"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0121b8_6be470e0","line":80,"range":{"start_line":80,"start_character":34,"end_line":80,"end_character":48},"updated":"2016-03-31 04:41:13.000000000","message":"Remove mandatory\u003dTrue because it can be null when the node doesn\u0027t boot from this volume.","commit_id":"9823f0782e994f7bae70094670c743c5d9d8111a"},{"author":{"_account_id":16066,"name":"xiexs","email":"xiexs@cn.fujitsu.com","username":"simen"},"change_message_id":"2bf8ac08c9fab564d024aded43e71a618701521b","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        target \u003d VolumeTarget(**rpc_target.as_dict())"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        if fields is not None:"},{"line_number":139,"context_line":"            api_utils.check_for_invalid_fields(fields, target.as_dict())"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        return cls._convert_with_links(target, pecan.request.public_url,"},{"line_number":142,"context_line":"                                       fields\u003dfields)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_10d139ce","line":139,"range":{"start_line":139,"start_character":12,"end_line":139,"end_character":72},"updated":"2016-05-18 08:20:40.000000000","message":"Here we should check whether the api_version supports the volume target or not. Of course the best practice should be a wrap round each APIs based on the Microversion, but now we\u0027d to add a check for them.","commit_id":"f95964fa39d3cf1805acad56f16f0ed1838a097d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"43ee856586df8002f1eb47dc5e5a210dfaf1d883","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        target \u003d VolumeTarget(**rpc_target.as_dict())"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        if fields is not None:"},{"line_number":139,"context_line":"            api_utils.check_for_invalid_fields(fields, target.as_dict())"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        return cls._convert_with_links(target, pecan.request.public_url,"},{"line_number":142,"context_line":"                                       fields\u003dfields)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_94f54884","line":139,"range":{"start_line":139,"start_character":12,"end_line":139,"end_character":72},"in_reply_to":"bab6814e_10d139ce","updated":"2016-06-14 17:35:30.000000000","message":"I\u0027m not sure I agree exactly with blocking right here in the code, but it does seem like something that needs to be looked at in more detail.  For now, I\u0027m going to rebase, and -1 while I ponder and research what we\u0027ve done elsewhere in the API.","commit_id":"f95964fa39d3cf1805acad56f16f0ed1838a097d"}],"ironic/tests/unit/api/v1/test_volume_targets.py":[{"author":{"_account_id":9066,"name":"Satoru Moriya","email":"satoru.moriya.br@hitachi.com","username":"satoru-moriya-br"},"change_message_id":"51c3845139f34c0556c4668b9ad941f020465392","unresolved":false,"context_lines":[{"line_number":499,"context_line":"    def test_remove_mandatory_field(self, mock_upd):"},{"line_number":500,"context_line":"        response \u003d self.patch_json(\u0027/volume_targets/%s\u0027"},{"line_number":501,"context_line":"                                   % self.target.uuid,"},{"line_number":502,"context_line":"                                   [{\u0027path\u0027: \u0027/boot_index\u0027,"},{"line_number":503,"context_line":"                                     \u0027op\u0027: \u0027remove\u0027}],"},{"line_number":504,"context_line":"                                   expect_errors\u003dTrue)"},{"line_number":505,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0121b8_ebf7e088","line":502,"range":{"start_line":502,"start_character":46,"end_line":502,"end_character":57},"updated":"2016-03-31 04:41:13.000000000","message":"s/boot_index/driver_volume_type/ because boot_index is not mandatory field.","commit_id":"9823f0782e994f7bae70094670c743c5d9d8111a"},{"author":{"_account_id":9066,"name":"Satoru Moriya","email":"satoru.moriya.br@hitachi.com","username":"satoru-moriya-br"},"change_message_id":"51c3845139f34c0556c4668b9ad941f020465392","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        result \u003d self.get_json(\u0027/volume_targets/%s\u0027 % pdict[\u0027uuid\u0027])"},{"line_number":619,"context_line":"        self.assertEqual(pdict[\u0027extra\u0027], result[\u0027extra\u0027])"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"    def test_create_volume_target_no_mandatory_field_type(self):"},{"line_number":622,"context_line":"        pdict \u003d post_get_test_volume_target()"},{"line_number":623,"context_line":"        del pdict[\u0027driver_volume_type\u0027]"},{"line_number":624,"context_line":"        response \u003d self.post_json(\u0027/volume_targets\u0027, pdict,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0121b8_ab38483e","line":621,"range":{"start_line":621,"start_character":53,"end_line":621,"end_character":57},"updated":"2016-03-31 04:41:13.000000000","message":"s/type/driver_volume_type","commit_id":"9823f0782e994f7bae70094670c743c5d9d8111a"},{"author":{"_account_id":9066,"name":"Satoru Moriya","email":"satoru.moriya.br@hitachi.com","username":"satoru-moriya-br"},"change_message_id":"51c3845139f34c0556c4668b9ad941f020465392","unresolved":false,"context_lines":[{"line_number":627,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":628,"context_line":"        self.assertTrue(response.json[\u0027error_message\u0027])"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"    def test_create_volume_target_no_mandatory_field_value(self):"},{"line_number":631,"context_line":"        pdict \u003d post_get_test_volume_target()"},{"line_number":632,"context_line":"        del pdict[\u0027boot_index\u0027]"},{"line_number":633,"context_line":"        response \u003d self.post_json(\u0027/volume_targets\u0027, pdict,"},{"line_number":634,"context_line":"                                  expect_errors\u003dTrue)"},{"line_number":635,"context_line":"        self.assertEqual(http_client.BAD_REQUEST, response.status_int)"},{"line_number":636,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":637,"context_line":"        self.assertTrue(response.json[\u0027error_message\u0027])"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"    def test_create_volume_target_no_mandatory_field_node_uuid(self):"},{"line_number":640,"context_line":"        pdict \u003d post_get_test_volume_target()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0121b8_6bce302f","line":637,"range":{"start_line":630,"start_character":0,"end_line":637,"end_character":55},"updated":"2016-03-31 04:41:13.000000000","message":"This function should be changed to \"test_create_volume_target_without_boot_index()\" to confirm the REST API works correctly when it gets POST request without boot_index.","commit_id":"9823f0782e994f7bae70094670c743c5d9d8111a"}]}
