)]}'
{"nova/cmd/baremetal_deploy_helper.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4e2e36e3bb8605e346803aa2edecc1ac934b2300","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            iqn \u003d q[\u0027n\u0027]"},{"line_number":326,"context_line":"            lun \u003d q.get(\u0027l\u0027, \u00271\u0027)"},{"line_number":327,"context_line":"            err_msg \u003d q.get(\u0027e\u0027)"},{"line_number":328,"context_line":"            preserve_ephemeral \u003d q.get(\u0027v\u0027, False)"},{"line_number":329,"context_line":"        except KeyError as e:"},{"line_number":330,"context_line":"            start_response(\u0027400 Bad Request\u0027, [(\u0027Content-type\u0027, \u0027text/plain\u0027)])"},{"line_number":331,"context_line":"            return \"parameter \u0027%s\u0027 is not defined\" % e"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BFFk%3D","line":328,"updated":"2013-12-02 19:17:05.000000000","message":"This should come from the compute side, not the node because we know from the API, and also we can\u0027t trust it to ask for something like this.","commit_id":"1dca15e379940e34f23d140f56af94474a1f2e1d"}],"nova/compute/manager.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4e2e36e3bb8605e346803aa2edecc1ac934b2300","unresolved":false,"context_lines":[{"line_number":2194,"context_line":"                self.driver.destroy(context, instance,"},{"line_number":2195,"context_line":"                                    network_info,"},{"line_number":2196,"context_line":"                                    block_device_info\u003dblock_device_info,"},{"line_number":2197,"context_line":"                                    preserve_ephemeral\u003dpreserve_ephemeral)"},{"line_number":2198,"context_line":""},{"line_number":2199,"context_line":"            instance \u003d self._instance_update("},{"line_number":2200,"context_line":"                    context, instance[\u0027uuid\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BFFM%3D","line":2197,"updated":"2013-12-02 19:17:05.000000000","message":"I think we have to refactor this block into one call to preserve the bm node against race conditions.","commit_id":"1dca15e379940e34f23d140f56af94474a1f2e1d"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"b0bb7a1d0c2a24602676e53e839fc237f6627a83","unresolved":false,"context_lines":[{"line_number":2209,"context_line":"            instance \u003d self._instance_update("},{"line_number":2210,"context_line":"                    context, instance[\u0027uuid\u0027],"},{"line_number":2211,"context_line":"                    task_state\u003dtask_states.REBUILD_BLOCK_DEVICE_MAPPING,"},{"line_number":2212,"context_line":"                    expected_task_state\u003dtask_states.REBUILDING)"},{"line_number":2213,"context_line":""},{"line_number":2214,"context_line":"            cur_block_device_info \u003d \\"},{"line_number":2215,"context_line":"                self._get_instance_volume_block_device_info("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F92Pk%3D","line":2212,"updated":"2013-12-05 09:44:54.000000000","message":"So I think these instance update events probably need to be triggered by the driver (perhaps as helper methods on Driver, or we could pass them in as partials or something.","commit_id":"9ae7e66afd45f90dee94c5c87372f596b1e3313a"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"b0bb7a1d0c2a24602676e53e839fc237f6627a83","unresolved":false,"context_lines":[{"line_number":2215,"context_line":"                self._get_instance_volume_block_device_info("},{"line_number":2216,"context_line":"                context, instance)"},{"line_number":2217,"context_line":"            new_block_device_info \u003d self._prep_block_device("},{"line_number":2218,"context_line":"                    context, instance, bdms)"},{"line_number":2219,"context_line":""},{"line_number":2220,"context_line":"            files \u003d self._decode_files(injected_files)"},{"line_number":2221,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F92PU%3D","line":2218,"updated":"2013-12-05 09:44:54.000000000","message":"Teh block device stuff definitely still needs to be in the original order - passing tests is just a sign of weak coverage to me: consider a cinder volume and a running VM. The driver has to sequence power off, remap, power on properly or we have two VMs talking at once.","commit_id":"9ae7e66afd45f90dee94c5c87372f596b1e3313a"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"e72fe37e8966d2951f39cda72f16d7bdf7b84a66","unresolved":false,"context_lines":[{"line_number":2208,"context_line":"                                context, obj_base.obj_to_primitive(instance))"},{"line_number":2209,"context_line":""},{"line_number":2210,"context_line":"            # NOTE(sirp): this detach is necessary b/c we will reattach the"},{"line_number":2211,"context_line":"            # volumes in _prep_block_devices below."},{"line_number":2212,"context_line":"            for bdm in self._get_volume_bdms(bdms):"},{"line_number":2213,"context_line":"                self.volume_api.detach(context, bdm[\u0027volume_id\u0027])"},{"line_number":2214,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F85gs%3D","side":"PARENT","line":2211,"updated":"2013-12-19 02:08:20.000000000","message":"why delete the comment?","commit_id":"2efc5bca2175117b7adc7794d0c89f23d24d0610"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"e72fe37e8966d2951f39cda72f16d7bdf7b84a66","unresolved":false,"context_lines":[{"line_number":2237,"context_line":"                              network_info\u003dnetwork_info,"},{"line_number":2238,"context_line":"                              block_device_info\u003dblock_device_info)"},{"line_number":2239,"context_line":""},{"line_number":2240,"context_line":"            instance.power_state \u003d self._get_power_state(context, instance)"},{"line_number":2241,"context_line":"            instance.vm_state \u003d vm_states.ACTIVE"},{"line_number":2242,"context_line":"            instance.task_state \u003d None"},{"line_number":2243,"context_line":"            instance.launched_at \u003d timeutils.utcnow()"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F85cY%3D","side":"PARENT","line":2240,"updated":"2013-12-19 02:08:20.000000000","message":"In other driver functions, the state logic is done in the manager and not the driver.","commit_id":"2efc5bca2175117b7adc7794d0c89f23d24d0610"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"e72fe37e8966d2951f39cda72f16d7bdf7b84a66","unresolved":false,"context_lines":[{"line_number":2254,"context_line":"                admin_password\u003dnew_pass,"},{"line_number":2255,"context_line":"                bdms\u003dbdms,"},{"line_number":2256,"context_line":"                detach_block_devices\u003ddetach_block_devices,"},{"line_number":2257,"context_line":"                attach_block_devices\u003dself._prep_block_device,"},{"line_number":2258,"context_line":"                instance_power_state\u003dself._get_power_state,"},{"line_number":2259,"context_line":"                block_device_info\u003dblock_device_info,"},{"line_number":2260,"context_line":"                network_info\u003dnetwork_info)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F85ao%3D","line":2257,"updated":"2013-12-19 02:08:20.000000000","message":"I\u0027m not too keen on passing private functions around","commit_id":"2fe6379a04b6fd5a351223d56086a427847210f5"}],"nova/virt/baremetal/pxe.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4e2e36e3bb8605e346803aa2edecc1ac934b2300","unresolved":false,"context_lines":[{"line_number":98,"context_line":"def build_pxe_config(deployment_id, deployment_key, deployment_iscsi_iqn,"},{"line_number":99,"context_line":"                      deployment_aki_path, deployment_ari_path,"},{"line_number":100,"context_line":"                      aki_path, ari_path, network_info,"},{"line_number":101,"context_line":"                      preserve_ephemeral\u003dFalse):"},{"line_number":102,"context_line":"    \"\"\"Build the PXE config file for a node"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    This method builds the PXE boot configuration file for a node,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BFE0%3D","line":101,"updated":"2013-12-02 19:17:05.000000000","message":"Not needed - use the table.","commit_id":"1dca15e379940e34f23d140f56af94474a1f2e1d"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4e2e36e3bb8605e346803aa2edecc1ac934b2300","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            \u0027ari_path\u0027: ari_path,"},{"line_number":125,"context_line":"            \u0027pxe_append_params\u0027: CONF.baremetal.pxe_append_params,"},{"line_number":126,"context_line":"            \u0027pxe_network_config\u0027: network_config,"},{"line_number":127,"context_line":"            \u0027preserve_ephemeral\u0027: preserve_ephemeral"},{"line_number":128,"context_line":"            }"},{"line_number":129,"context_line":"    tmpl_path, tmpl_file \u003d os.path.split(CONF.baremetal.pxe_config_template)"},{"line_number":130,"context_line":"    env \u003d jinja2.Environment(loader\u003djinja2.FileSystemLoader(tmpl_path))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BFEw%3D","line":127,"updated":"2013-12-02 19:17:05.000000000","message":"Ditto.","commit_id":"1dca15e379940e34f23d140f56af94474a1f2e1d"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4e2e36e3bb8605e346803aa2edecc1ac934b2300","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        bm_utils.rmtree_without_raise(get_image_dir_path(instance))"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    def activate_bootloader(self, context, node, instance, network_info,"},{"line_number":359,"context_line":"                            preserve_ephemeral\u003dFalse):"},{"line_number":360,"context_line":"        \"\"\"Configure PXE boot loader for an instance"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        Kernel and ramdisk images are downloaded by cache_tftp_images,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BFEo%3D","line":359,"updated":"2013-12-02 19:17:05.000000000","message":"Ditto.","commit_id":"1dca15e379940e34f23d140f56af94474a1f2e1d"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4e2e36e3bb8605e346803aa2edecc1ac934b2300","unresolved":false,"context_lines":[{"line_number":402,"context_line":"                    image_info[\u0027kernel\u0027][1],"},{"line_number":403,"context_line":"                    image_info[\u0027ramdisk\u0027][1],"},{"line_number":404,"context_line":"                    network_info,"},{"line_number":405,"context_line":"                    preserve_ephemeral\u003dpreserve_ephemeral"},{"line_number":406,"context_line":"                )"},{"line_number":407,"context_line":"        bm_utils.write_to_file(pxe_config_file_path, pxe_config)"},{"line_number":408,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BFEk%3D","line":405,"updated":"2013-12-02 19:17:05.000000000","message":"Ditto.","commit_id":"1dca15e379940e34f23d140f56af94474a1f2e1d"}],"nova/virt/baremetal/pxe_config.template":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4e2e36e3bb8605e346803aa2edecc1ac934b2300","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"label deploy"},{"line_number":4,"context_line":"kernel {{ pxe_options.deployment_aki_path }}"},{"line_number":5,"context_line":"append initrd\u003d{{ pxe_options.deployment_ari_path }} selinux\u003d0 disk\u003dcciss/c0d0,sda,hda,vda iscsi_target_iqn\u003d{{ pxe_options.deployment_iscsi_iqn }} deployment_id\u003d{{ pxe_options.deployment_id }} deployment_key\u003d{{ pxe_options.deployment_key }} troubleshoot\u003d0 {{ pxe_options.pxe_append_params|default(\"\", true) }} preserve_ephemeral\u003d{{ pxe_options.preserve_ephemeral }}"},{"line_number":6,"context_line":"ipappend 3"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAATn%2F%2BFEc%3D","line":5,"updated":"2013-12-02 19:17:05.000000000","message":"Ditto.","commit_id":"1dca15e379940e34f23d140f56af94474a1f2e1d"}],"nova/virt/driver.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4e2e36e3bb8605e346803aa2edecc1ac934b2300","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def spawn(self, context, instance, image_meta, injected_files,"},{"line_number":218,"context_line":"              admin_password, network_info\u003dNone, block_device_info\u003dNone,"},{"line_number":219,"context_line":"              preserve_ephemeral\u003dFalse):"},{"line_number":220,"context_line":"        \"\"\""},{"line_number":221,"context_line":"        Create a new instance/VM/domain on the virtualization platform."},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BFD8%3D","line":219,"updated":"2013-12-02 19:17:05.000000000","message":"This is what I think needs to be avoided - but I may be wrong. In my head it was a new dedicated rebuild() method on the virt driver.","commit_id":"1dca15e379940e34f23d140f56af94474a1f2e1d"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4e2e36e3bb8605e346803aa2edecc1ac934b2300","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        raise NotImplementedError()"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":246,"context_line":"                destroy_disks\u003dTrue, preserve_ephemeral\u003dFalse):"},{"line_number":247,"context_line":"        \"\"\"Destroy (shutdown and delete) the specified instance."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        If the instance is not found (for example if networking failed), this"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BFD0%3D","line":246,"updated":"2013-12-02 19:17:05.000000000","message":"Ditto.","commit_id":"1dca15e379940e34f23d140f56af94474a1f2e1d"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"e72fe37e8966d2951f39cda72f16d7bdf7b84a66","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        raise NotImplementedError()"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def rebuild(self, context, instance, image_meta, injected_files,"},{"line_number":218,"context_line":"                admin_password, bdms, detach_block_devices,"},{"line_number":219,"context_line":"                attach_block_devices, instance_power_state, network_info\u003dNone,"},{"line_number":220,"context_line":"                recreate\u003dFalse, block_device_info\u003dNone):"},{"line_number":221,"context_line":"        \"\"\"Destroy and re-make this instance."}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F85eQ%3D","line":218,"updated":"2013-12-19 02:08:20.000000000","message":"a bunch of parameters aren\u0027t documented.","commit_id":"2fe6379a04b6fd5a351223d56086a427847210f5"}]}
