)]}'
{"doc/source/contributor/webapi-version-history.rst":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"1.74 (Xena, 18.0)"},{"line_number":28,"context_line":"----------------------"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Add support for BIOS registry fields which include details about the BIOS"},{"line_number":31,"context_line":"setting. Included in the ``/v1/nodes/{node_ident}/bios/{setting}`` response."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"8ed769bd_e588f5e2","side":"PARENT","line":29,"updated":"2021-08-31 14:46:38.000000000","message":"*blink* Its fine though.","commit_id":"3f17799a2e4da809ff7e4c956f5e5fcea0966cb0"}],"ironic/conf/default.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":98,"context_line":"    cfg.ListOpt(\u0027enabled_attestation_interfaces\u0027,"},{"line_number":99,"context_line":"                default\u003d[\u0027no-attestation\u0027],"},{"line_number":100,"context_line":"                help\u003d_ENABLED_IFACE_HELP.format(\u0027attestation\u0027)),"},{"line_number":101,"context_line":"    cfg.StrOpt(\u0027default_attestation_interface\u0027,"},{"line_number":102,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027attestation\u0027)),"},{"line_number":103,"context_line":"    cfg.ListOpt(\u0027enabled_bios_interfaces\u0027,"},{"line_number":104,"context_line":"                default\u003d[\u0027no-bios\u0027],"},{"line_number":105,"context_line":"                help\u003d_ENABLED_IFACE_HELP.format(\u0027bios\u0027)),"}],"source_content_type":"text/x-python","patch_set":1,"id":"2cd68aa7_21a6967f","line":102,"range":{"start_line":101,"start_character":0,"end_line":102,"end_character":63},"updated":"2021-08-31 14:46:38.000000000","message":"FWIW, you could likely just do this on the patch before and then rebase on top of that. This change will disappear.","commit_id":"35148bd7740141381e76233f5815b536ed103750"}],"ironic/drivers/modules/attestation/keylime.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":24,"context_line":"from oslo_log import log"},{"line_number":25,"context_line":"from oslo_utils import excutils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from ironic.common import exception"},{"line_number":29,"context_line":"from ironic.common import image_service"},{"line_number":30,"context_line":"from ironic.common import swift"}],"source_content_type":"text/x-python","patch_set":1,"id":"f0ef367c_b726df16","line":27,"updated":"2021-08-31 14:46:38.000000000","message":"I would likely just remove the whitespace for consistency unless our jobs fail.","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"REQUIRED_PROPERTIES \u003d {\"keylime_v\": \"the IP address of the cloud verifier\","},{"line_number":40,"context_line":"                       \"keylime_vp\": \"the port of the cloud verifier\","},{"line_number":41,"context_line":"                       \"keylime_r\": (\"the IP address of the registrar where \""},{"line_number":42,"context_line":"                                     \"to retrieve the agents data from.\"),"},{"line_number":43,"context_line":"                       \"keylime_rp\": \"the port of the registrar.\","},{"line_number":44,"context_line":"                       \"keylime_exclude\": (\"Deliver the specified \""},{"line_number":45,"context_line":"                                           \"plaintext to the provisioned \""},{"line_number":46,"context_line":"                                           \"agent\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"cbfc540a_1ddac9b1","line":43,"range":{"start_line":39,"start_character":24,"end_line":43,"end_character":36},"updated":"2021-08-31 14:46:38.000000000","message":"Any chance we can make these longer strings. Like \"keylime_v\" has no meaning compared to \"keylime_vp\" unless one reads the string, and actually getting this text is not the easiest thing.\n\nkeylime_registar_address and keylime_registrar_port might be ideal. Unfortunately naming things *is* the hardest thing to do in computer science.","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":32454,"name":"Leo McGann","email":"lmcgann06@gmail.com","username":"ljmcgann"},"change_message_id":"1a2463d762f3cf453346953163c76939d94ed7a9","unresolved":true,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"REQUIRED_PROPERTIES \u003d {\"keylime_v\": \"the IP address of the cloud verifier\","},{"line_number":40,"context_line":"                       \"keylime_vp\": \"the port of the cloud verifier\","},{"line_number":41,"context_line":"                       \"keylime_r\": (\"the IP address of the registrar where \""},{"line_number":42,"context_line":"                                     \"to retrieve the agents data from.\"),"},{"line_number":43,"context_line":"                       \"keylime_rp\": \"the port of the registrar.\","},{"line_number":44,"context_line":"                       \"keylime_exclude\": (\"Deliver the specified \""},{"line_number":45,"context_line":"                                           \"plaintext to the provisioned \""},{"line_number":46,"context_line":"                                           \"agent\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"0843421e_c17cc9dd","line":43,"range":{"start_line":39,"start_character":24,"end_line":43,"end_character":36},"in_reply_to":"cbfc540a_1ddac9b1","updated":"2021-09-02 19:05:16.000000000","message":"names like keylime_v were chosen because they match up one to one with the flag names in the keylime tenant, minus the \u0027keylime_\u0027 prefix put before each variable. Originally I had the idea that the calls might be more robust, by just passing in any flag and stripping the \u0027keylime_\u0027 prefix, but it seemed easier to restrict the workflow for now","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":48,"context_line":"                                             \"an allowlist\")}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"APPROVED_REACTIVATE_STATES \u003d [\"Start\", \"Get Quote\", \"Get Quote (retry)\","},{"line_number":52,"context_line":"                              \"Provide V\", \"Provide V (retry)\"]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class KeylimeAttestation(base.AttestationInterface):"}],"source_content_type":"text/x-python","patch_set":1,"id":"a5b5e519_ae46ca71","line":52,"range":{"start_line":51,"start_character":0,"end_line":52,"end_character":63},"updated":"2021-08-31 14:46:38.000000000","message":"Do we get to glare at the keylime folks if these strings ever chagne?","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":32454,"name":"Leo McGann","email":"lmcgann06@gmail.com","username":"ljmcgann"},"change_message_id":"1a2463d762f3cf453346953163c76939d94ed7a9","unresolved":true,"context_lines":[{"line_number":48,"context_line":"                                             \"an allowlist\")}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"APPROVED_REACTIVATE_STATES \u003d [\"Start\", \"Get Quote\", \"Get Quote (retry)\","},{"line_number":52,"context_line":"                              \"Provide V\", \"Provide V (retry)\"]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class KeylimeAttestation(base.AttestationInterface):"}],"source_content_type":"text/x-python","patch_set":1,"id":"2d99d9c1_b5f615a8","line":52,"range":{"start_line":51,"start_character":0,"end_line":52,"end_character":63},"in_reply_to":"a5b5e519_ae46ca71","updated":"2021-09-02 19:05:16.000000000","message":"On some level we have to trust Keylime to not change things like this. But yes, it would be nice if Keylime didn\u0027t return strings as tenant results. Ive asked them already about returning json dictionaries as an option","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":62,"context_line":"        info \u003d task.node.driver_info or {}"},{"line_number":63,"context_line":"        missing_info \u003d [key for key in REQUIRED_PROPERTIES"},{"line_number":64,"context_line":"                        if not info.get(key)]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        if missing_info:"},{"line_number":67,"context_line":"            raise exception.MissingParameterValue(("},{"line_number":68,"context_line":"                \"Missing the following Keylime credentials in node\u0027s\""}],"source_content_type":"text/x-python","patch_set":1,"id":"77eb98da_48960efd","line":65,"updated":"2021-08-31 14:46:38.000000000","message":"Likely need to raise a warning if the configured deploy_interface is not \"agent\"","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0ff5dd7adb4da85d732f040285fc3c45c5f95bd6","unresolved":true,"context_lines":[{"line_number":62,"context_line":"        info \u003d task.node.driver_info or {}"},{"line_number":63,"context_line":"        missing_info \u003d [key for key in REQUIRED_PROPERTIES"},{"line_number":64,"context_line":"                        if not info.get(key)]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        if missing_info:"},{"line_number":67,"context_line":"            raise exception.MissingParameterValue(("},{"line_number":68,"context_line":"                \"Missing the following Keylime credentials in node\u0027s\""}],"source_content_type":"text/x-python","patch_set":1,"id":"24bcd799_29bd52cc","line":65,"in_reply_to":"77eb98da_48960efd","updated":"2021-08-31 14:47:55.000000000","message":"err, cleaning interface...","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @base.clean_step(priority\u003d120)"},{"line_number":76,"context_line":"    def start_attestation(self, task):"},{"line_number":77,"context_line":"        #time.sleep(60)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        verifier \u003d task.node.driver_info.get(\u0027keylime_v\u0027)"},{"line_number":80,"context_line":"        verifier_port \u003d task.node.driver_info.get(\u0027keylime_vp\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"37a11916_926c2ca9","line":77,"range":{"start_line":77,"start_character":0,"end_line":77,"end_character":23},"updated":"2021-08-31 14:46:38.000000000","message":"Obviously, you\u0027d likely remove this. :)","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":93,"context_line":"        # updated_driver_info.update(agent_info)"},{"line_number":94,"context_line":"        # node.update({\u0027driver_info\u0027: updated_driver_info})"},{"line_number":95,"context_line":"        #"},{"line_number":96,"context_line":"        # cmd \u003d [\"keylime_tenant\","},{"line_number":97,"context_line":"        #        \"-c\", \"add\","},{"line_number":98,"context_line":"        #        \"-u\", agent_info[\"keylime_u\"],"},{"line_number":99,"context_line":"        #        \"-t\", agent_info[\u0027keylime_t\u0027],"},{"line_number":100,"context_line":"        #        \"-tp\", agent_info[\u0027keylime_tp\u0027],"},{"line_number":101,"context_line":"        #        \"-v\", verifier,"},{"line_number":102,"context_line":"        #        \"-vp\", str(verifier_port),"},{"line_number":103,"context_line":"        #        \"-r\", registrar,"},{"line_number":104,"context_line":"        #        \"-rp\", registrar_port,"},{"line_number":105,"context_line":"        #        \"-f\", exclude,"},{"line_number":106,"context_line":"        #        \"--allowlist\", allow,"},{"line_number":107,"context_line":"        #        \"--exclude\", exclude]"},{"line_number":108,"context_line":"        #"},{"line_number":109,"context_line":"        # utils.execute(*cmd)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @base.clean_step(priority\u003d119)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1d764d49_1ac0276e","line":108,"range":{"start_line":96,"start_character":9,"end_line":108,"end_character":9},"updated":"2021-08-31 14:46:38.000000000","message":"So before running a command, you likely want to have guard rails since your relying upon operator driver_info field input to complete this action.","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @base.clean_step(priority\u003d119)"},{"line_number":112,"context_line":"    def validate_security_status(self, task):"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        time.sleep(60)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        verifier \u003d task.node.driver_info.get(\u0027keylime_v\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"523f7584_57e84db8","line":113,"updated":"2021-08-31 14:46:38.000000000","message":"I suspect some sanity check method or helper will be needed so this will only run with the agent deployment interface.","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":111,"context_line":"    @base.clean_step(priority\u003d119)"},{"line_number":112,"context_line":"    def validate_security_status(self, task):"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        time.sleep(60)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        verifier \u003d task.node.driver_info.get(\u0027keylime_v\u0027)"},{"line_number":117,"context_line":"        verifier_port \u003d task.node.driver_info.get(\u0027keylime_vp\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"38a8d300_60d4048f","line":114,"range":{"start_line":114,"start_character":2,"end_line":114,"end_character":22},"updated":"2021-08-31 14:46:38.000000000","message":":) You\u0027ll want to use a FIXME tag or soemthing here :)","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":119,"context_line":"        registrar_port \u003d task.node.driver_info.get(\u0027keylime_rp\u0027)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        node \u003d task.node"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        cmd \u003d [\"keylime_tenant\","},{"line_number":124,"context_line":"               \"-c\", \"status\","},{"line_number":125,"context_line":"               \"-u\", node.driver_info.get(\"keylime_u\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"14b75491_843e0121","line":122,"updated":"2021-08-31 14:46:38.000000000","message":"Kind of same as before, we likely need to make sure we have the sufficent and correct information before we go and make the call.","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":124,"context_line":"               \"-c\", \"status\","},{"line_number":125,"context_line":"               \"-u\", node.driver_info.get(\"keylime_u\"),"},{"line_number":126,"context_line":"               \"-v\", verifier,"},{"line_number":127,"context_line":"               \"-vp\", str(verifier_port),"},{"line_number":128,"context_line":"               \"-r\", registrar,"},{"line_number":129,"context_line":"               \"-rp\", registrar_port,"},{"line_number":130,"context_line":"               ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"08a2752a_0db03b72","line":127,"range":{"start_line":127,"start_character":21,"end_line":127,"end_character":41},"updated":"2021-08-31 14:46:38.000000000","message":"Good to cast this just in case since the filed could be stored as a literal number or as a string.\n\nAlthough, question we should likely ask, is it needed because it needs to be converted to a string anyway to execute the command.","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":32454,"name":"Leo McGann","email":"lmcgann06@gmail.com","username":"ljmcgann"},"change_message_id":"1a2463d762f3cf453346953163c76939d94ed7a9","unresolved":true,"context_lines":[{"line_number":124,"context_line":"               \"-c\", \"status\","},{"line_number":125,"context_line":"               \"-u\", node.driver_info.get(\"keylime_u\"),"},{"line_number":126,"context_line":"               \"-v\", verifier,"},{"line_number":127,"context_line":"               \"-vp\", str(verifier_port),"},{"line_number":128,"context_line":"               \"-r\", registrar,"},{"line_number":129,"context_line":"               \"-rp\", registrar_port,"},{"line_number":130,"context_line":"               ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"131de651_ddc84c10","line":127,"range":{"start_line":127,"start_character":21,"end_line":127,"end_character":41},"in_reply_to":"08a2752a_0db03b72","updated":"2021-09-02 19:05:16.000000000","message":"It has to be a string, and driver_info sets any variables as integers if the input can be interpreted as one, which the port was. All of these variables need to be strings for the tenant call.","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":141,"context_line":"    @base.clean_step(priority\u003d118)"},{"line_number":142,"context_line":"    def unregister_node(self, task):"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        time.sleep(60)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        registrar \u003d task.node.driver_info.get(\u0027keylime_r\u0027)"},{"line_number":147,"context_line":"        registrar_port \u003d task.node.driver_info.get(\u0027keylime_rp\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ddcf7470_a4155b7a","line":144,"range":{"start_line":144,"start_character":0,"end_line":144,"end_character":22},"updated":"2021-08-31 14:46:38.000000000","message":"In discussion, we realize we need this to give time for keylime to work at present. It would be good to move this to relying upon heartbeat operations to keep checking and attempting before proceeding.","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"3256d5ba6d6118ca8f4594d20118226039fe7fb4","unresolved":true,"context_lines":[{"line_number":141,"context_line":"    @base.clean_step(priority\u003d118)"},{"line_number":142,"context_line":"    def unregister_node(self, task):"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        time.sleep(60)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        registrar \u003d task.node.driver_info.get(\u0027keylime_r\u0027)"},{"line_number":147,"context_line":"        registrar_port \u003d task.node.driver_info.get(\u0027keylime_rp\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"43a9abb6_558b11c6","line":144,"updated":"2021-08-31 14:42:23.000000000","message":"Let\u0027s add documentation about the limitation of requests that Keylime can receive and that we need the sleep","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":32454,"name":"Leo McGann","email":"lmcgann06@gmail.com","username":"ljmcgann"},"change_message_id":"83e46f97bd408c92be960b2c76965ef881a07b9f","unresolved":true,"context_lines":[{"line_number":141,"context_line":"    @base.clean_step(priority\u003d118)"},{"line_number":142,"context_line":"    def unregister_node(self, task):"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        time.sleep(60)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        registrar \u003d task.node.driver_info.get(\u0027keylime_r\u0027)"},{"line_number":147,"context_line":"        registrar_port \u003d task.node.driver_info.get(\u0027keylime_rp\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"09fcaded_7117c247","line":144,"range":{"start_line":144,"start_character":0,"end_line":144,"end_character":22},"in_reply_to":"ddcf7470_a4155b7a","updated":"2021-09-02 19:42:39.000000000","message":"Is there an example of how this would be done anywhere?","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":154,"context_line":"               \"-r\", registrar,"},{"line_number":155,"context_line":"               \"-rp\", registrar_port,"},{"line_number":156,"context_line":"               ]"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        utils.execute(*cmd)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def get_agent_info(self, node):"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        client \u003d agent_client.AgentClient()"}],"source_content_type":"text/x-python","patch_set":1,"id":"5b289d85_c5582562","line":159,"range":{"start_line":157,"start_character":0,"end_line":159,"end_character":0},"updated":"2021-08-31 14:46:38.000000000","message":"Are there cases where this should be retried? Likely need to raise exceptions at certian points where we execute utils.execute.","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":32454,"name":"Leo McGann","email":"lmcgann06@gmail.com","username":"ljmcgann"},"change_message_id":"1a2463d762f3cf453346953163c76939d94ed7a9","unresolved":true,"context_lines":[{"line_number":154,"context_line":"               \"-r\", registrar,"},{"line_number":155,"context_line":"               \"-rp\", registrar_port,"},{"line_number":156,"context_line":"               ]"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        utils.execute(*cmd)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def get_agent_info(self, node):"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        client \u003d agent_client.AgentClient()"}],"source_content_type":"text/x-python","patch_set":1,"id":"6fa6c8bd_32ce875b","line":159,"range":{"start_line":157,"start_character":0,"end_line":159,"end_character":0},"in_reply_to":"5b289d85_c5582562","updated":"2021-09-02 19:05:16.000000000","message":"Keylime commands can go wrong in a couple different ways, some requiring you to run a delete command after failing, some not. Its a bit obtuse too to find which scenario youve landed yourself in, especially if the calls happen too early (hence the sleeps)","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":173,"context_line":"        temp_allow \u003d tempfile.NamedTemporaryFile()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        AllowlistProcessor(allowlist_url)._download_al_to(temp_allow.name)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        print(temp_allow.read())"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"class AllowlistProcessor(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"590d67b1_2bdc5f21","line":177,"range":{"start_line":176,"start_character":0,"end_line":177,"end_character":32},"updated":"2021-08-31 14:46:38.000000000","message":":)","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":32454,"name":"Leo McGann","email":"lmcgann06@gmail.com","username":"ljmcgann"},"change_message_id":"1a2463d762f3cf453346953163c76939d94ed7a9","unresolved":true,"context_lines":[{"line_number":173,"context_line":"        temp_allow \u003d tempfile.NamedTemporaryFile()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        AllowlistProcessor(allowlist_url)._download_al_to(temp_allow.name)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        print(temp_allow.read())"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"class AllowlistProcessor(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f2468cd_1432b3d3","line":177,"range":{"start_line":176,"start_character":0,"end_line":177,"end_character":32},"in_reply_to":"590d67b1_2bdc5f21","updated":"2021-09-02 19:05:16.000000000","message":":))","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"def _download_file_based_al_to(self, target_file):"},{"line_number":256,"context_line":"    \"\"\"File based firmware file downloader (copier)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    It copies the file (url) to temporary location (file location)."},{"line_number":259,"context_line":"    Original firmware file location (url) is expected in the format"}],"source_content_type":"text/x-python","patch_set":1,"id":"d03494d0_4614e9fc","line":256,"range":{"start_line":256,"start_character":18,"end_line":256,"end_character":26},"updated":"2021-08-31 14:46:38.000000000","message":":)","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":256,"context_line":"    \"\"\"File based firmware file downloader (copier)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    It copies the file (url) to temporary location (file location)."},{"line_number":259,"context_line":"    Original firmware file location (url) is expected in the format"},{"line_number":260,"context_line":"    \"file:///tmp/..\""},{"line_number":261,"context_line":"    :param target_file: destination file for copying the original firmware"},{"line_number":262,"context_line":"                        file."}],"source_content_type":"text/x-python","patch_set":1,"id":"3dcb624d_1084392c","line":259,"range":{"start_line":259,"start_character":13,"end_line":259,"end_character":21},"updated":"2021-08-31 14:46:38.000000000","message":":)","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":258,"context_line":"    It copies the file (url) to temporary location (file location)."},{"line_number":259,"context_line":"    Original firmware file location (url) is expected in the format"},{"line_number":260,"context_line":"    \"file:///tmp/..\""},{"line_number":261,"context_line":"    :param target_file: destination file for copying the original firmware"},{"line_number":262,"context_line":"                        file."},{"line_number":263,"context_line":"    :raises: ImageDownloadFailed, on failure to copy the original file."},{"line_number":264,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"797a8277_63d31d02","line":261,"range":{"start_line":261,"start_character":66,"end_line":261,"end_character":74},"updated":"2021-08-31 14:46:38.000000000","message":":)","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":273,"context_line":"    \"\"\"HTTP based firmware file downloader"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    It downloads the file (url) to temporary location (file location)."},{"line_number":276,"context_line":"    Original firmware file location (url) is expected in the format"},{"line_number":277,"context_line":"    \"http://..\""},{"line_number":278,"context_line":"    :param target_file: destination file for downloading the original firmware"},{"line_number":279,"context_line":"                        file."}],"source_content_type":"text/x-python","patch_set":1,"id":"9ab4952b_d383997c","line":276,"range":{"start_line":276,"start_character":13,"end_line":276,"end_character":21},"updated":"2021-08-31 14:46:38.000000000","message":":)","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":275,"context_line":"    It downloads the file (url) to temporary location (file location)."},{"line_number":276,"context_line":"    Original firmware file location (url) is expected in the format"},{"line_number":277,"context_line":"    \"http://..\""},{"line_number":278,"context_line":"    :param target_file: destination file for downloading the original firmware"},{"line_number":279,"context_line":"                        file."},{"line_number":280,"context_line":"    :raises: ImageDownloadFailed, on failure to download the original file."},{"line_number":281,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"cf5d50fc_5c3e351e","line":278,"range":{"start_line":278,"start_character":70,"end_line":278,"end_character":78},"updated":"2021-08-31 14:46:38.000000000","message":":)","commit_id":"35148bd7740141381e76233f5815b536ed103750"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2d0ef10b592a95de7538046f959bb1e99118262","unresolved":true,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    It downloads the firmware file via http based downloader to the target"},{"line_number":312,"context_line":"    file. Expecting url as swift://containername/objectname"},{"line_number":313,"context_line":"    :param target_file: destination file for downloading the original firmware"},{"line_number":314,"context_line":"                        file."},{"line_number":315,"context_line":"    :raises: ImageDownloadFailed, on failure to download the original file."},{"line_number":316,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"fbe3f8e6_0d4c240e","line":313,"range":{"start_line":313,"start_character":70,"end_line":313,"end_character":78},"updated":"2021-08-31 14:46:38.000000000","message":":)","commit_id":"35148bd7740141381e76233f5815b536ed103750"}]}
