)]}'
{"nova/compute/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0be4f95127325a6262187aed96f01d8e2beac201","unresolved":false,"context_lines":[{"line_number":1536,"context_line":"            # hyphenated format (aes-xts-plain64). The algorithm needs"},{"line_number":1537,"context_line":"            # to be parsed out to pass to the key manager (aes)."},{"line_number":1538,"context_line":"            cipher \u003d CONF.ephemeral_storage_encryption.cipher"},{"line_number":1539,"context_line":"            algorithm \u003d cipher.split(\u0027-\u0027)[0] if cipher else None"},{"line_number":1540,"context_line":"            instance.ephemeral_key_uuid \u003d self.key_manager.create_key("},{"line_number":1541,"context_line":"                context,"},{"line_number":1542,"context_line":"                algorithm\u003dalgorithm,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_44af00e3","line":1539,"range":{"start_line":1539,"start_character":24,"end_line":1539,"end_character":44},"updated":"2017-04-25 13:32:30.000000000","message":"Are we sure the first entry in the list is going to be the algorithm? It\u0027s not clear to me from the help text on the CONF.ephemeral_storage_encryption.cipher config option. Maybe we should update the help text a bit to make that clear that the first item needs to be the algorithm?","commit_id":"8c510496d98ac14be77cbebb7fef1b6fcaebfed9"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"b4e6babe5c7d3e4940352755d4ea015e9e4bea47","unresolved":false,"context_lines":[{"line_number":1536,"context_line":"            # hyphenated format (aes-xts-plain64). The algorithm needs"},{"line_number":1537,"context_line":"            # to be parsed out to pass to the key manager (aes)."},{"line_number":1538,"context_line":"            cipher \u003d CONF.ephemeral_storage_encryption.cipher"},{"line_number":1539,"context_line":"            algorithm \u003d cipher.split(\u0027-\u0027)[0] if cipher else None"},{"line_number":1540,"context_line":"            instance.ephemeral_key_uuid \u003d self.key_manager.create_key("},{"line_number":1541,"context_line":"                context,"},{"line_number":1542,"context_line":"                algorithm\u003dalgorithm,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_d202ad09","line":1539,"range":{"start_line":1539,"start_character":24,"end_line":1539,"end_character":44},"in_reply_to":"5ff73747_44af00e3","updated":"2017-04-25 15:54:48.000000000","message":"Yes, please see the dm-crypt documentation for the cipher formats: https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt#mapping-table-for-crypt-target\nI am thinking about how to update the help text.  Perhaps it can be clarified that it\u0027s expected to be in a \"cipher-chainmode-ivmode format?","commit_id":"8c510496d98ac14be77cbebb7fef1b6fcaebfed9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0be4f95127325a6262187aed96f01d8e2beac201","unresolved":false,"context_lines":[{"line_number":1537,"context_line":"            # to be parsed out to pass to the key manager (aes)."},{"line_number":1538,"context_line":"            cipher \u003d CONF.ephemeral_storage_encryption.cipher"},{"line_number":1539,"context_line":"            algorithm \u003d cipher.split(\u0027-\u0027)[0] if cipher else None"},{"line_number":1540,"context_line":"            instance.ephemeral_key_uuid \u003d self.key_manager.create_key("},{"line_number":1541,"context_line":"                context,"},{"line_number":1542,"context_line":"                algorithm\u003dalgorithm,"},{"line_number":1543,"context_line":"                length\u003dCONF.ephemeral_storage_encryption.key_size)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_847068a7","line":1540,"updated":"2017-04-25 13:32:30.000000000","message":"Comparing to the previous defaults:\n\nhttps://review.openstack.org/#/c/309614/4/nova/keymgr/key_mgr.py@a34\n\nThe algorithm used to be \u0027AES\u0027 but this would now be \u0027aes\u0027 by default since CONF.ephemeral_storage_encryption.cipher defaults to \u0027aes-xts-plain64\u0027. Will Castellan handle those the same way?","commit_id":"8c510496d98ac14be77cbebb7fef1b6fcaebfed9"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"b4e6babe5c7d3e4940352755d4ea015e9e4bea47","unresolved":false,"context_lines":[{"line_number":1537,"context_line":"            # to be parsed out to pass to the key manager (aes)."},{"line_number":1538,"context_line":"            cipher \u003d CONF.ephemeral_storage_encryption.cipher"},{"line_number":1539,"context_line":"            algorithm \u003d cipher.split(\u0027-\u0027)[0] if cipher else None"},{"line_number":1540,"context_line":"            instance.ephemeral_key_uuid \u003d self.key_manager.create_key("},{"line_number":1541,"context_line":"                context,"},{"line_number":1542,"context_line":"                algorithm\u003dalgorithm,"},{"line_number":1543,"context_line":"                length\u003dCONF.ephemeral_storage_encryption.key_size)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_371d430f","line":1540,"in_reply_to":"5ff73747_847068a7","updated":"2017-04-25 15:54:48.000000000","message":"Yes, the key managers handle algorithms in a case-insensitive manner","commit_id":"8c510496d98ac14be77cbebb7fef1b6fcaebfed9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0be4f95127325a6262187aed96f01d8e2beac201","unresolved":false,"context_lines":[{"line_number":1540,"context_line":"            instance.ephemeral_key_uuid \u003d self.key_manager.create_key("},{"line_number":1541,"context_line":"                context,"},{"line_number":1542,"context_line":"                algorithm\u003dalgorithm,"},{"line_number":1543,"context_line":"                length\u003dCONF.ephemeral_storage_encryption.key_size)"},{"line_number":1544,"context_line":"        else:"},{"line_number":1545,"context_line":"            instance.ephemeral_key_uuid \u003d None"},{"line_number":1546,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_449820bf","line":1543,"range":{"start_line":1543,"start_character":16,"end_line":1543,"end_character":65},"updated":"2017-04-25 13:32:30.000000000","message":"This used to default to 256 but now defaults to 512 because of the config option. Just a note, but I assume that\u0027s fine.","commit_id":"8c510496d98ac14be77cbebb7fef1b6fcaebfed9"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"b4e6babe5c7d3e4940352755d4ea015e9e4bea47","unresolved":false,"context_lines":[{"line_number":1540,"context_line":"            instance.ephemeral_key_uuid \u003d self.key_manager.create_key("},{"line_number":1541,"context_line":"                context,"},{"line_number":1542,"context_line":"                algorithm\u003dalgorithm,"},{"line_number":1543,"context_line":"                length\u003dCONF.ephemeral_storage_encryption.key_size)"},{"line_number":1544,"context_line":"        else:"},{"line_number":1545,"context_line":"            instance.ephemeral_key_uuid \u003d None"},{"line_number":1546,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_1269358a","line":1543,"range":{"start_line":1543,"start_character":16,"end_line":1543,"end_character":65},"in_reply_to":"5ff73747_449820bf","updated":"2017-04-25 15:54:48.000000000","message":"Just to clarify, the key_size config option was always passed in as the length parameter.  It didn\u0027t rely on the key manager\u0027s default value.","commit_id":"8c510496d98ac14be77cbebb7fef1b6fcaebfed9"}],"nova/conf/ephemeral_storage.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34887d4c80412e99d1e595edc63778aa43bc5ad2","unresolved":false,"context_lines":[{"line_number":32,"context_line":"Cipher-mode string to be used."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"The cipher and mode to be used to encrypt ephemeral storage. The set of"},{"line_number":35,"context_line":"cipher-mode combinations available depends on kernel support. According"},{"line_number":36,"context_line":"to the dm-crypt documentation, the cipher is expected to be in the format:"},{"line_number":37,"context_line":"\"\u003ccipher\u003e-\u003cchainmode\u003e-\u003civmode\u003e\"."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Possible values:"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_7b902d4f","line":37,"range":{"start_line":35,"start_character":62,"end_line":37,"end_character":32},"updated":"2017-04-26 15:15:39.000000000","message":"Thanks this looks good.","commit_id":"dba8d475970dc809ec5b5c5fcbd689ccc17b685c"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"9755aa3394f75540522b2e7e61670e8c8a726134","unresolved":false,"context_lines":[{"line_number":8250,"context_line":"                                self.context,"},{"line_number":8251,"context_line":"                                instance,"},{"line_number":8252,"context_line":"                                self.fake_image,"},{"line_number":8253,"context_line":"                                1,"},{"line_number":8254,"context_line":"                                security_groups\u003dobjects.SecurityGroupList(),"},{"line_number":8255,"context_line":"                                instance_type\u003dinst_type,"},{"line_number":8256,"context_line":"                                num_instances\u003dnum_instances,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ffa3b31_16aa54d1","line":8253,"range":{"start_line":8253,"start_character":32,"end_line":8253,"end_character":33},"updated":"2017-04-17 19:50:24.000000000","message":"nit: it\u0027s not obvious what this 1 is for -- it might be better to name a variable and set it to 1, and then pass in the variable instead","commit_id":"8c510496d98ac14be77cbebb7fef1b6fcaebfed9"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"b4e6babe5c7d3e4940352755d4ea015e9e4bea47","unresolved":false,"context_lines":[{"line_number":8250,"context_line":"                                self.context,"},{"line_number":8251,"context_line":"                                instance,"},{"line_number":8252,"context_line":"                                self.fake_image,"},{"line_number":8253,"context_line":"                                1,"},{"line_number":8254,"context_line":"                                security_groups\u003dobjects.SecurityGroupList(),"},{"line_number":8255,"context_line":"                                instance_type\u003dinst_type,"},{"line_number":8256,"context_line":"                                num_instances\u003dnum_instances,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_77862bde","line":8253,"range":{"start_line":8253,"start_character":32,"end_line":8253,"end_character":33},"in_reply_to":"7ffa3b31_16aa54d1","updated":"2017-04-25 15:54:48.000000000","message":"This was how it was specified in the test above this one, but I will make the update if any more code changes are needed","commit_id":"8c510496d98ac14be77cbebb7fef1b6fcaebfed9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34887d4c80412e99d1e595edc63778aa43bc5ad2","unresolved":false,"context_lines":[{"line_number":8287,"context_line":"        instance \u003d objects.Instance()"},{"line_number":8288,"context_line":"        instance.update(base_options)"},{"line_number":8289,"context_line":"        inst_type \u003d flavors.get_flavor_by_name(\"m1.tiny\")"},{"line_number":8290,"context_line":"        index \u003d 1"},{"line_number":8291,"context_line":"        instance \u003d self.compute_api._populate_instance_for_create("},{"line_number":8292,"context_line":"                                self.context,"},{"line_number":8293,"context_line":"                                instance,"},{"line_number":8294,"context_line":"                                self.fake_image,"},{"line_number":8295,"context_line":"                                index,"},{"line_number":8296,"context_line":"                                security_groups\u003dobjects.SecurityGroupList(),"},{"line_number":8297,"context_line":"                                instance_type\u003dinst_type,"},{"line_number":8298,"context_line":"                                num_instances\u003dnum_instances,"},{"line_number":8299,"context_line":"                                shutdown_terminate\u003dFalse)"},{"line_number":8300,"context_line":"        self.assertEqual(str(base_options[\u0027image_ref\u0027]),"},{"line_number":8301,"context_line":"                         instance[\u0027system_metadata\u0027][\u0027image_base_image_ref\u0027])"},{"line_number":8302,"context_line":"        self.assertEqual(vm_states.BUILDING, instance[\u0027vm_state\u0027])"},{"line_number":8303,"context_line":"        self.assertEqual(task_states.SCHEDULING, instance[\u0027task_state\u0027])"},{"line_number":8304,"context_line":"        self.assertEqual(1, instance[\u0027launch_index\u0027])"},{"line_number":8305,"context_line":"        self.assertEqual(base_options[\u0027display_name\u0027],"},{"line_number":8306,"context_line":"                         instance[\u0027display_name\u0027])"},{"line_number":8307,"context_line":"        self.assertIsNotNone(instance.get(\u0027uuid\u0027))"},{"line_number":8308,"context_line":"        self.assertEqual([], instance.security_groups.objects)"},{"line_number":8309,"context_line":"        self.assertIsNone(instance.ephemeral_key_uuid)"},{"line_number":8310,"context_line":""},{"line_number":8311,"context_line":"    def test_populate_instance_for_create_encrypted(self, num_instances\u003d1):"},{"line_number":8312,"context_line":"        CONF.set_override(\u0027enabled\u0027, True,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_5bdb311a","line":8309,"range":{"start_line":8290,"start_character":8,"end_line":8309,"end_character":54},"updated":"2017-04-26 15:15:39.000000000","message":"I would have just left this test as-is except for the assertion you added at the bottom like in patch set 1. It looks like this was all changed just for the index nit, which I would have personally left out of this existing test. If you want to write the new test that way for the index thing that\u0027s fine, but we don\u0027t need to change this much of an existing test for that.","commit_id":"dba8d475970dc809ec5b5c5fcbd689ccc17b685c"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"1492731f489be7880908d3552bcf61069d029950","unresolved":false,"context_lines":[{"line_number":8287,"context_line":"        instance \u003d objects.Instance()"},{"line_number":8288,"context_line":"        instance.update(base_options)"},{"line_number":8289,"context_line":"        inst_type \u003d flavors.get_flavor_by_name(\"m1.tiny\")"},{"line_number":8290,"context_line":"        index \u003d 1"},{"line_number":8291,"context_line":"        instance \u003d self.compute_api._populate_instance_for_create("},{"line_number":8292,"context_line":"                                self.context,"},{"line_number":8293,"context_line":"                                instance,"},{"line_number":8294,"context_line":"                                self.fake_image,"},{"line_number":8295,"context_line":"                                index,"},{"line_number":8296,"context_line":"                                security_groups\u003dobjects.SecurityGroupList(),"},{"line_number":8297,"context_line":"                                instance_type\u003dinst_type,"},{"line_number":8298,"context_line":"                                num_instances\u003dnum_instances,"},{"line_number":8299,"context_line":"                                shutdown_terminate\u003dFalse)"},{"line_number":8300,"context_line":"        self.assertEqual(str(base_options[\u0027image_ref\u0027]),"},{"line_number":8301,"context_line":"                         instance[\u0027system_metadata\u0027][\u0027image_base_image_ref\u0027])"},{"line_number":8302,"context_line":"        self.assertEqual(vm_states.BUILDING, instance[\u0027vm_state\u0027])"},{"line_number":8303,"context_line":"        self.assertEqual(task_states.SCHEDULING, instance[\u0027task_state\u0027])"},{"line_number":8304,"context_line":"        self.assertEqual(1, instance[\u0027launch_index\u0027])"},{"line_number":8305,"context_line":"        self.assertEqual(base_options[\u0027display_name\u0027],"},{"line_number":8306,"context_line":"                         instance[\u0027display_name\u0027])"},{"line_number":8307,"context_line":"        self.assertIsNotNone(instance.get(\u0027uuid\u0027))"},{"line_number":8308,"context_line":"        self.assertEqual([], instance.security_groups.objects)"},{"line_number":8309,"context_line":"        self.assertIsNone(instance.ephemeral_key_uuid)"},{"line_number":8310,"context_line":""},{"line_number":8311,"context_line":"    def test_populate_instance_for_create_encrypted(self, num_instances\u003d1):"},{"line_number":8312,"context_line":"        CONF.set_override(\u0027enabled\u0027, True,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_1bc80920","line":8309,"range":{"start_line":8290,"start_character":8,"end_line":8309,"end_character":54},"in_reply_to":"5ff73747_5bdb311a","updated":"2017-04-26 15:17:20.000000000","message":"Oh sorry, I got the two tests confused when I was making the edit.  I will fix","commit_id":"dba8d475970dc809ec5b5c5fcbd689ccc17b685c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34887d4c80412e99d1e595edc63778aa43bc5ad2","unresolved":false,"context_lines":[{"line_number":8329,"context_line":"                                self.context,"},{"line_number":8330,"context_line":"                                instance,"},{"line_number":8331,"context_line":"                                self.fake_image,"},{"line_number":8332,"context_line":"                                1,"},{"line_number":8333,"context_line":"                                security_groups\u003dobjects.SecurityGroupList(),"},{"line_number":8334,"context_line":"                                instance_type\u003dinst_type,"},{"line_number":8335,"context_line":"                                num_instances\u003dnum_instances,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_7b3a6d34","line":8332,"range":{"start_line":8332,"start_character":32,"end_line":8332,"end_character":34},"updated":"2017-04-26 15:15:39.000000000","message":"Besides, your new test doesn\u0027t fix the nit anyway.","commit_id":"dba8d475970dc809ec5b5c5fcbd689ccc17b685c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b16ec201048a63a0e5ce85778f54f3ceb6725ec6","unresolved":false,"context_lines":[{"line_number":8334,"context_line":"                                instance_type\u003dinst_type,"},{"line_number":8335,"context_line":"                                num_instances\u003dnum_instances,"},{"line_number":8336,"context_line":"                                shutdown_terminate\u003dFalse)"},{"line_number":8337,"context_line":"        self.assertEqual(str(base_options[\u0027image_ref\u0027]),"},{"line_number":8338,"context_line":"                         instance[\u0027system_metadata\u0027][\u0027image_base_image_ref\u0027])"},{"line_number":8339,"context_line":"        self.assertEqual(vm_states.BUILDING, instance[\u0027vm_state\u0027])"},{"line_number":8340,"context_line":"        self.assertEqual(task_states.SCHEDULING, instance[\u0027task_state\u0027])"},{"line_number":8341,"context_line":"        self.assertEqual(1, instance[\u0027launch_index\u0027])"},{"line_number":8342,"context_line":"        self.assertEqual(base_options[\u0027display_name\u0027],"},{"line_number":8343,"context_line":"                         instance[\u0027display_name\u0027])"},{"line_number":8344,"context_line":"        self.assertIsNotNone(instance.get(\u0027uuid\u0027))"},{"line_number":8345,"context_line":"        self.assertEqual([], instance.security_groups.objects)"},{"line_number":8346,"context_line":"        self.assertIsNotNone(instance.ephemeral_key_uuid)"},{"line_number":8347,"context_line":""},{"line_number":8348,"context_line":"    def test_default_hostname_generator(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_9b56595c","line":8345,"range":{"start_line":8337,"start_character":0,"end_line":8345,"end_character":62},"updated":"2017-04-26 15:16:38.000000000","message":"Just omit all of this, it\u0027s duplicated from the test above and isn\u0027t necessary for what you\u0027re asserting in this test.","commit_id":"dba8d475970dc809ec5b5c5fcbd689ccc17b685c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e881313552b1503ca946de3ad3628dde288abb72","unresolved":false,"context_lines":[{"line_number":8308,"context_line":"        self.assertIsNone(instance.ephemeral_key_uuid)"},{"line_number":8309,"context_line":""},{"line_number":8310,"context_line":"    def test_populate_instance_for_create_encrypted(self, num_instances\u003d1):"},{"line_number":8311,"context_line":"        CONF.set_override(\u0027enabled\u0027, True,"},{"line_number":8312,"context_line":"                          group\u003d\u0027ephemeral_storage_encryption\u0027,"},{"line_number":8313,"context_line":"                          enforce_type\u003dTrue)"},{"line_number":8314,"context_line":"        CONF.set_override(\u0027api_class\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ff73747_f0af85e0","line":8311,"range":{"start_line":8311,"start_character":8,"end_line":8311,"end_character":25},"updated":"2017-04-27 20:53:32.000000000","message":"We normally use self.flags but this works the same so it\u0027s OK.","commit_id":"1d3acad111c5106592b0921628480fcf41e0fb4c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e881313552b1503ca946de3ad3628dde288abb72","unresolved":false,"context_lines":[{"line_number":8310,"context_line":"    def test_populate_instance_for_create_encrypted(self, num_instances\u003d1):"},{"line_number":8311,"context_line":"        CONF.set_override(\u0027enabled\u0027, True,"},{"line_number":8312,"context_line":"                          group\u003d\u0027ephemeral_storage_encryption\u0027,"},{"line_number":8313,"context_line":"                          enforce_type\u003dTrue)"},{"line_number":8314,"context_line":"        CONF.set_override(\u0027api_class\u0027,"},{"line_number":8315,"context_line":"                          \u0027castellan.tests.unit.key_manager.mock_key_manager.\u0027"},{"line_number":8316,"context_line":"                          \u0027MockKeyManager\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ff73747_7085b559","line":8313,"range":{"start_line":8313,"start_character":26,"end_line":8313,"end_character":43},"updated":"2017-04-27 20:53:32.000000000","message":"This is actually the default now so not really necessary to specify it here, but I suppose if we backport this change it\u0027s not bad to have it.","commit_id":"1d3acad111c5106592b0921628480fcf41e0fb4c"}]}
