)]}'
{"ironic_tempest_plugin/common/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d9d80b1d78595b4d7ddfcf523dc48c08705e2d63","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    if api_version is not None:"},{"line_number":30,"context_line":"        kwargs[\u0027api_version\u0027] \u003d api_version"},{"line_number":31,"context_line":"    if node_id:"},{"line_number":32,"context_line":"        _, body \u003d client.show_node(node_id, **kwargs)"},{"line_number":33,"context_line":"        return body"},{"line_number":34,"context_line":"    elif instance_uuid:"},{"line_number":35,"context_line":"        _, body \u003d client.show_node_by_instance_uuid(instance_uuid, **kwargs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_64cd8ab5","line":32,"updated":"2018-03-16 10:48:50.000000000","message":"show_node does not support api_version","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a7c5ec2cae596388dacacbd0bfeb6a3482824f23","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    if api_version is not None:"},{"line_number":30,"context_line":"        kwargs[\u0027api_version\u0027] \u003d api_version"},{"line_number":31,"context_line":"    if node_id:"},{"line_number":32,"context_line":"        _, body \u003d client.show_node(node_id, **kwargs)"},{"line_number":33,"context_line":"        return body"},{"line_number":34,"context_line":"    elif instance_uuid:"},{"line_number":35,"context_line":"        _, body \u003d client.show_node_by_instance_uuid(instance_uuid, **kwargs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_24db0d4f","line":32,"in_reply_to":"df7087c5_64cd8ab5","updated":"2018-03-16 14:22:34.000000000","message":"Done","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d9d80b1d78595b4d7ddfcf523dc48c08705e2d63","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        _, body \u003d client.show_node(node_id, **kwargs)"},{"line_number":33,"context_line":"        return body"},{"line_number":34,"context_line":"    elif instance_uuid:"},{"line_number":35,"context_line":"        _, body \u003d client.show_node_by_instance_uuid(instance_uuid, **kwargs)"},{"line_number":36,"context_line":"        if body[\u0027nodes\u0027]:"},{"line_number":37,"context_line":"            return body[\u0027nodes\u0027][0]"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_04c84ea3","line":35,"updated":"2018-03-16 10:48:50.000000000","message":"and here you can pass api_version directly, no need for kwargs","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a7c5ec2cae596388dacacbd0bfeb6a3482824f23","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        _, body \u003d client.show_node(node_id, **kwargs)"},{"line_number":33,"context_line":"        return body"},{"line_number":34,"context_line":"    elif instance_uuid:"},{"line_number":35,"context_line":"        _, body \u003d client.show_node_by_instance_uuid(instance_uuid, **kwargs)"},{"line_number":36,"context_line":"        if body[\u0027nodes\u0027]:"},{"line_number":37,"context_line":"            return body[\u0027nodes\u0027][0]"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_c41491eb","line":35,"in_reply_to":"df7087c5_04c84ea3","updated":"2018-03-16 14:22:34.000000000","message":"Done","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"}],"ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"189ba4eddd86ee83e284523ed67f8c4d7b4e9f70","unresolved":false,"context_lines":[{"line_number":589,"context_line":"        :param node_uuid: Unique identifier of the node in UUID format."},{"line_number":590,"context_line":"        :param api_version: Ironic API version to use."},{"line_number":591,"context_line":"        \"\"\""},{"line_number":592,"context_line":"        extra_headers \u003d False"},{"line_number":593,"context_line":"        headers \u003d None"},{"line_number":594,"context_line":"        if api_version is not None:"},{"line_number":595,"context_line":"            extra_headers \u003d True"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_6e4ba9af","line":592,"updated":"2018-03-12 14:15:56.000000000","message":"odd that we sometimes decide to specify api version...","commit_id":"fde12244231f80f9c36bf9689d8ffa0331d0dbe3"}],"ironic_tempest_plugin/tests/scenario/test_baremetal_basic_ops.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"189ba4eddd86ee83e284523ed67f8c4d7b4e9f70","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        \"\"\"Validate scheduling attributes of the node against the flavor."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        Validates the resource class and traits requested by the flavor against"},{"line_number":138,"context_line":"        those set on the node. Does not assume that resource class"},{"line_number":139,"context_line":"        \"\"\""},{"line_number":140,"context_line":"        # Try to get a node with resource class (1.21) and traits (1.37)."},{"line_number":141,"context_line":"        # TODO(mgoddard): Remove this when all stable releases support these"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_eea2594b","line":138,"updated":"2018-03-12 14:15:56.000000000","message":"\u0027...that resource class\u0027 \u003cwhat\u003e ?","commit_id":"fde12244231f80f9c36bf9689d8ffa0331d0dbe3"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"3df9154a08dfbfa73ecac57437d7e3cbd6c5b685","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        \"\"\"Validate scheduling attributes of the node against the flavor."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        Validates the resource class and traits requested by the flavor against"},{"line_number":138,"context_line":"        those set on the node. Does not assume that resource class"},{"line_number":139,"context_line":"        \"\"\""},{"line_number":140,"context_line":"        # Try to get a node with resource class (1.21) and traits (1.37)."},{"line_number":141,"context_line":"        # TODO(mgoddard): Remove this when all stable releases support these"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_b7f81a7b","line":138,"in_reply_to":"df7087c5_eea2594b","updated":"2018-03-13 11:04:05.000000000","message":"I left it as an exercise for the reader ;)","commit_id":"fde12244231f80f9c36bf9689d8ffa0331d0dbe3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"189ba4eddd86ee83e284523ed67f8c4d7b4e9f70","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        if \u0027traits\u0027 in node:"},{"line_number":177,"context_line":"            for trait in traits:"},{"line_number":178,"context_line":"                self.assertIn(trait, node[\u0027traits\u0027])"},{"line_number":179,"context_line":"                self.assertIn(\u0027traits\u0027, node[\u0027instance_info\u0027])"},{"line_number":180,"context_line":"                self.assertIn(trait, node[\u0027instance_info\u0027][\u0027traits\u0027])"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    @decorators.idempotent_id(\u0027549173a5-38ec-42bb-b0e2-c8b9f4a08943\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_11ea520e","line":179,"updated":"2018-03-12 14:15:56.000000000","message":"you could pull this outside the for loop. actually, i think node[\u0027instance_info\u0027][\u0027traits\u0027] should be the same as traits. whereas traits can be a (sub)set of node[\u0027traits\u0027]","commit_id":"fde12244231f80f9c36bf9689d8ffa0331d0dbe3"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"3df9154a08dfbfa73ecac57437d7e3cbd6c5b685","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        if \u0027traits\u0027 in node:"},{"line_number":177,"context_line":"            for trait in traits:"},{"line_number":178,"context_line":"                self.assertIn(trait, node[\u0027traits\u0027])"},{"line_number":179,"context_line":"                self.assertIn(\u0027traits\u0027, node[\u0027instance_info\u0027])"},{"line_number":180,"context_line":"                self.assertIn(trait, node[\u0027instance_info\u0027][\u0027traits\u0027])"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    @decorators.idempotent_id(\u0027549173a5-38ec-42bb-b0e2-c8b9f4a08943\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_376acaed","line":179,"in_reply_to":"df7087c5_11ea520e","updated":"2018-03-13 11:04:05.000000000","message":"We only set instance_info[\u0027traits\u0027] in the virt driver if there are any instance traits: https://github.com/openstack/nova/blob/master/nova/virt/ironic/patcher.py#L117.","commit_id":"fde12244231f80f9c36bf9689d8ffa0331d0dbe3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c7ad9e6d23295480cd5b5ed37c62b86b4cb4bc3b","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        if \u0027traits\u0027 in node:"},{"line_number":177,"context_line":"            for trait in traits:"},{"line_number":178,"context_line":"                self.assertIn(trait, node[\u0027traits\u0027])"},{"line_number":179,"context_line":"                self.assertIn(\u0027traits\u0027, node[\u0027instance_info\u0027])"},{"line_number":180,"context_line":"                self.assertIn(trait, node[\u0027instance_info\u0027][\u0027traits\u0027])"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    @decorators.idempotent_id(\u0027549173a5-38ec-42bb-b0e2-c8b9f4a08943\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_ec0b1d21","line":179,"in_reply_to":"df7087c5_376acaed","updated":"2018-03-13 14:22:00.000000000","message":"right. but if the flavor has traits, won\u0027t there be node[\u0027instance_info\u0027][\u0027traits\u0027]? I was thinking something like\n\nif \u0027traits\u0027 in node and traits:\n    self.assertIn(\u0027traits\u0027, node[\u0027instance_info\u0027])\n    self.assertEqual(set(traits), set(node[\u0027instance_info\u0027][\u0027traits\u0027]))\n    self.assertIn(set(traits), set(node[\u0027traits\u0027]))","commit_id":"fde12244231f80f9c36bf9689d8ffa0331d0dbe3"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9eb0406f7d43cfdda1838b45aeb2a2b53ead542e","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        if \u0027traits\u0027 in node:"},{"line_number":177,"context_line":"            for trait in traits:"},{"line_number":178,"context_line":"                self.assertIn(trait, node[\u0027traits\u0027])"},{"line_number":179,"context_line":"                self.assertIn(\u0027traits\u0027, node[\u0027instance_info\u0027])"},{"line_number":180,"context_line":"                self.assertIn(trait, node[\u0027instance_info\u0027][\u0027traits\u0027])"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    @decorators.idempotent_id(\u0027549173a5-38ec-42bb-b0e2-c8b9f4a08943\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_a0a769a7","line":179,"in_reply_to":"df7087c5_ec0b1d21","updated":"2018-03-13 15:07:16.000000000","message":"I see what you mean, I thought you were just referring to the one line. I\u0027ve removed the loop, but used issubset for the final check as assertIn is for checking elements rather than subsets.","commit_id":"fde12244231f80f9c36bf9689d8ffa0331d0dbe3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d9d80b1d78595b4d7ddfcf523dc48c08705e2d63","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        max_version \u003d api_version_request.APIVersionRequest("},{"line_number":52,"context_line":"            CONF.baremetal.max_microversion)"},{"line_number":53,"context_line":"        version \u003d api_version_request.APIVersionRequest(version)"},{"line_number":54,"context_line":"        return version \u003c\u003d max_version"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def rebuild_instance(self, preserve_ephemeral\u003dFalse):"},{"line_number":57,"context_line":"        self.rebuild_server(server_id\u003dself.instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_24da3277","line":54,"updated":"2018-03-16 10:48:50.000000000","message":"just in case, let\u0027s also check for min_version?","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a7c5ec2cae596388dacacbd0bfeb6a3482824f23","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        max_version \u003d api_version_request.APIVersionRequest("},{"line_number":52,"context_line":"            CONF.baremetal.max_microversion)"},{"line_number":53,"context_line":"        version \u003d api_version_request.APIVersionRequest(version)"},{"line_number":54,"context_line":"        return version \u003c\u003d max_version"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def rebuild_instance(self, preserve_ephemeral\u003dFalse):"},{"line_number":57,"context_line":"        self.rebuild_server(server_id\u003dself.instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_f0615406","line":54,"in_reply_to":"df7087c5_24da3277","updated":"2018-03-16 14:22:34.000000000","message":"Done","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d9d80b1d78595b4d7ddfcf523dc48c08705e2d63","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                break"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            # Neither API is supported - cannot test."},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        f_id \u003d self.instance[\u0027flavor\u0027][\u0027id\u0027]"},{"line_number":154,"context_line":"        extra_specs \u003d self.flavors_client.list_flavor_extra_specs(f_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_c4e4963e","line":151,"updated":"2018-03-16 10:48:50.000000000","message":"LOG.warning?","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a7c5ec2cae596388dacacbd0bfeb6a3482824f23","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                break"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            # Neither API is supported - cannot test."},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        f_id \u003d self.instance[\u0027flavor\u0027][\u0027id\u0027]"},{"line_number":154,"context_line":"        extra_specs \u003d self.flavors_client.list_flavor_extra_specs(f_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_d0521035","line":151,"in_reply_to":"df7087c5_c4e4963e","updated":"2018-03-16 14:22:34.000000000","message":"Done","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d9d80b1d78595b4d7ddfcf523dc48c08705e2d63","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        traits \u003d set()"},{"line_number":160,"context_line":"        for key, value in extra_specs.items():"},{"line_number":161,"context_line":"            if key.startswith(\u0027resources:CUSTOM_\u0027) and value \u003d\u003d \u00271\u0027:"},{"line_number":162,"context_line":"                _, _, resource_class \u003d key.partition(\u0027:\u0027)"},{"line_number":163,"context_line":"            if key.startswith(\u0027trait:\u0027) and value \u003d\u003d \u0027required\u0027:"},{"line_number":164,"context_line":"                _, _, trait \u003d key.partition(\u0027:\u0027)"},{"line_number":165,"context_line":"                traits.add(trait)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_e4df5a63","line":162,"updated":"2018-03-16 10:48:50.000000000","message":"note that in theory nova can have several of these\n\nalso nit:\n\n resource_class \u003d key.partition(\u0027:\u0027)[2]","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a7c5ec2cae596388dacacbd0bfeb6a3482824f23","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        traits \u003d set()"},{"line_number":160,"context_line":"        for key, value in extra_specs.items():"},{"line_number":161,"context_line":"            if key.startswith(\u0027resources:CUSTOM_\u0027) and value \u003d\u003d \u00271\u0027:"},{"line_number":162,"context_line":"                _, _, resource_class \u003d key.partition(\u0027:\u0027)"},{"line_number":163,"context_line":"            if key.startswith(\u0027trait:\u0027) and value \u003d\u003d \u0027required\u0027:"},{"line_number":164,"context_line":"                _, _, trait \u003d key.partition(\u0027:\u0027)"},{"line_number":165,"context_line":"                traits.add(trait)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_847bf989","line":162,"in_reply_to":"df7087c5_e4df5a63","updated":"2018-03-16 14:22:34.000000000","message":"That\u0027s a fair point. Any thoughts what we should do if there is \u003e1 resource request?","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d9d80b1d78595b4d7ddfcf523dc48c08705e2d63","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            if key.startswith(\u0027resources:CUSTOM_\u0027) and value \u003d\u003d \u00271\u0027:"},{"line_number":162,"context_line":"                _, _, resource_class \u003d key.partition(\u0027:\u0027)"},{"line_number":163,"context_line":"            if key.startswith(\u0027trait:\u0027) and value \u003d\u003d \u0027required\u0027:"},{"line_number":164,"context_line":"                _, _, trait \u003d key.partition(\u0027:\u0027)"},{"line_number":165,"context_line":"                traits.add(trait)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        # Validate requested resource class and traits against the node."}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_84d45e49","line":164,"updated":"2018-03-16 10:48:50.000000000","message":"nit:\n\n trait \u003d key.partition(\u0027:\u0027)[2]","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a7c5ec2cae596388dacacbd0bfeb6a3482824f23","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            if key.startswith(\u0027resources:CUSTOM_\u0027) and value \u003d\u003d \u00271\u0027:"},{"line_number":162,"context_line":"                _, _, resource_class \u003d key.partition(\u0027:\u0027)"},{"line_number":163,"context_line":"            if key.startswith(\u0027trait:\u0027) and value \u003d\u003d \u0027required\u0027:"},{"line_number":164,"context_line":"                _, _, trait \u003d key.partition(\u0027:\u0027)"},{"line_number":165,"context_line":"                traits.add(trait)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        # Validate requested resource class and traits against the node."}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_246eadc8","line":164,"in_reply_to":"df7087c5_84d45e49","updated":"2018-03-16 14:22:34.000000000","message":"Done","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d9d80b1d78595b4d7ddfcf523dc48c08705e2d63","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        # Validate requested resource class and traits against the node."},{"line_number":168,"context_line":"        if resource_class is not None:"},{"line_number":169,"context_line":"            # The resource class in ironic may be lower case, and may omit the"},{"line_number":170,"context_line":"            # required CUSTOM_ prefix. Normalise it."},{"line_number":171,"context_line":"            node_resource_class \u003d node[\u0027resource_class\u0027]"},{"line_number":172,"context_line":"            node_resource_class \u003d node_resource_class.upper()"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_a4d7224b","line":169,"updated":"2018-03-16 10:48:50.000000000","message":"s/may omit/omits/ (it\u0027s always the case)","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a7c5ec2cae596388dacacbd0bfeb6a3482824f23","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        # Validate requested resource class and traits against the node."},{"line_number":168,"context_line":"        if resource_class is not None:"},{"line_number":169,"context_line":"            # The resource class in ironic may be lower case, and may omit the"},{"line_number":170,"context_line":"            # required CUSTOM_ prefix. Normalise it."},{"line_number":171,"context_line":"            node_resource_class \u003d node[\u0027resource_class\u0027]"},{"line_number":172,"context_line":"            node_resource_class \u003d node_resource_class.upper()"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_c4b81112","line":169,"in_reply_to":"df7087c5_a4d7224b","updated":"2018-03-16 14:22:34.000000000","message":"Done","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d9d80b1d78595b4d7ddfcf523dc48c08705e2d63","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            # required CUSTOM_ prefix. Normalise it."},{"line_number":171,"context_line":"            node_resource_class \u003d node[\u0027resource_class\u0027]"},{"line_number":172,"context_line":"            node_resource_class \u003d node_resource_class.upper()"},{"line_number":173,"context_line":"            if not node_resource_class.startswith(\u0027CUSTOM_\u0027):"},{"line_number":174,"context_line":"                node_resource_class \u003d \u0027CUSTOM_\u0027 + node_resource_class"},{"line_number":175,"context_line":"            self.assertEqual(resource_class, node_resource_class)"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_44cac6a0","line":173,"updated":"2018-03-16 10:48:50.000000000","message":"I don\u0027t think we apply this logic in nova, do we? I suspect even if we have\n\n node.resource_class \u003d CUSTOM_FOO\n\nin nova it will end up being CUSTOM_CUSTOM_FOO, no?\n\nhttps://github.com/openstack/nova/blob/master/nova/rc_fields.py#L62-L63","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a7c5ec2cae596388dacacbd0bfeb6a3482824f23","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            # required CUSTOM_ prefix. Normalise it."},{"line_number":171,"context_line":"            node_resource_class \u003d node[\u0027resource_class\u0027]"},{"line_number":172,"context_line":"            node_resource_class \u003d node_resource_class.upper()"},{"line_number":173,"context_line":"            if not node_resource_class.startswith(\u0027CUSTOM_\u0027):"},{"line_number":174,"context_line":"                node_resource_class \u003d \u0027CUSTOM_\u0027 + node_resource_class"},{"line_number":175,"context_line":"            self.assertEqual(resource_class, node_resource_class)"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_e4de756b","line":173,"in_reply_to":"df7087c5_44cac6a0","updated":"2018-03-16 14:22:34.000000000","message":"Looks like you\u0027re right. johnthetubaguy raised it as an issue as a while ago that CUSTOM_* becomes CUSTOM_CUSTOM_*, but looks like they decided ironic should never use the prefix. Here\u0027s some context: https://review.openstack.org/#/c/513001/5.","commit_id":"2bee5641adf0652d3826cbcb5d518029f8a1c61c"}]}
