)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":19072,"name":"Xavier","email":"marcusrafael@lsd.ufcg.edu.br","username":"marcusrafael"},"change_message_id":"3615105fe36495c8fd72fd0897747b025a549a39","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add tempest tests for node Adoption"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change adds a test scenario as well as basic API validation"},{"line_number":10,"context_line":"validation test for tempest regarding the node adoption feature."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1526315"},{"line_number":13,"context_line":"Change-Id: Ic534f3e9c39f344d17ec542686be4eec428593a3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"dada55a8_f1dc401a","line":10,"range":{"start_line":9,"start_character":54,"end_line":10,"end_character":10},"updated":"2016-07-24 04:39:30.000000000","message":"nit: s/validation validation/validation/","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add tempest tests for node Adoption"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change adds a test scenario as well as basic API validation"},{"line_number":10,"context_line":"validation test for tempest regarding the node adoption feature."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1526315"},{"line_number":13,"context_line":"Change-Id: Ic534f3e9c39f344d17ec542686be4eec428593a3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1ac06dbe_0717e8ed","line":10,"range":{"start_line":9,"start_character":54,"end_line":10,"end_character":10},"in_reply_to":"dada55a8_f1dc401a","updated":"2016-08-22 17:30:56.000000000","message":"Done","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"}],"ironic_tempest_plugin/config.py":[{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"f963d281b367dbd3855aa3abd562c6418205584c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"# on tempest\u0027s tree to test stable branches and thus we have to comment the"},{"line_number":33,"context_line":"# options bellow to avoid duplication. Only new options should live here."},{"line_number":34,"context_line":"BaremetalGroup \u003d ["},{"line_number":35,"context_line":"    cfg.IntOpt(\u0027adoption_step_timeout\u0027,"},{"line_number":36,"context_line":"               default\u003d60,"},{"line_number":37,"context_line":"               help\u003d\"Adoption step timeout controls how long the test \""},{"line_number":38,"context_line":"                    \"for node adoption will for state transitions to\""},{"line_number":39,"context_line":"                    \"complete. This is vital as this test is designed \""},{"line_number":40,"context_line":"                    \"to run when it is capible of running, and may have \""},{"line_number":41,"context_line":"                    \"wait for resources to be freed by other tests \""},{"line_number":42,"context_line":"                    \"before proceeding.\"),"},{"line_number":43,"context_line":"    # cfg.StrOpt(\u0027catalog_type\u0027,"},{"line_number":44,"context_line":"    #            default\u003d\u0027baremetal\u0027,"},{"line_number":45,"context_line":"    #            help\u003d\"Catalog type of the baremetal provisioning service\"),"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa7ab95a_7f01a405","line":42,"range":{"start_line":35,"start_character":4,"end_line":42,"end_character":42},"updated":"2016-08-29 21:44:55.000000000","message":"nit: the config options aren\u0027t in alphabetical order anyway, what about grouping them by feature?","commit_id":"e603fa76edafbd0e2011f049a8cbfe7eec262cce"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a078afdce46544d841b59f5e938d3f771c2abba1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"# on tempest\u0027s tree to test stable branches and thus we have to comment the"},{"line_number":33,"context_line":"# options bellow to avoid duplication. Only new options should live here."},{"line_number":34,"context_line":"BaremetalGroup \u003d ["},{"line_number":35,"context_line":"    cfg.IntOpt(\u0027adoption_step_timeout\u0027,"},{"line_number":36,"context_line":"               default\u003d60,"},{"line_number":37,"context_line":"               help\u003d\"Adoption step timeout controls how long the test \""},{"line_number":38,"context_line":"                    \"for node adoption will for state transitions to\""},{"line_number":39,"context_line":"                    \"complete. This is vital as this test is designed \""},{"line_number":40,"context_line":"                    \"to run when it is capible of running, and may have \""},{"line_number":41,"context_line":"                    \"wait for resources to be freed by other tests \""},{"line_number":42,"context_line":"                    \"before proceeding.\"),"},{"line_number":43,"context_line":"    # cfg.StrOpt(\u0027catalog_type\u0027,"},{"line_number":44,"context_line":"    #            default\u003d\u0027baremetal\u0027,"},{"line_number":45,"context_line":"    #            help\u003d\"Catalog type of the baremetal provisioning service\"),"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa7ab95a_bc56d727","line":42,"range":{"start_line":35,"start_character":4,"end_line":42,"end_character":42},"in_reply_to":"fa7ab95a_7f01a405","updated":"2016-08-29 22:24:52.000000000","message":"I would kind of prefer to lean towards alphabetical order.  My only concern with by feature is re-use between tests.","commit_id":"e603fa76edafbd0e2011f049a8cbfe7eec262cce"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"996bcc7d102644566f7fd00e47b95e6caa50807a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    cfg.IntOpt(\u0027adoption_step_timeout\u0027,"},{"line_number":36,"context_line":"               default\u003d60,"},{"line_number":37,"context_line":"               help\u003d\"Adoption step timeout controls how long the test \""},{"line_number":38,"context_line":"                    \"for node adoption will for state transitions to\""},{"line_number":39,"context_line":"                    \"complete. This is vital as this test is designed \""},{"line_number":40,"context_line":"                    \"to run when it is capible of running, and may have \""},{"line_number":41,"context_line":"                    \"wait for resources to be freed by other tests \""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_e1da5216","line":38,"updated":"2016-08-30 12:22:10.000000000","message":"missed space","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8af85ec090f348977dfeaf9a9f0bfb5d92d9968","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    cfg.IntOpt(\u0027adoption_step_timeout\u0027,"},{"line_number":36,"context_line":"               default\u003d60,"},{"line_number":37,"context_line":"               help\u003d\"Adoption step timeout controls how long the test \""},{"line_number":38,"context_line":"                    \"for node adoption will for state transitions to\""},{"line_number":39,"context_line":"                    \"complete. This is vital as this test is designed \""},{"line_number":40,"context_line":"                    \"to run when it is capible of running, and may have \""},{"line_number":41,"context_line":"                    \"wait for resources to be freed by other tests \""}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_4758988a","line":38,"in_reply_to":"fa7ab95a_e1da5216","updated":"2016-10-07 18:56:16.000000000","message":"Done","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"}],"ironic_tempest_plugin/tests/api/admin/test_nodestates.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"996bcc7d102644566f7fd00e47b95e6caa50807a","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        )"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_set_node_provision_state_adopt(self):"},{"line_number":205,"context_line":"        _, node \u003d self.create_node(self.chassis[\u0027uuid\u0027])"},{"line_number":206,"context_line":"        # Nodes appear in ENROLL state by default from v1.11"},{"line_number":207,"context_line":"        self.assertEqual(\u0027enroll\u0027, node[\u0027provision_state\u0027])"},{"line_number":208,"context_line":"        provision_states_list \u003d [\u0027manage\u0027, \u0027adopt\u0027, \u0027deleted\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_212efafa","line":205,"range":{"start_line":205,"start_character":8,"end_line":205,"end_character":9},"updated":"2016-08-30 12:22:10.000000000","message":"As Pavlo mentioned lets not use oslo translation marker here.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8af85ec090f348977dfeaf9a9f0bfb5d92d9968","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        )"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_set_node_provision_state_adopt(self):"},{"line_number":205,"context_line":"        _, node \u003d self.create_node(self.chassis[\u0027uuid\u0027])"},{"line_number":206,"context_line":"        # Nodes appear in ENROLL state by default from v1.11"},{"line_number":207,"context_line":"        self.assertEqual(\u0027enroll\u0027, node[\u0027provision_state\u0027])"},{"line_number":208,"context_line":"        provision_states_list \u003d [\u0027manage\u0027, \u0027adopt\u0027, \u0027deleted\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_67ebd478","line":205,"range":{"start_line":205,"start_character":8,"end_line":205,"end_character":9},"in_reply_to":"fa7ab95a_212efafa","updated":"2016-10-07 18:56:16.000000000","message":"Good catch, forgot about this one.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"}],"ironic_tempest_plugin/tests/scenario/test_baremetal_node_adoption_ops.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1b219b730d7e2aca29d3276c8b04dc6b342a62e0","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    @classmethod"},{"line_number":74,"context_line":"    def skip_checks(cls):"},{"line_number":75,"context_line":"        super(BaremetalAdoptionOps, cls).skip_checks()"},{"line_number":76,"context_line":"        if not CONF.baremetal.driver_enabled:"},{"line_number":77,"context_line":"            msg \u003d \u0027Ironic not available or Ironic compute driver not enabled\u0027"},{"line_number":78,"context_line":"            raise cls.skipException(msg)"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_ffb7c8f2","line":76,"range":{"start_line":76,"start_character":15,"end_line":76,"end_character":45},"updated":"2016-08-22 10:04:47.000000000","message":"nit: it\u0027s better to use CONF.service_available.ironic here.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    @classmethod"},{"line_number":74,"context_line":"    def skip_checks(cls):"},{"line_number":75,"context_line":"        super(BaremetalAdoptionOps, cls).skip_checks()"},{"line_number":76,"context_line":"        if not CONF.baremetal.driver_enabled:"},{"line_number":77,"context_line":"            msg \u003d \u0027Ironic not available or Ironic compute driver not enabled\u0027"},{"line_number":78,"context_line":"            raise cls.skipException(msg)"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_6ff4a6f1","line":76,"range":{"start_line":76,"start_character":15,"end_line":76,"end_character":45},"in_reply_to":"1ac06dbe_4a61e038","updated":"2016-08-22 17:30:56.000000000","message":"I think Vasyl\u0027s suggestion is actually best moving forward, the driver_enabled is intended for the ironic compute driver being enabled in nova.... :\\","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    @classmethod"},{"line_number":74,"context_line":"    def skip_checks(cls):"},{"line_number":75,"context_line":"        super(BaremetalAdoptionOps, cls).skip_checks()"},{"line_number":76,"context_line":"        if not CONF.baremetal.driver_enabled:"},{"line_number":77,"context_line":"            msg \u003d \u0027Ironic not available or Ironic compute driver not enabled\u0027"},{"line_number":78,"context_line":"            raise cls.skipException(msg)"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_220017aa","line":76,"range":{"start_line":76,"start_character":15,"end_line":76,"end_character":45},"in_reply_to":"1ac06dbe_ffb7c8f2","updated":"2016-08-22 17:30:56.000000000","message":"Thx, changing.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"78a2a3830df6c00b4fdac0e2276c69b430e6b09a","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    @classmethod"},{"line_number":74,"context_line":"    def skip_checks(cls):"},{"line_number":75,"context_line":"        super(BaremetalAdoptionOps, cls).skip_checks()"},{"line_number":76,"context_line":"        if not CONF.baremetal.driver_enabled:"},{"line_number":77,"context_line":"            msg \u003d \u0027Ironic not available or Ironic compute driver not enabled\u0027"},{"line_number":78,"context_line":"            raise cls.skipException(msg)"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_4a61e038","line":76,"range":{"start_line":76,"start_character":15,"end_line":76,"end_character":45},"in_reply_to":"1ac06dbe_ffb7c8f2","updated":"2016-08-22 16:06:34.000000000","message":"not really, one can think of a particular setup that runs only api tests on fake nodes, and does not have any nodes with real drivers.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1b219b730d7e2aca29d3276c8b04dc6b342a62e0","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            raise self.skipException(msg)"},{"line_number":90,"context_line":"        info \u003d self.node[\u0027driver_info\u0027]"},{"line_number":91,"context_line":"        driver \u003d self.node[\u0027driver\u0027]"},{"line_number":92,"context_line":"        if \u0027ipmitool\u0027 in driver:"},{"line_number":93,"context_line":"            if info[\u0027ipmi_address\u0027] !\u003d \u0027127.0.0.1\u0027:"},{"line_number":94,"context_line":"                msg \u003d (\"Node %s appears not to be on localhost via devstack, \""},{"line_number":95,"context_line":"                       \"Skipping test as credentials are required that can \""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_fab356e7","line":92,"updated":"2016-08-22 10:04:47.000000000","message":"I don\u0027t understand why this test can\u0027t be launched on external node. Can you please add a note here?","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            raise self.skipException(msg)"},{"line_number":90,"context_line":"        info \u003d self.node[\u0027driver_info\u0027]"},{"line_number":91,"context_line":"        driver \u003d self.node[\u0027driver\u0027]"},{"line_number":92,"context_line":"        if \u0027ipmitool\u0027 in driver:"},{"line_number":93,"context_line":"            if info[\u0027ipmi_address\u0027] !\u003d \u0027127.0.0.1\u0027:"},{"line_number":94,"context_line":"                msg \u003d (\"Node %s appears not to be on localhost via devstack, \""},{"line_number":95,"context_line":"                       \"Skipping test as credentials are required that can \""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_42a1d3a2","line":92,"in_reply_to":"1ac06dbe_fab356e7","updated":"2016-08-22 17:30:56.000000000","message":"Doh, I thought I had,  Adding note.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1b219b730d7e2aca29d3276c8b04dc6b342a62e0","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        info \u003d self.node[\u0027driver_info\u0027]"},{"line_number":91,"context_line":"        driver \u003d self.node[\u0027driver\u0027]"},{"line_number":92,"context_line":"        if \u0027ipmitool\u0027 in driver:"},{"line_number":93,"context_line":"            if info[\u0027ipmi_address\u0027] !\u003d \u0027127.0.0.1\u0027:"},{"line_number":94,"context_line":"                msg \u003d (\"Node %s appears not to be on localhost via devstack, \""},{"line_number":95,"context_line":"                       \"Skipping test as credentials are required that can \""},{"line_number":96,"context_line":"                       \"not be identified from an outside perspective.\" %"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_7aff66aa","line":93,"updated":"2016-08-22 10:04:47.000000000","message":"localhost may be here as well, or host_ip which are not 127.0.0.1 while node still running on local VM.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        info \u003d self.node[\u0027driver_info\u0027]"},{"line_number":91,"context_line":"        driver \u003d self.node[\u0027driver\u0027]"},{"line_number":92,"context_line":"        if \u0027ipmitool\u0027 in driver:"},{"line_number":93,"context_line":"            if info[\u0027ipmi_address\u0027] !\u003d \u0027127.0.0.1\u0027:"},{"line_number":94,"context_line":"                msg \u003d (\"Node %s appears not to be on localhost via devstack, \""},{"line_number":95,"context_line":"                       \"Skipping test as credentials are required that can \""},{"line_number":96,"context_line":"                       \"not be identified from an outside perspective.\" %"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_fd421e3d","line":93,"in_reply_to":"1ac06dbe_7aff66aa","updated":"2016-08-22 17:30:56.000000000","message":"True, I based this on the configuration that resulted from virtualbmc based nodes.  I\u0027ll update it to check for \u0027localhost\u0027 as well.  Based on that, I\u0027m not sure testing other addresses makes sense.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":19072,"name":"Xavier","email":"marcusrafael@lsd.ufcg.edu.br","username":"marcusrafael"},"change_message_id":"3615105fe36495c8fd72fd0897747b025a549a39","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                       self.node[\u0027uuid\u0027])"},{"line_number":98,"context_line":"                raise self.skipException(msg)"},{"line_number":99,"context_line":"        if \u0027ssh\u0027 in driver:"},{"line_number":100,"context_line":"            if info.get(\u0027ssh_password\u0027, None) is None:"},{"line_number":101,"context_line":"                msg \u003d (\"Node %s is configured with a password, Skipping \""},{"line_number":102,"context_line":"                       \"test as credentials are required that can not be \""},{"line_number":103,"context_line":"                       \"identified from an outside perspective.\" %"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_91ed04ba","line":100,"range":{"start_line":100,"start_character":40,"end_line":100,"end_character":44},"updated":"2016-07-24 04:39:30.000000000","message":"Intencional but not necessary, right? :)","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                       self.node[\u0027uuid\u0027])"},{"line_number":98,"context_line":"                raise self.skipException(msg)"},{"line_number":99,"context_line":"        if \u0027ssh\u0027 in driver:"},{"line_number":100,"context_line":"            if info.get(\u0027ssh_password\u0027, None) is None:"},{"line_number":101,"context_line":"                msg \u003d (\"Node %s is configured with a password, Skipping \""},{"line_number":102,"context_line":"                       \"test as credentials are required that can not be \""},{"line_number":103,"context_line":"                       \"identified from an outside perspective.\" %"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_a2e1a700","line":100,"range":{"start_line":100,"start_character":40,"end_line":100,"end_character":44},"in_reply_to":"dada55a8_91ed04ba","updated":"2016-08-22 17:30:56.000000000","message":"If I remember correctly, it is necessary if it is an empty string.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1b219b730d7e2aca29d3276c8b04dc6b342a62e0","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                msg \u003d (\"Node %s is configured with a password, Skipping \""},{"line_number":102,"context_line":"                       \"test as credentials are required that can not be \""},{"line_number":103,"context_line":"                       \"identified from an outside perspective.\" %"},{"line_number":104,"context_line":"                       self.node[\u0027uuid\u0027])"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def try_get_node(self):"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_baec3e2a","line":104,"updated":"2016-08-22 10:04:47.000000000","message":"missed raise here.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                msg \u003d (\"Node %s is configured with a password, Skipping \""},{"line_number":102,"context_line":"                       \"test as credentials are required that can not be \""},{"line_number":103,"context_line":"                       \"identified from an outside perspective.\" %"},{"line_number":104,"context_line":"                       self.node[\u0027uuid\u0027])"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def try_get_node(self):"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_ddc0027f","line":104,"in_reply_to":"1ac06dbe_baec3e2a","updated":"2016-08-22 17:30:56.000000000","message":"Doh, Fixed.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"78a2a3830df6c00b4fdac0e2276c69b430e6b09a","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def try_get_node(self):"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        def _fake_nodes_present():"},{"line_number":109,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":110,"context_line":"                driver\u003d\u0027fake\u0027)"},{"line_number":111,"context_line":"            if len(list.get(\u0027nodes\u0027)) \u003e 0:"},{"line_number":112,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_75ec828f","line":109,"updated":"2016-08-22 16:06:34.000000000","message":"please do not shadow _, it is a standard translation marker for gettext/i18n. If those ever start be used here, this would be a nice bug to hunt down.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def try_get_node(self):"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        def _fake_nodes_present():"},{"line_number":109,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":110,"context_line":"                driver\u003d\u0027fake\u0027)"},{"line_number":111,"context_line":"            if len(list.get(\u0027nodes\u0027)) \u003e 0:"},{"line_number":112,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_399cbcbf","line":109,"in_reply_to":"1ac06dbe_75ec828f","updated":"2016-08-22 17:30:56.000000000","message":"Done","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":19072,"name":"Xavier","email":"marcusrafael@lsd.ufcg.edu.br","username":"marcusrafael"},"change_message_id":"3615105fe36495c8fd72fd0897747b025a549a39","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        def _fake_nodes_present():"},{"line_number":109,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":110,"context_line":"                driver\u003d\u0027fake\u0027)"},{"line_number":111,"context_line":"            if len(list.get(\u0027nodes\u0027)) \u003e 0:"},{"line_number":112,"context_line":"                return True"},{"line_number":113,"context_line":"            return False"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_1138f43c","line":111,"range":{"start_line":111,"start_character":12,"end_line":111,"end_character":42},"updated":"2016-07-24 04:39:30.000000000","message":"could be: \u0027return len(list.get(\u0027nodes\u0027)) \u003e 0\u0027, so L112 and L113 wouldn\u0027t be necessary.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        def _fake_nodes_present():"},{"line_number":109,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":110,"context_line":"                driver\u003d\u0027fake\u0027)"},{"line_number":111,"context_line":"            if len(list.get(\u0027nodes\u0027)) \u003e 0:"},{"line_number":112,"context_line":"                return True"},{"line_number":113,"context_line":"            return False"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_1b4bbdca","line":111,"range":{"start_line":111,"start_character":12,"end_line":111,"end_character":42},"in_reply_to":"dada55a8_0ba1d9a9","updated":"2016-08-22 17:30:56.000000000","message":"Done","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":18462,"name":"Rahul U Nair","email":"rahulunair@gmail.com","username":"rahulunair"},"change_message_id":"87d78428b995a6677770ac93ed127648951cf11e","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        def _fake_nodes_present():"},{"line_number":109,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":110,"context_line":"                driver\u003d\u0027fake\u0027)"},{"line_number":111,"context_line":"            if len(list.get(\u0027nodes\u0027)) \u003e 0:"},{"line_number":112,"context_line":"                return True"},{"line_number":113,"context_line":"            return False"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_0ba1d9a9","line":111,"range":{"start_line":111,"start_character":12,"end_line":111,"end_character":42},"in_reply_to":"dada55a8_1138f43c","updated":"2016-07-24 19:53:47.000000000","message":"+1","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1b219b730d7e2aca29d3276c8b04dc6b342a62e0","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            if len(list.get(\u0027nodes\u0027)) \u003e 0:"},{"line_number":112,"context_line":"                return True"},{"line_number":113,"context_line":"            return False"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        while _fake_nodes_present():"},{"line_number":116,"context_line":"            time.sleep(1)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_daee5a8a","line":114,"updated":"2016-08-22 10:04:47.000000000","message":"why not use tempest.test.call_until_true here?","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"78a2a3830df6c00b4fdac0e2276c69b430e6b09a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            if len(list.get(\u0027nodes\u0027)) \u003e 0:"},{"line_number":112,"context_line":"                return True"},{"line_number":113,"context_line":"            return False"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        while _fake_nodes_present():"},{"line_number":116,"context_line":"            time.sleep(1)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_f5c0722c","line":114,"in_reply_to":"1ac06dbe_daee5a8a","updated":"2016-08-22 16:06:34.000000000","message":"+1","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            if len(list.get(\u0027nodes\u0027)) \u003e 0:"},{"line_number":112,"context_line":"                return True"},{"line_number":113,"context_line":"            return False"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        while _fake_nodes_present():"},{"line_number":116,"context_line":"            time.sleep(1)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_e0470d49","line":114,"in_reply_to":"1ac06dbe_daee5a8a","updated":"2016-08-22 17:30:56.000000000","message":"I have no idea :)  Changed in next rev.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1b219b730d7e2aca29d3276c8b04dc6b342a62e0","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        self.node \u003d self.get_last_available_node()"},{"line_number":119,"context_line":"        if self.node[\u0027driver\u0027] \u003d\u003d \u0027fake\u0027:"},{"line_number":120,"context_line":"            time.sleep(1)"},{"line_number":121,"context_line":"            self.node \u003d self.get_last_available_node()"},{"line_number":122,"context_line":"        if self.node is None:"},{"line_number":123,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":124,"context_line":"                provision_state\u003dself.BaremetalProvisionStates.CLEAN_WAIT)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_f5124908","line":121,"updated":"2016-08-22 10:04:47.000000000","message":"we will receive the same node as on L118 here why it is needed?","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        self.node \u003d self.get_last_available_node()"},{"line_number":119,"context_line":"        if self.node[\u0027driver\u0027] \u003d\u003d \u0027fake\u0027:"},{"line_number":120,"context_line":"            time.sleep(1)"},{"line_number":121,"context_line":"            self.node \u003d self.get_last_available_node()"},{"line_number":122,"context_line":"        if self.node is None:"},{"line_number":123,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":124,"context_line":"                provision_state\u003dself.BaremetalProvisionStates.CLEAN_WAIT)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_f4598b5b","line":121,"in_reply_to":"1ac06dbe_b59f1a4f","updated":"2016-08-22 17:30:56.000000000","message":"Not exactly.  There is a race here with other tests that we\u0027re only exposed to because we have no scheduling capability.  Improved inline note detailing the reason why in the next revision.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        self.node \u003d self.get_last_available_node()"},{"line_number":119,"context_line":"        if self.node[\u0027driver\u0027] \u003d\u003d \u0027fake\u0027:"},{"line_number":120,"context_line":"            time.sleep(1)"},{"line_number":121,"context_line":"            self.node \u003d self.get_last_available_node()"},{"line_number":122,"context_line":"        if self.node is None:"},{"line_number":123,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":124,"context_line":"                provision_state\u003dself.BaremetalProvisionStates.CLEAN_WAIT)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_6d5b162f","line":121,"in_reply_to":"1ac06dbe_f5124908","updated":"2016-08-22 17:30:56.000000000","message":"Not necessarily.  There is potentially a race in that the API may be empty of fake nodes, but new fake nodes might be created in between fake nodes being checked for and a node being gotten, so we need to check for that and obtain a new node in case.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"78a2a3830df6c00b4fdac0e2276c69b430e6b09a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        self.node \u003d self.get_last_available_node()"},{"line_number":119,"context_line":"        if self.node[\u0027driver\u0027] \u003d\u003d \u0027fake\u0027:"},{"line_number":120,"context_line":"            time.sleep(1)"},{"line_number":121,"context_line":"            self.node \u003d self.get_last_available_node()"},{"line_number":122,"context_line":"        if self.node is None:"},{"line_number":123,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":124,"context_line":"                provision_state\u003dself.BaremetalProvisionStates.CLEAN_WAIT)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_b59f1a4f","line":121,"in_reply_to":"1ac06dbe_f5124908","updated":"2016-08-22 16:06:34.000000000","message":"this whole if-block seems unneeded, as the previous \u0027while\u0027 (or indeed better call_untill_true) would continue only when there are no nodes with \u0027fake\u0027 driver left","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"78a2a3830df6c00b4fdac0e2276c69b430e6b09a","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            time.sleep(1)"},{"line_number":121,"context_line":"            self.node \u003d self.get_last_available_node()"},{"line_number":122,"context_line":"        if self.node is None:"},{"line_number":123,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":124,"context_line":"                provision_state\u003dself.BaremetalProvisionStates.CLEAN_WAIT)"},{"line_number":125,"context_line":"            if list.get(\u0027nodes\u0027):"},{"line_number":126,"context_line":"                self.node \u003d self.get_node(node_id\u003dlist[\u0027nodes\u0027][-1][\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_5027d4b5","line":123,"updated":"2016-08-22 16:06:34.000000000","message":"ditto about _","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1b219b730d7e2aca29d3276c8b04dc6b342a62e0","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            self.node \u003d self.get_last_available_node()"},{"line_number":122,"context_line":"        if self.node is None:"},{"line_number":123,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":124,"context_line":"                provision_state\u003dself.BaremetalProvisionStates.CLEAN_WAIT)"},{"line_number":125,"context_line":"            if list.get(\u0027nodes\u0027):"},{"line_number":126,"context_line":"                self.node \u003d self.get_node(node_id\u003dlist[\u0027nodes\u0027][-1][\u0027uuid\u0027])"},{"line_number":127,"context_line":"                self.wait_provisioning_state("}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_d5baade0","line":124,"updated":"2016-08-22 10:04:47.000000000","message":"this function \"try_get_node\" is called first at the test why we expecting here that some nodes will be in CLEAN_WAIT state?","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            self.node \u003d self.get_last_available_node()"},{"line_number":122,"context_line":"        if self.node is None:"},{"line_number":123,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":124,"context_line":"                provision_state\u003dself.BaremetalProvisionStates.CLEAN_WAIT)"},{"line_number":125,"context_line":"            if list.get(\u0027nodes\u0027):"},{"line_number":126,"context_line":"                self.node \u003d self.get_node(node_id\u003dlist[\u0027nodes\u0027][-1][\u0027uuid\u0027])"},{"line_number":127,"context_line":"                self.wait_provisioning_state("}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_79de3440","line":124,"in_reply_to":"1ac06dbe_7045b015","updated":"2016-08-22 17:30:56.000000000","message":"Pavlo, that is correct. Potentially hairy, but given the extremely limited resources on CI test machines in the gate, and that we should try to run as much as possible to avoid duplicating a great deal of resource waste, so I think this is something that we will have to keep in mind moving forward.  That and/or advocate for more memory for CI test nodes.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"78a2a3830df6c00b4fdac0e2276c69b430e6b09a","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            self.node \u003d self.get_last_available_node()"},{"line_number":122,"context_line":"        if self.node is None:"},{"line_number":123,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":124,"context_line":"                provision_state\u003dself.BaremetalProvisionStates.CLEAN_WAIT)"},{"line_number":125,"context_line":"            if list.get(\u0027nodes\u0027):"},{"line_number":126,"context_line":"                self.node \u003d self.get_node(node_id\u003dlist[\u0027nodes\u0027][-1][\u0027uuid\u0027])"},{"line_number":127,"context_line":"                self.wait_provisioning_state("}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_7045b015","line":124,"in_reply_to":"1ac06dbe_d5baade0","updated":"2016-08-22 16:06:34.000000000","message":"AFAIU the whole logic here is to enable parallel test execution, but actually to force this test to run last. that\u0027s why we are indeed waiting for the resource cleanup step from any other Ironic tempest tests to finish.\n\nThis can probably become hairy when we add more actual tests.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            self.node \u003d self.get_last_available_node()"},{"line_number":122,"context_line":"        if self.node is None:"},{"line_number":123,"context_line":"            _, list \u003d self.baremetal_client.list_nodes("},{"line_number":124,"context_line":"                provision_state\u003dself.BaremetalProvisionStates.CLEAN_WAIT)"},{"line_number":125,"context_line":"            if list.get(\u0027nodes\u0027):"},{"line_number":126,"context_line":"                self.node \u003d self.get_node(node_id\u003dlist[\u0027nodes\u0027][-1][\u0027uuid\u0027])"},{"line_number":127,"context_line":"                self.wait_provisioning_state("}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_2d2f5ef7","line":124,"in_reply_to":"1ac06dbe_d5baade0","updated":"2016-08-22 17:30:56.000000000","message":"If we\u0027ve been unable to select a node until this point, we need to see if the only node(s), such as a single baremetal VM, are in a cleaning state, say from another tempest test.  If they are, we can always wait a little while, otherwise we fail.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":19072,"name":"Xavier","email":"marcusrafael@lsd.ufcg.edu.br","username":"marcusrafael"},"change_message_id":"3615105fe36495c8fd72fd0897747b025a549a39","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                self.wait_provisioning_state("},{"line_number":128,"context_line":"                    self.node[\u0027uuid\u0027],"},{"line_number":129,"context_line":"                    self.BaremetalProvisionStates.AVAILABLE,"},{"line_number":130,"context_line":"                    timeout\u003d60,"},{"line_number":131,"context_line":"                    interval\u003d1"},{"line_number":132,"context_line":"                )"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_716df031","line":130,"range":{"start_line":130,"start_character":20,"end_line":130,"end_character":30},"updated":"2016-07-24 04:39:30.000000000","message":"nice ;)","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":19072,"name":"Xavier","email":"marcusrafael@lsd.ufcg.edu.br","username":"marcusrafael"},"change_message_id":"3615105fe36495c8fd72fd0897747b025a549a39","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                args[\u0027extra\u0027] \u003d port.get(\u0027extra\u0027)"},{"line_number":155,"context_line":"            # Note: pxe_enabled and local_link_connection are added in"},{"line_number":156,"context_line":"            # version 1.19, and only exist here as future-proofing."},{"line_number":157,"context_line":"            if port.get(\u0027pxe_enabled\u0027, None) is not None:"},{"line_number":158,"context_line":"                args[\u0027pxe_enabled\u0027] \u003d port.get(\u0027pxe_enabled\u0027)"},{"line_number":159,"context_line":"            if port.get(\u0027local_link_connection\u0027, None) is not None:"},{"line_number":160,"context_line":"                args[\u0027local_link_connection\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_b14928d3","line":157,"range":{"start_line":157,"start_character":39,"end_line":157,"end_character":43},"updated":"2016-07-24 04:39:30.000000000","message":"ditto","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1b219b730d7e2aca29d3276c8b04dc6b342a62e0","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            # Note: pxe_enabled and local_link_connection are added in"},{"line_number":156,"context_line":"            # version 1.19, and only exist here as future-proofing."},{"line_number":157,"context_line":"            if port.get(\u0027pxe_enabled\u0027, None) is not None:"},{"line_number":158,"context_line":"                args[\u0027pxe_enabled\u0027] \u003d port.get(\u0027pxe_enabled\u0027)"},{"line_number":159,"context_line":"            if port.get(\u0027local_link_connection\u0027, None) is not None:"},{"line_number":160,"context_line":"                args[\u0027local_link_connection\u0027] \u003d ("},{"line_number":161,"context_line":"                    port.get(\u0027local_link_connection\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_d5dd8d15","line":158,"updated":"2016-08-22 10:04:47.000000000","message":"might be:\n\npxe_enabled \u003d port.get(\u0027pxe_enabled\u0027, None)\nif pxe_enabled is not None:\n    args[\u0027pxe_enabled\u0027] \u003d pxe_enabled","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            # Note: pxe_enabled and local_link_connection are added in"},{"line_number":156,"context_line":"            # version 1.19, and only exist here as future-proofing."},{"line_number":157,"context_line":"            if port.get(\u0027pxe_enabled\u0027, None) is not None:"},{"line_number":158,"context_line":"                args[\u0027pxe_enabled\u0027] \u003d port.get(\u0027pxe_enabled\u0027)"},{"line_number":159,"context_line":"            if port.get(\u0027local_link_connection\u0027, None) is not None:"},{"line_number":160,"context_line":"                args[\u0027local_link_connection\u0027] \u003d ("},{"line_number":161,"context_line":"                    port.get(\u0027local_link_connection\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_61de8c12","line":158,"in_reply_to":"1ac06dbe_d5dd8d15","updated":"2016-08-22 17:30:56.000000000","message":"Done.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":19072,"name":"Xavier","email":"marcusrafael@lsd.ufcg.edu.br","username":"marcusrafael"},"change_message_id":"3615105fe36495c8fd72fd0897747b025a549a39","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            # version 1.19, and only exist here as future-proofing."},{"line_number":157,"context_line":"            if port.get(\u0027pxe_enabled\u0027, None) is not None:"},{"line_number":158,"context_line":"                args[\u0027pxe_enabled\u0027] \u003d port.get(\u0027pxe_enabled\u0027)"},{"line_number":159,"context_line":"            if port.get(\u0027local_link_connection\u0027, None) is not None:"},{"line_number":160,"context_line":"                args[\u0027local_link_connection\u0027] \u003d ("},{"line_number":161,"context_line":"                    port.get(\u0027local_link_connection\u0027)"},{"line_number":162,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_9144e4b7","line":159,"range":{"start_line":159,"start_character":49,"end_line":159,"end_character":53},"updated":"2016-07-24 04:39:30.000000000","message":"ditto","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1b219b730d7e2aca29d3276c8b04dc6b342a62e0","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                args[\u0027pxe_enabled\u0027] \u003d port.get(\u0027pxe_enabled\u0027)"},{"line_number":159,"context_line":"            if port.get(\u0027local_link_connection\u0027, None) is not None:"},{"line_number":160,"context_line":"                args[\u0027local_link_connection\u0027] \u003d ("},{"line_number":161,"context_line":"                    port.get(\u0027local_link_connection\u0027)"},{"line_number":162,"context_line":"                )"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"            self.create_port(self.node[\u0027uuid\u0027], **args)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_95779539","line":161,"updated":"2016-08-22 10:04:47.000000000","message":"the same as on L158","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                args[\u0027pxe_enabled\u0027] \u003d port.get(\u0027pxe_enabled\u0027)"},{"line_number":159,"context_line":"            if port.get(\u0027local_link_connection\u0027, None) is not None:"},{"line_number":160,"context_line":"                args[\u0027local_link_connection\u0027] \u003d ("},{"line_number":161,"context_line":"                    port.get(\u0027local_link_connection\u0027)"},{"line_number":162,"context_line":"                )"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"            self.create_port(self.node[\u0027uuid\u0027], **args)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_44039e0d","line":161,"in_reply_to":"1ac06dbe_95779539","updated":"2016-08-22 17:30:56.000000000","message":"Done","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1b219b730d7e2aca29d3276c8b04dc6b342a62e0","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    def set_instance_info(self):"},{"line_number":180,"context_line":"        # Ironic needs something to verify."},{"line_number":181,"context_line":"        img_server \u003d \"http://download.cirros-cloud.net\""},{"line_number":182,"context_line":"        img_path \u003d \"/0.3.1/cirros-0.3.1-x86_64-disk.img\""},{"line_number":183,"context_line":"        img_url \u003d img_server + img_path"},{"line_number":184,"context_line":"        self.patch_node("},{"line_number":185,"context_line":"            self.node[\u0027uuid\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_bfe0b0cd","line":182,"updated":"2016-08-22 10:04:47.000000000","message":"lets do not hardcode version here, we may obtain latest release version here http://download.cirros-cloud.net/version/released","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    def set_instance_info(self):"},{"line_number":180,"context_line":"        # Ironic needs something to verify."},{"line_number":181,"context_line":"        img_server \u003d \"http://download.cirros-cloud.net\""},{"line_number":182,"context_line":"        img_path \u003d \"/0.3.1/cirros-0.3.1-x86_64-disk.img\""},{"line_number":183,"context_line":"        img_url \u003d img_server + img_path"},{"line_number":184,"context_line":"        self.patch_node("},{"line_number":185,"context_line":"            self.node[\u0027uuid\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_347a03f2","line":182,"in_reply_to":"1ac06dbe_bfe0b0cd","updated":"2016-08-22 17:30:56.000000000","message":"Lets split the difference since it always has to be a valid URL, and we may add more tests later that may actually need to deploy a URL, and make it a configuration parameter.  Any objections/thoughts?","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1b219b730d7e2aca29d3276c8b04dc6b342a62e0","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        )"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def attempt_adoption_intentional_failure(self):"},{"line_number":197,"context_line":"        step_timeout \u003d 60"},{"line_number":198,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":199,"context_line":"            self.node[\u0027uuid\u0027],"},{"line_number":200,"context_line":"            baremetal_manager.BaremetalProvisionStates.ADOPT"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_ff01886b","line":197,"updated":"2016-08-22 10:04:47.000000000","message":"might be create a new config variable for this?","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        )"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def attempt_adoption_intentional_failure(self):"},{"line_number":197,"context_line":"        step_timeout \u003d 60"},{"line_number":198,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":199,"context_line":"            self.node[\u0027uuid\u0027],"},{"line_number":200,"context_line":"            baremetal_manager.BaremetalProvisionStates.ADOPT"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_a0f515cc","line":197,"in_reply_to":"1ac06dbe_ff01886b","updated":"2016-08-22 17:30:56.000000000","message":"Agreed, will be in next revision.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":19072,"name":"Xavier","email":"marcusrafael@lsd.ufcg.edu.br","username":"marcusrafael"},"change_message_id":"3615105fe36495c8fd72fd0897747b025a549a39","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        self.wait_provisioning_state("},{"line_number":203,"context_line":"            self.node[\u0027uuid\u0027],"},{"line_number":204,"context_line":"            baremetal_manager.BaremetalProvisionStates.ADOPTFAIL,"},{"line_number":205,"context_line":"            step_timeout"},{"line_number":206,"context_line":"        )"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def adopt_node(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_d17bfcf2","line":205,"range":{"start_line":205,"start_character":12,"end_line":205,"end_character":24},"updated":"2016-07-24 04:39:30.000000000","message":"nit: s/step_timeout/timeout\u003d60/, then the \u0027step_timeout\u0027 can be removed.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        self.wait_provisioning_state("},{"line_number":203,"context_line":"            self.node[\u0027uuid\u0027],"},{"line_number":204,"context_line":"            baremetal_manager.BaremetalProvisionStates.ADOPTFAIL,"},{"line_number":205,"context_line":"            step_timeout"},{"line_number":206,"context_line":"        )"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def adopt_node(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_009509dd","line":205,"range":{"start_line":205,"start_character":12,"end_line":205,"end_character":24},"in_reply_to":"dada55a8_d17bfcf2","updated":"2016-08-22 17:30:56.000000000","message":"Refactoring this portion.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":19072,"name":"Xavier","email":"marcusrafael@lsd.ufcg.edu.br","username":"marcusrafael"},"change_message_id":"3615105fe36495c8fd72fd0897747b025a549a39","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        self.wait_provisioning_state("},{"line_number":215,"context_line":"            self.node[\u0027uuid\u0027],"},{"line_number":216,"context_line":"            baremetal_manager.BaremetalProvisionStates.ACTIVE,"},{"line_number":217,"context_line":"            step_timeout"},{"line_number":218,"context_line":"        )"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def move_node_to_available(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_118634db","line":217,"range":{"start_line":217,"start_character":12,"end_line":217,"end_character":24},"updated":"2016-07-24 04:39:30.000000000","message":"ditto: Inline Temp","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1b219b730d7e2aca29d3276c8b04dc6b342a62e0","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":222,"context_line":"            self.node[\u0027uuid\u0027],"},{"line_number":223,"context_line":"            baremetal_manager.BaremetalProvisionStates.DELETED"},{"line_number":224,"context_line":"        )"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def set_to_maintenance(self):"},{"line_number":227,"context_line":"        self.set_maintenance_mode("}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_9fe694b2","line":224,"updated":"2016-08-22 10:04:47.000000000","message":"should we check that node is in available state now?","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":222,"context_line":"            self.node[\u0027uuid\u0027],"},{"line_number":223,"context_line":"            baremetal_manager.BaremetalProvisionStates.DELETED"},{"line_number":224,"context_line":"        )"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def set_to_maintenance(self):"},{"line_number":227,"context_line":"        self.set_maintenance_mode("}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_70e130fe","line":224,"in_reply_to":"1ac06dbe_9fe694b2","updated":"2016-08-22 17:30:56.000000000","message":"I don\u0027t think we should.  If we do, we may extend this test\u0027s running time quite a bit as we will be waiting for cleaning to complete.  I think doing so would might actually lead to more confusion if the cloud that a CI job is running against is under heavy IO load.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1b219b730d7e2aca29d3276c8b04dc6b342a62e0","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    def test_baremetal_node_adoption_ops(self):"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        # Obtain the last node in the node inventory."},{"line_number":236,"context_line":"        self.try_get_node()"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        # Validates if this test should be able to run"},{"line_number":239,"context_line":"        self.check_ability_to_test()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_6b8f9acc","line":236,"updated":"2016-08-22 10:04:47.000000000","message":"what is the purpose of this method? can you add a description what it should do.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    def test_baremetal_node_adoption_ops(self):"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        # Obtain the last node in the node inventory."},{"line_number":236,"context_line":"        self.try_get_node()"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        # Validates if this test should be able to run"},{"line_number":239,"context_line":"        self.check_ability_to_test()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_70801047","line":236,"in_reply_to":"1ac06dbe_6b8f9acc","updated":"2016-08-22 17:30:56.000000000","message":"Done, here and on the method docstring itself.","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":19072,"name":"Xavier","email":"marcusrafael@lsd.ufcg.edu.br","username":"marcusrafael"},"change_message_id":"3615105fe36495c8fd72fd0897747b025a549a39","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            memory_mb\u003dself.node[\u0027properties\u0027][\u0027memory_mb\u0027]"},{"line_number":265,"context_line":"        )"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        # Validate that the old and new UUID matches"},{"line_number":268,"context_line":"        self.assertEqual(self.node[\u0027uuid\u0027], new_node[\u0027uuid\u0027])"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        # Apply the driver info from the node"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_71269017","line":267,"range":{"start_line":267,"start_character":19,"end_line":267,"end_character":27},"updated":"2016-07-24 04:39:30.000000000","message":"nit: s/that the/the/ ?","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9623968c747771dd4b68f2f9f71bee05362b9d9b","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            memory_mb\u003dself.node[\u0027properties\u0027][\u0027memory_mb\u0027]"},{"line_number":265,"context_line":"        )"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        # Validate that the old and new UUID matches"},{"line_number":268,"context_line":"        self.assertEqual(self.node[\u0027uuid\u0027], new_node[\u0027uuid\u0027])"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        # Apply the driver info from the node"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_b5643ae5","line":267,"range":{"start_line":267,"start_character":19,"end_line":267,"end_character":27},"in_reply_to":"dada55a8_71269017","updated":"2016-08-22 17:30:56.000000000","message":"Done","commit_id":"2e06f5346e476c5b924a55a3b56ddaea0e12a11b"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"f963d281b367dbd3855aa3abd562c6418205584c","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    def skip_checks(cls):"},{"line_number":77,"context_line":"        super(BaremetalAdoptionOps, cls).skip_checks()"},{"line_number":78,"context_line":"        if not CONF.service_available.ironic:"},{"line_number":79,"context_line":"            msg \u003d \u0027Ironic not available or Ironic compute driver not enabled\u0027"},{"line_number":80,"context_line":"            raise cls.skipException(msg)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa7ab95a_facce2bc","line":79,"range":{"start_line":79,"start_character":19,"end_line":79,"end_character":76},"updated":"2016-08-29 21:44:55.000000000","message":"When the virt_driver is not enabled, we have \u0027CONF.baremetal.driver_enabled\u003dFalse\u0027. We are removing this check though (and we may remove the service_available flag too), but I think you should maintain consistency (or change the msg) in the case your patch lands first.","commit_id":"e603fa76edafbd0e2011f049a8cbfe7eec262cce"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"996bcc7d102644566f7fd00e47b95e6caa50807a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    \"\"\"This smoke tests the node adoption functionality of ironic."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    The test functionally is written to run against VM nodes created"},{"line_number":32,"context_line":"    by devstack. As we are unable to retrieve the password via the API,"},{"line_number":33,"context_line":"    we re-assert a default IPMI password when configured for localhost."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    It follows this set of operations:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_0c8bed1f","line":32,"range":{"start_line":32,"start_character":17,"end_line":32,"end_character":70},"updated":"2016-08-30 12:22:10.000000000","message":"It is possible by using appropriate policy: https://github.com/openstack/ironic/blob/master/etc/ironic/policy.json.sample#L5","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8af85ec090f348977dfeaf9a9f0bfb5d92d9968","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    \"\"\"This smoke tests the node adoption functionality of ironic."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    The test functionally is written to run against VM nodes created"},{"line_number":32,"context_line":"    by devstack. As we are unable to retrieve the password via the API,"},{"line_number":33,"context_line":"    we re-assert a default IPMI password when configured for localhost."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    It follows this set of operations:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_e7a52447","line":32,"range":{"start_line":32,"start_character":17,"end_line":32,"end_character":70},"in_reply_to":"fa7ab95a_0c8bed1f","updated":"2016-10-07 18:56:16.000000000","message":"As I understand it, we would have to edit the policy in place.  Save the update out, restart the API, and and then run the test.  I kind of feel like that is cheating since this is supposed to be a blackbox test.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"996bcc7d102644566f7fd00e47b95e6caa50807a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    we re-assert a default IPMI password when configured for localhost."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    It follows this set of operations:"},{"line_number":36,"context_line":"        * Identifies the last node in the node list. If nodes with"},{"line_number":37,"context_line":"          the ``fake`` driver are present, the test waits for them"},{"line_number":38,"context_line":"          to be removed. If only nodes in ``clean wait`` state are"},{"line_number":39,"context_line":"          present upon attempting to get a node, the test waits an"},{"line_number":40,"context_line":"          additional sixty seconds for the cleaning operation to"},{"line_number":41,"context_line":"          complete."},{"line_number":42,"context_line":"        * Identifies if the test is likely to be successful based"},{"line_number":43,"context_line":"          upon supplied driver_info parameters in the existing node."},{"line_number":44,"context_line":"          If the node appears to not be a local devstack deployment,"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_cc058514","line":41,"range":{"start_line":36,"start_character":10,"end_line":41,"end_character":19},"updated":"2016-08-30 12:22:10.000000000","message":"So the test is using any node with non \u0027fake\u0027 driver? Why we need to remove fake nodes here? Why not just pick any available node with non-fake driver?","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8af85ec090f348977dfeaf9a9f0bfb5d92d9968","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    we re-assert a default IPMI password when configured for localhost."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    It follows this set of operations:"},{"line_number":36,"context_line":"        * Identifies the last node in the node list. If nodes with"},{"line_number":37,"context_line":"          the ``fake`` driver are present, the test waits for them"},{"line_number":38,"context_line":"          to be removed. If only nodes in ``clean wait`` state are"},{"line_number":39,"context_line":"          present upon attempting to get a node, the test waits an"},{"line_number":40,"context_line":"          additional sixty seconds for the cleaning operation to"},{"line_number":41,"context_line":"          complete."},{"line_number":42,"context_line":"        * Identifies if the test is likely to be successful based"},{"line_number":43,"context_line":"          upon supplied driver_info parameters in the existing node."},{"line_number":44,"context_line":"          If the node appears to not be a local devstack deployment,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_4aa33d00","line":41,"range":{"start_line":36,"start_character":10,"end_line":41,"end_character":19},"in_reply_to":"fa7ab95a_cc058514","updated":"2016-10-07 18:56:16.000000000","message":"So the tests delete the nodes with the fake drivers when they are done.  So they are transitory and are typically completely gone once this test runs.  Truthfully this is race avoidance and identification of a valid node without a scheduler.  The real conundrum that arises is there may only be one \"fake\" test node enrolled by default, and the other test may have obtained it for testing.  In that case, we either have to wait, or likely run into the case where the test will never actually be able to be executed since there will be be resource contention.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"996bcc7d102644566f7fd00e47b95e6caa50807a","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            known_good_driver \u003d True"},{"line_number":113,"context_line":"        if \u0027ssh\u0027 in driver:"},{"line_number":114,"context_line":"            if info.get(\u0027ssh_password\u0027, None) is None:"},{"line_number":115,"context_line":"                msg \u003d (\"Node %s is configured with a password, Skipping \""},{"line_number":116,"context_line":"                       \"test as credentials are required that can not be \""},{"line_number":117,"context_line":"                       \"identified from an outside perspective.\" %"},{"line_number":118,"context_line":"                       self.node[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_a1284a9b","line":115,"range":{"start_line":115,"start_character":46,"end_line":115,"end_character":50},"updated":"2016-08-30 12:22:10.000000000","message":"s/with/without/","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8af85ec090f348977dfeaf9a9f0bfb5d92d9968","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            known_good_driver \u003d True"},{"line_number":113,"context_line":"        if \u0027ssh\u0027 in driver:"},{"line_number":114,"context_line":"            if info.get(\u0027ssh_password\u0027, None) is None:"},{"line_number":115,"context_line":"                msg \u003d (\"Node %s is configured with a password, Skipping \""},{"line_number":116,"context_line":"                       \"test as credentials are required that can not be \""},{"line_number":117,"context_line":"                       \"identified from an outside perspective.\" %"},{"line_number":118,"context_line":"                       self.node[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_6a44791a","line":115,"range":{"start_line":115,"start_character":46,"end_line":115,"end_character":50},"in_reply_to":"fa7ab95a_a1284a9b","updated":"2016-10-07 18:56:16.000000000","message":"With is actually correct.  The line above should be is not None.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"996bcc7d102644566f7fd00e47b95e6caa50807a","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                       \"test as credentials are required that can not be \""},{"line_number":117,"context_line":"                       \"identified from an outside perspective.\" %"},{"line_number":118,"context_line":"                       self.node[\u0027uuid\u0027])"},{"line_number":119,"context_line":"                raise self.skipException(msg)"},{"line_number":120,"context_line":"            known_good_driver \u003d True"},{"line_number":121,"context_line":"        if not known_good_driver:"},{"line_number":122,"context_line":"            msg \u003d (\"Node %s appears to not have a driver or confiugration \""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_a10f6a35","line":119,"updated":"2016-08-30 12:22:10.000000000","message":"This test is skipped on CI because we enrolling nodes with ssh key: http://logs.openstack.org/75/344975/14/check/gate-tempest-dsvm-ironic-ipa-wholedisk-agent_ssh-tinyipa/777c327/console.html#_2016-08-29_23_00_18_465970\n\nPlease update test accordingly to work with ssh keys, the key path may be obtained from API request without policy changes.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8af85ec090f348977dfeaf9a9f0bfb5d92d9968","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                       \"test as credentials are required that can not be \""},{"line_number":117,"context_line":"                       \"identified from an outside perspective.\" %"},{"line_number":118,"context_line":"                       self.node[\u0027uuid\u0027])"},{"line_number":119,"context_line":"                raise self.skipException(msg)"},{"line_number":120,"context_line":"            known_good_driver \u003d True"},{"line_number":121,"context_line":"        if not known_good_driver:"},{"line_number":122,"context_line":"            msg \u003d (\"Node %s appears to not have a driver or confiugration \""}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_ca010db1","line":119,"in_reply_to":"fa7ab95a_a10f6a35","updated":"2016-10-07 18:56:16.000000000","message":"The path should be restored, and that failure relates to the conditional on line 114 which will be fixed in the next revision.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"996bcc7d102644566f7fd00e47b95e6caa50807a","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            raise self.skipException(msg)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def try_get_node(self):"},{"line_number":128,"context_line":"        \"\"\"Attempt to identify a for testing."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        This test operates directly against the ironic API, and as such"},{"line_number":131,"context_line":"        lacks any capability of self scheduling for a node to utilize."}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_ecf6c95b","line":128,"updated":"2016-08-30 12:22:10.000000000","message":"s/a/a node/","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8af85ec090f348977dfeaf9a9f0bfb5d92d9968","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            raise self.skipException(msg)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def try_get_node(self):"},{"line_number":128,"context_line":"        \"\"\"Attempt to identify a for testing."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        This test operates directly against the ironic API, and as such"},{"line_number":131,"context_line":"        lacks any capability of self scheduling for a node to utilize."}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_ea15e9e4","line":128,"in_reply_to":"fa7ab95a_ecf6c95b","updated":"2016-10-07 18:56:16.000000000","message":"Done","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"996bcc7d102644566f7fd00e47b95e6caa50807a","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        \"\"\""},{"line_number":137,"context_line":"        def _fake_nodes_not_present():"},{"line_number":138,"context_line":"            unused, list \u003d self.baremetal_client.list_nodes("},{"line_number":139,"context_line":"                driver\u003d\u0027fake\u0027)"},{"line_number":140,"context_line":"            return len(list.get(\u0027nodes\u0027)) \u003c\u003d 0"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        if not tempest.test.call_until_true("}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_8716f649","line":139,"range":{"start_line":139,"start_character":24,"end_line":139,"end_character":28},"updated":"2016-08-30 12:22:10.000000000","message":"fake_pxe, fake_ssh  and other are also fake driver that may not be used by this test?","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8af85ec090f348977dfeaf9a9f0bfb5d92d9968","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        \"\"\""},{"line_number":137,"context_line":"        def _fake_nodes_not_present():"},{"line_number":138,"context_line":"            unused, list \u003d self.baremetal_client.list_nodes("},{"line_number":139,"context_line":"                driver\u003d\u0027fake\u0027)"},{"line_number":140,"context_line":"            return len(list.get(\u0027nodes\u0027)) \u003c\u003d 0"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        if not tempest.test.call_until_true("}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_6aae3999","line":139,"range":{"start_line":139,"start_character":24,"end_line":139,"end_character":28},"in_reply_to":"fa7ab95a_8716f649","updated":"2016-10-07 18:56:16.000000000","message":"Well, truthfully, the purpose is to avoid the nodes created with fake that are put in place by the api unit tests as they are deleted. I guess we should sort the list and look for any nodes with fake in the driver field.  Thoughts?","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"996bcc7d102644566f7fd00e47b95e6caa50807a","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        # executes.  If we\u0027ve picked a fake node, we need to wait a second"},{"line_number":154,"context_line":"        # and re-query the API."},{"line_number":155,"context_line":"        # TODO(TheJulia): Rewrite node selection once we have actual"},{"line_number":156,"context_line":"        # reservation and scheduling capabilities."},{"line_number":157,"context_line":"        if self.node is not None and self.node.get(\u0027driver\u0027, None) \u003d\u003d \u0027fake\u0027:"},{"line_number":158,"context_line":"            time.sleep(1)"},{"line_number":159,"context_line":"            self.node \u003d self.get_last_available_node()"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_87b2764a","line":156,"updated":"2016-08-30 12:22:10.000000000","message":"It is possible to schedule instance to specified ironic node by setting \"--availability-zone ::f2a411e0-814f-4fe8-9078-9a47cc45c7c5\" Please have look: http://paste.openstack.org/show/550163/","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8af85ec090f348977dfeaf9a9f0bfb5d92d9968","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        # executes.  If we\u0027ve picked a fake node, we need to wait a second"},{"line_number":154,"context_line":"        # and re-query the API."},{"line_number":155,"context_line":"        # TODO(TheJulia): Rewrite node selection once we have actual"},{"line_number":156,"context_line":"        # reservation and scheduling capabilities."},{"line_number":157,"context_line":"        if self.node is not None and self.node.get(\u0027driver\u0027, None) \u003d\u003d \u0027fake\u0027:"},{"line_number":158,"context_line":"            time.sleep(1)"},{"line_number":159,"context_line":"            self.node \u003d self.get_last_available_node()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_2abd11b7","line":156,"in_reply_to":"fa7ab95a_87b2764a","updated":"2016-10-07 18:56:16.000000000","message":"This test is completely against ironic, and outside the scope of nova.  The reference is more in direct cards to having such capabilities in ironic it\u0027s self.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"996bcc7d102644566f7fd00e47b95e6caa50807a","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        # and re-query the API."},{"line_number":155,"context_line":"        # TODO(TheJulia): Rewrite node selection once we have actual"},{"line_number":156,"context_line":"        # reservation and scheduling capabilities."},{"line_number":157,"context_line":"        if self.node is not None and self.node.get(\u0027driver\u0027, None) \u003d\u003d \u0027fake\u0027:"},{"line_number":158,"context_line":"            time.sleep(1)"},{"line_number":159,"context_line":"            self.node \u003d self.get_last_available_node()"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_c78f1e73","line":157,"updated":"2016-08-30 12:22:10.000000000","message":"ditto that fake nodes may be registered with fake_pxe or fake_ssh or any other driver that contains fake word.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8af85ec090f348977dfeaf9a9f0bfb5d92d9968","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        # and re-query the API."},{"line_number":155,"context_line":"        # TODO(TheJulia): Rewrite node selection once we have actual"},{"line_number":156,"context_line":"        # reservation and scheduling capabilities."},{"line_number":157,"context_line":"        if self.node is not None and self.node.get(\u0027driver\u0027, None) \u003d\u003d \u0027fake\u0027:"},{"line_number":158,"context_line":"            time.sleep(1)"},{"line_number":159,"context_line":"            self.node \u003d self.get_last_available_node()"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_eaede9b7","line":157,"in_reply_to":"fa7ab95a_c78f1e73","updated":"2016-10-07 18:56:16.000000000","message":"See previous comment on the mater.  Since functionality those drivers will work for this test, I think they are okay.  The point is to avoid the nodes created for various api unit tests.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"996bcc7d102644566f7fd00e47b95e6caa50807a","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            # is that the operator MUST supply the correct password"},{"line_number":213,"context_line":"            # upon re-enrollment."},{"line_number":214,"context_line":"            # TODO(TheJulia): Improve handling so it can be dynamic."},{"line_number":215,"context_line":"            if \u0027password\u0027 in key:"},{"line_number":216,"context_line":"                val \u003d \"password\""},{"line_number":217,"context_line":"            path \u003d (\u0027/driver_info/%s\u0027 % key)"},{"line_number":218,"context_line":"            patch.append({\u0027path\u0027: path, \u0027value\u0027: val, \u0027op\u0027: \u0027add\u0027})"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_87a6f6ab","line":215,"updated":"2016-08-30 12:22:10.000000000","message":"driver_info doesn\u0027t have password key. The valid key is based on driver that is used, for example: ipmi_password, ssh_password.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8af85ec090f348977dfeaf9a9f0bfb5d92d9968","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            # is that the operator MUST supply the correct password"},{"line_number":213,"context_line":"            # upon re-enrollment."},{"line_number":214,"context_line":"            # TODO(TheJulia): Improve handling so it can be dynamic."},{"line_number":215,"context_line":"            if \u0027password\u0027 in key:"},{"line_number":216,"context_line":"                val \u003d \"password\""},{"line_number":217,"context_line":"            path \u003d (\u0027/driver_info/%s\u0027 % key)"},{"line_number":218,"context_line":"            patch.append({\u0027path\u0027: path, \u0027value\u0027: val, \u0027op\u0027: \u0027add\u0027})"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_ea4969b8","line":215,"in_reply_to":"fa7ab95a_87a6f6ab","updated":"2016-10-07 18:56:16.000000000","message":"\u0027ipmi_password\u0027 and \u0027ssh_password\u0027 both contain the substring \u0027password\u0027, which means the conditional will return true and operate as desired.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"996bcc7d102644566f7fd00e47b95e6caa50807a","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":259,"context_line":"            self.node[\u0027uuid\u0027],"},{"line_number":260,"context_line":"            baremetal_manager.BaremetalProvisionStates.DELETED"},{"line_number":261,"context_line":"        )"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def set_to_maintenance(self):"},{"line_number":264,"context_line":"        self.set_maintenance_mode("}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_4c0b357d","line":261,"updated":"2016-08-30 12:22:10.000000000","message":"we need to ensure here that node reached to available state.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8af85ec090f348977dfeaf9a9f0bfb5d92d9968","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":259,"context_line":"            self.node[\u0027uuid\u0027],"},{"line_number":260,"context_line":"            baremetal_manager.BaremetalProvisionStates.DELETED"},{"line_number":261,"context_line":"        )"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def set_to_maintenance(self):"},{"line_number":264,"context_line":"        self.set_maintenance_mode("}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_4acfbd28","line":261,"in_reply_to":"fa7ab95a_4c0b357d","updated":"2016-10-07 18:56:16.000000000","message":"Are you asking for us to potentially wait through an actual cleaning cycle before marking the test completed when the intended behavior to be tested has been tested?  I\u0027m asking because waiting minutes, or tens of minutes, depending on gate node disk-io seems time consuming.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"996bcc7d102644566f7fd00e47b95e6caa50807a","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.set_maintenance_mode("},{"line_number":265,"context_line":"            self.node[\u0027uuid\u0027],"},{"line_number":266,"context_line":"            reason\u003d\u0027deletion for adoption test\u0027"},{"line_number":267,"context_line":"        )"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @test.services(\u0027baremetal\u0027)"},{"line_number":270,"context_line":"    def test_baremetal_node_adoption_ops(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_0cca0d1b","line":267,"updated":"2016-08-30 12:22:10.000000000","message":"need to ensure that maintenance was applied.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8af85ec090f348977dfeaf9a9f0bfb5d92d9968","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.set_maintenance_mode("},{"line_number":265,"context_line":"            self.node[\u0027uuid\u0027],"},{"line_number":266,"context_line":"            reason\u003d\u0027deletion for adoption test\u0027"},{"line_number":267,"context_line":"        )"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @test.services(\u0027baremetal\u0027)"},{"line_number":270,"context_line":"    def test_baremetal_node_adoption_ops(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_0a65b51c","line":267,"in_reply_to":"fa7ab95a_0cca0d1b","updated":"2016-10-07 18:56:16.000000000","message":"Deletion would otherwise fail.  It doesn\u0027t quite make sense to me to verify maintenance was applied since so many other test do just that.","commit_id":"ab77c94a7b9d325e65d4677e9ab19d4ed3df6fa5"}]}
