)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Devananda van der Veen \u003cdevananda.vdv@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-01-02 10:02:33 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement baremetal PXE driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch implements the PXE driver for baremetal compute."},{"line_number":10,"context_line":"Documentation will follow in another patch."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAM3%2F%2F190%3D","line":7,"updated":"2013-01-03 00:04:15.000000000","message":"I\u0027d phrase the first sentence a little less tersely:\n\"Provide a PXE backend driver for the baremetal driver.\"\n\nor something. Doesn\u0027t really matter.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Devananda van der Veen \u003cdevananda.vdv@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-01-02 10:02:33 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement baremetal PXE driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch implements the PXE driver for baremetal compute."},{"line_number":10,"context_line":"Documentation will follow in another patch."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAM3%2F%2F0ks%3D","line":7,"in_reply_to":"AAAAM3%2F%2F190%3D","updated":"2013-01-03 20:01:40.000000000","message":"Done","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"blueprint general-bare-metal-provisioning-framework."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I8d849601186e3dc13f10382857ff2bbc1ff1026d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAM3%2F%2F19w%3D","line":14,"updated":"2013-01-03 00:04:15.000000000","message":"Documentation being in another patch isn\u0027t really a commit message matter, is it ?","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"blueprint general-bare-metal-provisioning-framework."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I8d849601186e3dc13f10382857ff2bbc1ff1026d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAM3%2F%2F0ko%3D","line":14,"in_reply_to":"AAAAM3%2F%2F19w%3D","updated":"2013-01-03 20:01:40.000000000","message":"Done","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"}],"etc/nova/rootwrap.d/baremetal_compute_pxe.filters":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":7,"context_line":"dnsmasq: CommandFilter, /usr/sbin/dnsmasq, root"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"# nova/virt/baremetal/pxe.py: \u0027kill\u0027, \u0027-TERM\u0027, str(dnsmasq_pid)"},{"line_number":10,"context_line":"kill_dnsmasq: KillFilter, root, /usr/sbin/dnsmasq, -15, -TERM"},{"line_number":11,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAM3%2F%2F19k%3D","line":10,"updated":"2013-01-03 00:04:15.000000000","message":"The other files in this dir use - not _. Could you rename it to be consistent?","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"f2883107e7109de17b20988829b498d80400571f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"dnsmasq: CommandFilter, /usr/sbin/dnsmasq, root"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"# nova/virt/baremetal/pxe.py: \u0027kill\u0027, \u0027-TERM\u0027, str(dnsmasq_pid)"},{"line_number":10,"context_line":"kill_dnsmasq: KillFilter, root, /usr/sbin/dnsmasq, -15, -TERM"},{"line_number":11,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAM3%2F%2F0T0%3D","line":10,"in_reply_to":"AAAAM3%2F%2F0j4%3D","updated":"2013-01-03 22:45:43.000000000","message":"Huh?\nls etc/nova/rootwrap.d/\napi-metadata.filters  compute.filters  network.filters\n\nThere are only three filter files, and only one with two words, and thats hypenated not underscored.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":7,"context_line":"dnsmasq: CommandFilter, /usr/sbin/dnsmasq, root"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"# nova/virt/baremetal/pxe.py: \u0027kill\u0027, \u0027-TERM\u0027, str(dnsmasq_pid)"},{"line_number":10,"context_line":"kill_dnsmasq: KillFilter, root, /usr/sbin/dnsmasq, -15, -TERM"},{"line_number":11,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAM3%2F%2F1bI%3D","line":10,"in_reply_to":"AAAAM3%2F%2F19k%3D","updated":"2013-01-03 17:48:59.000000000","message":"i found the same thing to be true in baremetal_compute_ipmi.filters, so I will change both of those in a subsequent patch.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"unresolved":false,"context_lines":[{"line_number":7,"context_line":"dnsmasq: CommandFilter, /usr/sbin/dnsmasq, root"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"# nova/virt/baremetal/pxe.py: \u0027kill\u0027, \u0027-TERM\u0027, str(dnsmasq_pid)"},{"line_number":10,"context_line":"kill_dnsmasq: KillFilter, root, /usr/sbin/dnsmasq, -15, -TERM"},{"line_number":11,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAM3%2F%2F0j4%3D","line":10,"in_reply_to":"AAAAM3%2F%2F1bI%3D","updated":"2013-01-03 20:01:40.000000000","message":"Actually, there\u0027s plenty of other uses of \u0027_\u0027 in existing files, eg. network.filters and compute.filters.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"}],"nova/tests/baremetal/test_pxe.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"2d0955dec616f28e5500f6755e26ac2e753fef87","unresolved":false,"context_lines":[{"line_number":539,"context_line":"            self.context, self.node, self.instance)"},{"line_number":540,"context_line":"        self.mox.VerifyAll()"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_activate_node(self):"},{"line_number":543,"context_line":"        pass"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"    def test_deactivate_node(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F2Qs%3D","line":542,"updated":"2013-01-02 16:33:40.000000000","message":"doesn\u0027t make sense to add tests that don\u0027t do anything","commit_id":"103e8f1d7988dfe2958e3f90e9d825ff72207fa0"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"62353582398441d1f5ffc63df251ab722b6a8ae2","unresolved":false,"context_lines":[{"line_number":539,"context_line":"            self.context, self.node, self.instance)"},{"line_number":540,"context_line":"        self.mox.VerifyAll()"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_activate_node(self):"},{"line_number":543,"context_line":"        pass"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"    def test_deactivate_node(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F2MA%3D","line":542,"in_reply_to":"AAAAM3%2F%2F2Qs%3D","updated":"2013-01-02 17:07:55.000000000","message":"Done","commit_id":"103e8f1d7988dfe2958e3f90e9d825ff72207fa0"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":"Tests for baremetal pxe driver."},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import mox"},{"line_number":25,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F188%3D","line":22,"updated":"2013-01-03 00:04:15.000000000","message":"This should be one line - see.\nhttp://www.python.org/dev/peps/pep-0257/#one-line-docstrings\n\nMultiline docstrings can be split as you have (but personally, its fugly:))","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":"Tests for baremetal pxe driver."},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import mox"},{"line_number":25,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1a8%3D","line":22,"in_reply_to":"AAAAM3%2F%2F188%3D","updated":"2013-01-03 17:48:59.000000000","message":"the other tests within this dir all use multi-line format already. I can make a separate patch to change them all (rather than introduce a local inconsistency).","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"f2883107e7109de17b20988829b498d80400571f","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":"Tests for baremetal pxe driver."},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import mox"},{"line_number":25,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F0Ts%3D","line":22,"in_reply_to":"AAAAM3%2F%2F1a8%3D","updated":"2013-01-03 22:45:43.000000000","message":"Please do :)","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":64,"context_line":"class BareMetalPXETestCase(bm_db_base.BMDBTestCase):"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def setUp(self):"},{"line_number":67,"context_line":"        super(BareMetalPXETestCase, self).setUp()"},{"line_number":68,"context_line":"        self.flags(**COMMON_FLAGS)"},{"line_number":69,"context_line":"        self.flags(**BAREMETAL_FLAGS)"},{"line_number":70,"context_line":"        self.driver \u003d pxe.PXE()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1rE%3D","line":67,"updated":"2013-01-03 00:04:15.000000000","message":"I believe there is a config fixture that will restore stuff you automatically. If the base test doesn\u0027t use it, it probably should. [e.g. this comment may be noise].","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                {\u0027address\u0027: \u002733:33:33:33:33:33\u0027, \u0027datapath_id\u0027: \u00270x2\u0027,"},{"line_number":88,"context_line":"                    \u0027port_no\u0027: 2},"},{"line_number":89,"context_line":"            ]"},{"line_number":90,"context_line":"        self.addCleanup(fake_image.FakeImageService_reset)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _create_node(self):"},{"line_number":93,"context_line":"        self.node \u003d db.bm_node_create(self.context, self.node_info)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1rA%3D","line":90,"updated":"2013-01-03 00:04:15.000000000","message":"You should move this addCleanup higher up the method - run it immediately that it would be useful, so that if setUp breaks for some reason you don\u0027t leak the bad image.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                {\u0027address\u0027: \u002733:33:33:33:33:33\u0027, \u0027datapath_id\u0027: \u00270x2\u0027,"},{"line_number":88,"context_line":"                    \u0027port_no\u0027: 2},"},{"line_number":89,"context_line":"            ]"},{"line_number":90,"context_line":"        self.addCleanup(fake_image.FakeImageService_reset)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _create_node(self):"},{"line_number":93,"context_line":"        self.node \u003d db.bm_node_create(self.context, self.node_info)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1a4%3D","line":90,"in_reply_to":"AAAAM3%2F%2F1rA%3D","updated":"2013-01-03 17:48:59.000000000","message":"Done","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            )"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":115,"context_line":"    # Test functions defined outside class"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_random_alnum(self):"},{"line_number":118,"context_line":"        s \u003d pxe.random_alnum(10)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1q4%3D","line":115,"updated":"2013-01-03 00:04:15.000000000","message":"??? Not sure what that means.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        self.assertEqual(config[:14], \u0027default deploy\u0027)"},{"line_number":136,"context_line":"        # check deploy kernel"},{"line_number":137,"context_line":"        x \u003d config.index(\u0027kernel\u0027)"},{"line_number":138,"context_line":"        y \u003d config.index(\u0027\\n\u0027, x)"},{"line_number":139,"context_line":"        self.assertEqual(config[x:y], \u0027kernel ddd\u0027)"},{"line_number":140,"context_line":"        # check deploy ramdisk"},{"line_number":141,"context_line":"        x \u003d config.index(\u0027initrd\u003d\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1q0%3D","line":138,"updated":"2013-01-03 00:04:15.000000000","message":"This looke like it would be more simply written as\nself.assertThat(config, Contains(\u0027kernel ddd\\n\u0027)\n\netc. It would be 1/3 the length (if you drop the redundant comments).","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        self.assertEqual(config[:14], \u0027default deploy\u0027)"},{"line_number":136,"context_line":"        # check deploy kernel"},{"line_number":137,"context_line":"        x \u003d config.index(\u0027kernel\u0027)"},{"line_number":138,"context_line":"        y \u003d config.index(\u0027\\n\u0027, x)"},{"line_number":139,"context_line":"        self.assertEqual(config[x:y], \u0027kernel ddd\u0027)"},{"line_number":140,"context_line":"        # check deploy ramdisk"},{"line_number":141,"context_line":"        x \u003d config.index(\u0027initrd\u003d\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1Zo%3D","line":138,"in_reply_to":"AAAAM3%2F%2F1q0%3D","updated":"2013-01-03 17:48:59.000000000","message":"Done. I do need to check that certain strings are in certain locations in the file, though, so I decided to use:\n\n  self.assertTrue(\u0027string\u0027 in config[start:end])","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        self.assertEqual(sizes[0], 40960)"},{"line_number":263,"context_line":"        self.assertEqual(sizes[1], 1024)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def test_get_tftp_image_info(self):"},{"line_number":266,"context_line":"        # test missing all params"},{"line_number":267,"context_line":"        CONF.baremetal.deploy_kernel \u003d None"},{"line_number":268,"context_line":"        CONF.baremetal.deploy_ramdisk \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1cE%3D","line":265,"updated":"2013-01-03 00:04:15.000000000","message":"Its not clear what this test is really testing. Or rather , /why/ it wants particular values.\n\nE.g. down below, base is the uuid, things are under the uuid. Good tests IMNSHO document the why of these things, so that someone coming along later to change can have alarms go off. Not replacing API docs and docstrings...\n\nbut \u0027instance files get cached under the instance uuid, avoiding accidental reuse.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        self.assertEqual(sizes[0], 40960)"},{"line_number":263,"context_line":"        self.assertEqual(sizes[1], 1024)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def test_get_tftp_image_info(self):"},{"line_number":266,"context_line":"        # test missing all params"},{"line_number":267,"context_line":"        CONF.baremetal.deploy_kernel \u003d None"},{"line_number":268,"context_line":"        CONF.baremetal.deploy_ramdisk \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1ZU%3D","line":265,"in_reply_to":"AAAAM3%2F%2F1cE%3D","updated":"2013-01-03 17:48:59.000000000","message":"Done","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":291,"context_line":"                os.path.join(base, \u0027deploy_kernel\u0027))"},{"line_number":292,"context_line":"        self.assertEqual(res[\u0027deploy_ramdisk\u0027][0], \u0027dddd\u0027)"},{"line_number":293,"context_line":"        self.assertEqual(res[\u0027deploy_ramdisk\u0027][1],"},{"line_number":294,"context_line":"                os.path.join(base, \u0027deploy_ramdisk\u0027))"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        # test override defaults with instance values"},{"line_number":297,"context_line":"        extra_specs \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1qo%3D","line":294,"updated":"2013-01-03 00:04:15.000000000","message":"Would this be better as\nexpected \u003d {\u0027kernel\u0027:[\u0027aaaa\u0027, os.path.join(base, \u0027kernel\u0027)],\n    \u0027ramdisk\u0027:[\u0027bbbb\u0027, os.path.join(base, \u0027ramdisk\u0027)],\n....} ?","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":291,"context_line":"                os.path.join(base, \u0027deploy_kernel\u0027))"},{"line_number":292,"context_line":"        self.assertEqual(res[\u0027deploy_ramdisk\u0027][0], \u0027dddd\u0027)"},{"line_number":293,"context_line":"        self.assertEqual(res[\u0027deploy_ramdisk\u0027][1],"},{"line_number":294,"context_line":"                os.path.join(base, \u0027deploy_ramdisk\u0027))"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        # test override defaults with instance values"},{"line_number":297,"context_line":"        extra_specs \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1ZE%3D","line":294,"in_reply_to":"AAAAM3%2F%2F1qo%3D","updated":"2013-01-03 17:48:59.000000000","message":"Done","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        self.assertEqual(res[\u0027deploy_ramdisk\u0027][1],"},{"line_number":294,"context_line":"                os.path.join(base, \u0027deploy_ramdisk\u0027))"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        # test override defaults with instance values"},{"line_number":297,"context_line":"        extra_specs \u003d {"},{"line_number":298,"context_line":"                \u0027deploy_kernel_id\u0027: \u0027eeee\u0027,"},{"line_number":299,"context_line":"                \u0027deploy_ramdisk_id\u0027: \u0027ffff\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1cc%3D","line":296,"updated":"2013-01-03 00:04:15.000000000","message":"This is a little opaque. Can I suggest dropping the \u0027test ...\u0027 and instead say what should happen?\n\n\"Extra specs should override the defaults for deployment ramdisk and kernel\"\n\nWhich, IIUC, they shouldn\u0027t, as they execute in the privileged context and operators won\u0027t want end users running arbitrary code in privileged mode.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"f2883107e7109de17b20988829b498d80400571f","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        self.assertEqual(res[\u0027deploy_ramdisk\u0027][1],"},{"line_number":294,"context_line":"                os.path.join(base, \u0027deploy_ramdisk\u0027))"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        # test override defaults with instance values"},{"line_number":297,"context_line":"        extra_specs \u003d {"},{"line_number":298,"context_line":"                \u0027deploy_kernel_id\u0027: \u0027eeee\u0027,"},{"line_number":299,"context_line":"                \u0027deploy_ramdisk_id\u0027: \u0027ffff\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F0TI%3D","line":296,"in_reply_to":"AAAAM3%2F%2F1ZI%3D","updated":"2013-01-03 22:45:43.000000000","message":"If the tl;dr is \u0027a) general framework issue\u0027 and \u0027b) uses flavour not image already\u0027 then thats cool. It would be nice for it to be more obviously cool.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        self.assertEqual(res[\u0027deploy_ramdisk\u0027][1],"},{"line_number":294,"context_line":"                os.path.join(base, \u0027deploy_ramdisk\u0027))"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        # test override defaults with instance values"},{"line_number":297,"context_line":"        extra_specs \u003d {"},{"line_number":298,"context_line":"                \u0027deploy_kernel_id\u0027: \u0027eeee\u0027,"},{"line_number":299,"context_line":"                \u0027deploy_ramdisk_id\u0027: \u0027ffff\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1ZI%3D","line":296,"in_reply_to":"AAAAM3%2F%2F1cc%3D","updated":"2013-01-03 17:48:59.000000000","message":"IIUC, extra_specs is getting inherited from the image (technically \u0027instance_type_extra_specs\u0027 table) but has been glommed onto the instance object by the time driver.spawn() is called. This is fairly obtuse, but that\u0027s outside of the scope of the baremetal driver. I\u0027ll note it here though....\n\nFTR, a few months ago, I traced through all that code and ended up writing this patch for the original PXE driver, so that it could pull in this info from the image extra specs.\n\nhttps://review.openstack.org/#/c/16498/","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        self.assertEqual(res[\u0027deploy_ramdisk\u0027][0], \u0027ffff\u0027)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":307,"context_line":"    # Test private functions"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def test_collect_mac_addresses(self):"},{"line_number":310,"context_line":"        self._create_node()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1cQ%3D","line":307,"updated":"2013-01-03 00:04:15.000000000","message":"If these are meant to group different sorts of tests, can I suggest using different test classes?","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        self.assertEqual(res[\u0027deploy_ramdisk\u0027][0], \u0027ffff\u0027)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":307,"context_line":"    # Test private functions"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def test_collect_mac_addresses(self):"},{"line_number":310,"context_line":"        self._create_node()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1a0%3D","line":307,"in_reply_to":"AAAAM3%2F%2F1cQ%3D","updated":"2013-01-03 17:48:59.000000000","message":"Done","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8a11c8fab7d5b5bcd0de4fc9edb199f17e5c37b7","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        self.assertTrue(\u0027deployment_id\u003daaa\u0027 in config[start:end])"},{"line_number":131,"context_line":"        self.assertTrue(\u0027deployment_key\u003dbbb\u0027 in config[start:end])"},{"line_number":132,"context_line":"        self.assertTrue(\u0027iscsi_target_iqn\u003dccc\u0027 in config[start:end])"},{"line_number":133,"context_line":"        self.assertFalse(\u0027kernel fff\u0027 in config[start:end])"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # boot bits are in the boot section"},{"line_number":136,"context_line":"        start \u003d config.index(\u0027label boot\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F0Tk%3D","line":133,"updated":"2013-01-03 22:45:26.000000000","message":"Using \u0027assertThat(config[start:end], Contains(\u0027kernel ddd\u0027))\u0027 will give you much better error messages.","commit_id":"afb014a5730b45c6247725837e969f9bd46cdcad"}],"nova/tests/baremetal/test_utils.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"5a8418f3784117b17aa1c7bd1a25539e7e08fe5b","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import mox"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from nova import exception"},{"line_number":26,"context_line":"from nova import test"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from nova.virt.baremetal import utils"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2Fw2o%3D","line":26,"updated":"2013-01-07 07:23:41.000000000","message":"PEP 8 for these - should be one section for all local imports.","commit_id":"afb014a5730b45c6247725837e969f9bd46cdcad"}],"nova/virt/baremetal/net-dhcp.template":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Injected by Nova on instance boot"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# This file describes the network interfaces available on your system"},{"line_number":4,"context_line":"# and how to activate them. For more information, see interfaces(5)."}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAM3%2F%2F1rc%3D","line":1,"updated":"2013-01-03 00:04:15.000000000","message":"This only works on Ubuntu/Debian systems. Lets call it ubuntu-net-dhcp.template.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Injected by Nova on instance boot"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# This file describes the network interfaces available on your system"},{"line_number":4,"context_line":"# and how to activate them. For more information, see interfaces(5)."}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAM3%2F%2F1Y8%3D","line":1,"in_reply_to":"AAAAM3%2F%2F1rc%3D","updated":"2013-01-03 17:48:59.000000000","message":"Done","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"}],"nova/virt/baremetal/net-static.template":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"AAAAM3%2F%2F1rI%3D","side":"PARENT","line":15,"updated":"2013-01-03 00:04:15.000000000","message":"This file could be usefully renamed to ubuntu|debian-net-static.template too, given the specificness it has.","commit_id":"0673aef9ff336b29a744cea02103ff992b50cbc6"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"AAAAM3%2F%2F1Y4%3D","side":"PARENT","line":15,"in_reply_to":"AAAAM3%2F%2F1rI%3D","updated":"2013-01-03 17:48:59.000000000","message":"Done","commit_id":"0673aef9ff336b29a744cea02103ff992b50cbc6"}],"nova/virt/baremetal/pxe.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":"Class for PXE bare-metal nodes."},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import os"},{"line_number":24,"context_line":"import shutil"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1rQ%3D","line":21,"updated":"2013-01-03 00:04:15.000000000","message":"One-line again please.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        t \u003d __import__(\u0027Cheetah.Template\u0027, globals(), locals(),"},{"line_number":81,"context_line":"                       [\u0027Template\u0027], -1)"},{"line_number":82,"context_line":"        CHEETAH \u003d t.Template"},{"line_number":83,"context_line":"    return CHEETAH"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def random_alnum(count):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1cA%3D","line":83,"updated":"2013-01-03 00:04:15.000000000","message":"Why the indirection? Simpler to say\nfrom Cheetah.Templae import Template as CHEETAH","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"f2883107e7109de17b20988829b498d80400571f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        t \u003d __import__(\u0027Cheetah.Template\u0027, globals(), locals(),"},{"line_number":81,"context_line":"                       [\u0027Template\u0027], -1)"},{"line_number":82,"context_line":"        CHEETAH \u003d t.Template"},{"line_number":83,"context_line":"    return CHEETAH"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def random_alnum(count):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F0TA%3D","line":83,"in_reply_to":"AAAAM3%2F%2F1YQ%3D","updated":"2013-01-03 22:45:43.000000000","message":"What about dropping the function entirely? What value does it add?","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        t \u003d __import__(\u0027Cheetah.Template\u0027, globals(), locals(),"},{"line_number":81,"context_line":"                       [\u0027Template\u0027], -1)"},{"line_number":82,"context_line":"        CHEETAH \u003d t.Template"},{"line_number":83,"context_line":"    return CHEETAH"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def random_alnum(count):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1YQ%3D","line":83,"in_reply_to":"AAAAM3%2F%2F1cA%3D","updated":"2013-01-03 17:48:59.000000000","message":"Done.\n\nIndirection was copied from old code, which I presume was copied from nova/virt/netutils.py...","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    import random"},{"line_number":88,"context_line":"    import string"},{"line_number":89,"context_line":"    chars \u003d string.ascii_uppercase + string.digits"},{"line_number":90,"context_line":"    return \"\".join(random.choice(chars) for _ in range(count))"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def build_pxe_config(deployment_id, deployment_key, deployment_iscsi_iqn,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1b8%3D","line":90,"updated":"2013-01-03 00:04:15.000000000","message":"This seems like an oslo thing.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    import random"},{"line_number":88,"context_line":"    import string"},{"line_number":89,"context_line":"    chars \u003d string.ascii_uppercase + string.digits"},{"line_number":90,"context_line":"    return \"\".join(random.choice(chars) for _ in range(count))"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def build_pxe_config(deployment_id, deployment_key, deployment_iscsi_iqn,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1YI%3D","line":90,"in_reply_to":"AAAAM3%2F%2F1b8%3D","updated":"2013-01-03 17:48:59.000000000","message":"I\u0027ll move this to utils so it\u0027s easier to pull out later","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    given all the required parameters."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    The resulting file has both a \"deploy\" and \"boot\" label, which correspond"},{"line_number":102,"context_line":"    to the two phases of of booting. This may be extended later."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    \"\"\""},{"line_number":105,"context_line":"    LOG.debug(_(\"Building PXE config for deployment %s.\") % deployment_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1b4%3D","line":102,"updated":"2013-01-03 00:04:15.000000000","message":"\u0027of of\u0027 ?","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    given all the required parameters."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    The resulting file has both a \"deploy\" and \"boot\" label, which correspond"},{"line_number":102,"context_line":"    to the two phases of of booting. This may be extended later."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    \"\"\""},{"line_number":105,"context_line":"    LOG.debug(_(\"Building PXE config for deployment %s.\") % deployment_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1Y0%3D","line":102,"in_reply_to":"AAAAM3%2F%2F1b4%3D","updated":"2013-01-03 17:48:59.000000000","message":"Done","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"def get_deploy_aki_id(instance):"},{"line_number":166,"context_line":"    return instance.get(\u0027extra_specs\u0027, {}).\\"},{"line_number":167,"context_line":"                get(\u0027deploy_kernel_id\u0027, CONF.baremetal.deploy_kernel)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"def get_deploy_ari_id(instance):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1bw%3D","line":167,"updated":"2013-01-03 00:04:15.000000000","message":"This seems to have the security hole we taked about, should be pulling off of flavour, not instance specs.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"def get_deploy_aki_id(instance):"},{"line_number":166,"context_line":"    return instance.get(\u0027extra_specs\u0027, {}).\\"},{"line_number":167,"context_line":"                get(\u0027deploy_kernel_id\u0027, CONF.baremetal.deploy_kernel)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"def get_deploy_ari_id(instance):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1YM%3D","line":167,"in_reply_to":"AAAAM3%2F%2F1bw%3D","updated":"2013-01-03 17:48:59.000000000","message":"in testing, I can confirm this pulls from instance_type_extra_specs, as that\u0027s where devstack is writing the deploy_kernel/deploy_ramdisk values. Please open a bug against this to track whether it can _also_ pull from instance_metadata (I suspect it does not).","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                get(\u0027deploy_kernel_id\u0027, CONF.baremetal.deploy_kernel)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"def get_deploy_ari_id(instance):"},{"line_number":171,"context_line":"    return instance.get(\u0027extra_specs\u0027, {}).\\"},{"line_number":172,"context_line":"                get(\u0027deploy_ramdisk_id\u0027, CONF.baremetal.deploy_ramdisk)"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1bs%3D","line":170,"updated":"2013-01-03 00:04:15.000000000","message":"Ditto.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        (uuid, path) \u003d image_info[label]"},{"line_number":240,"context_line":"        if uuid is None:"},{"line_number":241,"context_line":"            raise exception.NovaException(_(\"Can not activate PXE bootloader, \""},{"line_number":242,"context_line":"                                            \"%s is undefined\") % label)"},{"line_number":243,"context_line":"        image_info[label][1] \u003d os.path.join(CONF.baremetal.tftp_root,"},{"line_number":244,"context_line":"                            instance[\u0027uuid\u0027], label)"},{"line_number":245,"context_line":"    return image_info"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1bk%3D","line":242,"updated":"2013-01-03 00:04:15.000000000","message":"It might be nice to gather all the missing keys, and then raise an error.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        (uuid, path) \u003d image_info[label]"},{"line_number":240,"context_line":"        if uuid is None:"},{"line_number":241,"context_line":"            raise exception.NovaException(_(\"Can not activate PXE bootloader, \""},{"line_number":242,"context_line":"                                            \"%s is undefined\") % label)"},{"line_number":243,"context_line":"        image_info[label][1] \u003d os.path.join(CONF.baremetal.tftp_root,"},{"line_number":244,"context_line":"                            instance[\u0027uuid\u0027], label)"},{"line_number":245,"context_line":"    return image_info"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1X4%3D","line":242,"in_reply_to":"AAAAM3%2F%2F1bk%3D","updated":"2013-01-03 17:48:59.000000000","message":"Done","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        At present, the AMI is cached and certain files are injected."},{"line_number":305,"context_line":"        In a future revision, this functionality will be replaced by a more"},{"line_number":306,"context_line":"        scalable approach: the deployment ramdisk will fetch from Glance"},{"line_number":307,"context_line":"        directly, and write its own last-mile configuration."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        \"\"\""},{"line_number":310,"context_line":"        fileutils.ensure_tree(get_image_dir_path(instance))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1bg%3D","line":307,"updated":"2013-01-03 00:04:15.000000000","message":"Please too note that this is Debian/Ubuntu specific.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        At present, the AMI is cached and certain files are injected."},{"line_number":305,"context_line":"        In a future revision, this functionality will be replaced by a more"},{"line_number":306,"context_line":"        scalable approach: the deployment ramdisk will fetch from Glance"},{"line_number":307,"context_line":"        directly, and write its own last-mile configuration."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        \"\"\""},{"line_number":310,"context_line":"        fileutils.ensure_tree(get_image_dir_path(instance))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1Xw%3D","line":307,"in_reply_to":"AAAAM3%2F%2F1bg%3D","updated":"2013-01-03 17:48:59.000000000","message":"Done","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"8b8e82067bb77e0697d710be288b0859178ebdac","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                os.path.join(CONF.baremetal.tftp_root, instance[\u0027uuid\u0027]))"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def activate_node(self, context, node, instance):"},{"line_number":459,"context_line":"        pass"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    def deactivate_node(self, context, node, instance):"},{"line_number":462,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1bY%3D","line":459,"updated":"2013-01-03 00:04:15.000000000","message":"Should these call out to power manager the node off/on ?","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"f2883107e7109de17b20988829b498d80400571f","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                os.path.join(CONF.baremetal.tftp_root, instance[\u0027uuid\u0027]))"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def activate_node(self, context, node, instance):"},{"line_number":459,"context_line":"        pass"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    def deactivate_node(self, context, node, instance):"},{"line_number":462,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F0Sw%3D","line":459,"in_reply_to":"AAAAM3%2F%2F0jw%3D","updated":"2013-01-03 22:45:43.000000000","message":"Sounds like the activate_node API should just be deleted?","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"unresolved":false,"context_lines":[{"line_number":456,"context_line":"                os.path.join(CONF.baremetal.tftp_root, instance[\u0027uuid\u0027]))"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def activate_node(self, context, node, instance):"},{"line_number":459,"context_line":"        pass"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    def deactivate_node(self, context, node, instance):"},{"line_number":462,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F0jw%3D","line":459,"in_reply_to":"AAAAM3%2F%2F1Xk%3D","updated":"2013-01-03 20:01:40.000000000","message":"I looked at the Tilera code for activate_node and it appears to all be things which should be handled by cloud-init. For example, tilera.activate_node() connects over ssh and configures iptables, which is not an approach that I want to encourage.\n\nThus, I\u0027ve decided not to add the self.driver.activate_node() call here after all.","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a1e94e96738cf2c8e18c47f4c6193ba5f50be1a4","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                os.path.join(CONF.baremetal.tftp_root, instance[\u0027uuid\u0027]))"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def activate_node(self, context, node, instance):"},{"line_number":459,"context_line":"        pass"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    def deactivate_node(self, context, node, instance):"},{"line_number":462,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2F1Xk%3D","line":459,"in_reply_to":"AAAAM3%2F%2F1bY%3D","updated":"2013-01-03 17:48:59.000000000","message":"No, these are separate from the PowerManager activate/deactivate_node methods. They were present as stubs in the original PXE driver, and one of them is implemented in the Tilera driver.\n\nI believe their purpose is to provide a hook for drivers which need to perform an additional step after a node is powered on. The base methods need to be overwritten here so they don\u0027t raise NotImplementedError when called from driver.spawn and driver.destroy.\n\nActually, I left this out of my driver.py rewrite... I need to go add it back in now :(","commit_id":"0f20c832016c99b5f23f6257c62585236b826a9b"}]}
