)]}'
{"ironic/api/controllers/v1/node.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":"56108a02384b4996ffb9646954adc3f53f966086","unresolved":true,"context_lines":[{"line_number":1290,"context_line":""},{"line_number":1291,"context_line":"    if node.get(\u0027driver_internal_info\u0027, {}).get(\u0027agent_secret_token\u0027):"},{"line_number":1292,"context_line":"        node[\u0027driver_internal_info\u0027][\u0027agent_secret_token\u0027] \u003d \"******\""},{"line_number":1293,"context_line":"    if node.get(\u0027driver_internal_info\u0027, {}).get(\u0027auth_token\u0027):"},{"line_number":1294,"context_line":"        node[\u0027driver_internal_info\u0027][\u0027auth_token\u0027] \u003d \"******\""},{"line_number":1295,"context_line":""},{"line_number":1296,"context_line":"    update_state_in_older_versions(node)"},{"line_number":1297,"context_line":"    hide_fields_in_newer_versions(node)"}],"source_content_type":"text/x-python","patch_set":1,"id":"89981b43_c7a6875c","line":1294,"range":{"start_line":1293,"start_character":0,"end_line":1294,"end_character":61},"updated":"2021-03-11 23:55:53.000000000","message":"I\u0027m guessing the idea here is to keep the original requester\u0027s auth token. I think a number of cores would have a big issue with this. I need to check back in on the spec as it was revised yesterday.","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"22ec33c5a93b58f8289620982be9deb0822e6a95","unresolved":false,"context_lines":[{"line_number":1290,"context_line":""},{"line_number":1291,"context_line":"    if node.get(\u0027driver_internal_info\u0027, {}).get(\u0027agent_secret_token\u0027):"},{"line_number":1292,"context_line":"        node[\u0027driver_internal_info\u0027][\u0027agent_secret_token\u0027] \u003d \"******\""},{"line_number":1293,"context_line":"    if node.get(\u0027driver_internal_info\u0027, {}).get(\u0027auth_token\u0027):"},{"line_number":1294,"context_line":"        node[\u0027driver_internal_info\u0027][\u0027auth_token\u0027] \u003d \"******\""},{"line_number":1295,"context_line":""},{"line_number":1296,"context_line":"    update_state_in_older_versions(node)"},{"line_number":1297,"context_line":"    hide_fields_in_newer_versions(node)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e29de592_6ba8c3ed","line":1294,"range":{"start_line":1293,"start_character":0,"end_line":1294,"end_character":61},"in_reply_to":"89981b43_c7a6875c","updated":"2021-03-17 17:08:14.000000000","message":"no longer part of the spec, removed.","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"}],"ironic/conductor/deployments.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":"56108a02384b4996ffb9646954adc3f53f966086","unresolved":true,"context_lines":[{"line_number":112,"context_line":"            event,"},{"line_number":113,"context_line":"            callback\u003dmanager._spawn_worker,"},{"line_number":114,"context_line":"            call_args\u003d(do_node_deploy, task,"},{"line_number":115,"context_line":"                       manager.conductor.id, configdrive, auth_token),"},{"line_number":116,"context_line":"            err_handler\u003dutils.provisioning_error_handler)"},{"line_number":117,"context_line":"    except exception.InvalidState:"},{"line_number":118,"context_line":"        raise exception.InvalidStateRequested("}],"source_content_type":"text/x-python","patch_set":1,"id":"086c3e96_d03a5336","line":115,"updated":"2021-03-11 23:55:53.000000000","message":"is task.context.auth_token insufficient resulting in the additional parameter?","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"22ec33c5a93b58f8289620982be9deb0822e6a95","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            event,"},{"line_number":113,"context_line":"            callback\u003dmanager._spawn_worker,"},{"line_number":114,"context_line":"            call_args\u003d(do_node_deploy, task,"},{"line_number":115,"context_line":"                       manager.conductor.id, configdrive, auth_token),"},{"line_number":116,"context_line":"            err_handler\u003dutils.provisioning_error_handler)"},{"line_number":117,"context_line":"    except exception.InvalidState:"},{"line_number":118,"context_line":"        raise exception.InvalidStateRequested("}],"source_content_type":"text/x-python","patch_set":1,"id":"4973f192_ec52c2f2","line":115,"in_reply_to":"086c3e96_d03a5336","updated":"2021-03-17 17:08:14.000000000","message":"Ack; no longer part of the spec, removed","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"56108a02384b4996ffb9646954adc3f53f966086","unresolved":true,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"@METRICS.timer(\u0027do_node_deploy\u0027)"},{"line_number":124,"context_line":"@task_manager.require_exclusive_lock"},{"line_number":125,"context_line":"def do_node_deploy(task, conductor_id\u003dNone, configdrive\u003dNone, auth_token\u003dNone):"},{"line_number":126,"context_line":"    \"\"\"Prepare the environment and deploy a node.\"\"\""},{"line_number":127,"context_line":"    node \u003d task.node"},{"line_number":128,"context_line":"    utils.wipe_deploy_internal_info(task)"}],"source_content_type":"text/x-python","patch_set":1,"id":"f7e3cbbc_35407c61","line":125,"range":{"start_line":125,"start_character":61,"end_line":125,"end_character":79},"updated":"2021-03-11 23:55:53.000000000","message":"This shouldn\u0027t be needed as task.context is the oslo context passed into ironic.","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"22ec33c5a93b58f8289620982be9deb0822e6a95","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"@METRICS.timer(\u0027do_node_deploy\u0027)"},{"line_number":124,"context_line":"@task_manager.require_exclusive_lock"},{"line_number":125,"context_line":"def do_node_deploy(task, conductor_id\u003dNone, configdrive\u003dNone, auth_token\u003dNone):"},{"line_number":126,"context_line":"    \"\"\"Prepare the environment and deploy a node.\"\"\""},{"line_number":127,"context_line":"    node \u003d task.node"},{"line_number":128,"context_line":"    utils.wipe_deploy_internal_info(task)"}],"source_content_type":"text/x-python","patch_set":1,"id":"d054518b_f8229219","line":125,"range":{"start_line":125,"start_character":61,"end_line":125,"end_character":79},"in_reply_to":"f7e3cbbc_35407c61","updated":"2021-03-17 17:08:14.000000000","message":"ditto","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"56108a02384b4996ffb9646954adc3f53f966086","unresolved":true,"context_lines":[{"line_number":130,"context_line":"    # Add caller\u0027s auth token to the node"},{"line_number":131,"context_line":"    # Used for configuration mold steps and potentially other that"},{"line_number":132,"context_line":"    # need caller\u0027s auth to work with Swift."},{"line_number":133,"context_line":"    if auth_token:"},{"line_number":134,"context_line":"        driver_internal_info \u003d node.driver_internal_info"},{"line_number":135,"context_line":"        driver_internal_info[\u0027auth_token\u0027] \u003d auth_token"},{"line_number":136,"context_line":"        node.driver_internal_info \u003d driver_internal_info"},{"line_number":137,"context_line":"        node.save()"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    try:"},{"line_number":140,"context_line":"        if configdrive:"}],"source_content_type":"text/x-python","patch_set":1,"id":"56fc4bec_9e8e6952","line":137,"range":{"start_line":133,"start_character":0,"end_line":137,"end_character":19},"updated":"2021-03-11 23:55:53.000000000","message":"This is a major security concern as if available, or if the secret concealment policy is changed (I actually have someone that keeps asking me to make that a default), then it allows an attacker to have externally valid shared token to attack external surfaces of the management platform.","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"22ec33c5a93b58f8289620982be9deb0822e6a95","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    # Add caller\u0027s auth token to the node"},{"line_number":131,"context_line":"    # Used for configuration mold steps and potentially other that"},{"line_number":132,"context_line":"    # need caller\u0027s auth to work with Swift."},{"line_number":133,"context_line":"    if auth_token:"},{"line_number":134,"context_line":"        driver_internal_info \u003d node.driver_internal_info"},{"line_number":135,"context_line":"        driver_internal_info[\u0027auth_token\u0027] \u003d auth_token"},{"line_number":136,"context_line":"        node.driver_internal_info \u003d driver_internal_info"},{"line_number":137,"context_line":"        node.save()"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    try:"},{"line_number":140,"context_line":"        if configdrive:"}],"source_content_type":"text/x-python","patch_set":1,"id":"96e9f9a5_479888aa","line":137,"range":{"start_line":133,"start_character":0,"end_line":137,"end_character":19},"in_reply_to":"56fc4bec_9e8e6952","updated":"2021-03-17 17:08:14.000000000","message":"no longer part of the spec, removed","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"}],"ironic/conductor/manager.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":"56108a02384b4996ffb9646954adc3f53f966086","unresolved":true,"context_lines":[{"line_number":842,"context_line":"                                  purpose\u003d\u0027node deployment\u0027) as task:"},{"line_number":843,"context_line":"            deployments.validate_node(task, event\u003devent)"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"            deployments.start_deploy(task, self, configdrive, event\u003devent,"},{"line_number":846,"context_line":"                                     auth_token\u003dcontext.auth_token)"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"    @METRICS.timer(\u0027ConductorManager.continue_node_deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"2f623c55_be77e4e8","line":845,"range":{"start_line":845,"start_character":37,"end_line":845,"end_character":41},"updated":"2021-03-11 23:55:53.000000000","message":"fyi, task.context is the same as directly accessing context once the task has been spawned.\n\nhttps://github.com/openstack/ironic/blob/master/ironic/conductor/task_manager.py#L207","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"22ec33c5a93b58f8289620982be9deb0822e6a95","unresolved":false,"context_lines":[{"line_number":842,"context_line":"                                  purpose\u003d\u0027node deployment\u0027) as task:"},{"line_number":843,"context_line":"            deployments.validate_node(task, event\u003devent)"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"            deployments.start_deploy(task, self, configdrive, event\u003devent,"},{"line_number":846,"context_line":"                                     auth_token\u003dcontext.auth_token)"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"    @METRICS.timer(\u0027ConductorManager.continue_node_deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"8c1318f4_f03df100","line":845,"range":{"start_line":845,"start_character":37,"end_line":845,"end_character":41},"in_reply_to":"2f623c55_be77e4e8","updated":"2021-03-17 17:08:14.000000000","message":"Ack; no longer part of the spec, removed","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"56108a02384b4996ffb9646954adc3f53f966086","unresolved":true,"context_lines":[{"line_number":1094,"context_line":"            # need caller\u0027s auth to work with Swift."},{"line_number":1095,"context_line":"            if context.auth_token:"},{"line_number":1096,"context_line":"                driver_internal_info \u003d node.driver_internal_info"},{"line_number":1097,"context_line":"                driver_internal_info[\u0027auth_token\u0027] \u003d context.auth_token"},{"line_number":1098,"context_line":"                node.driver_internal_info \u003d driver_internal_info"},{"line_number":1099,"context_line":"                node.save()"},{"line_number":1100,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"4b84d20c_5b1d619f","line":1097,"range":{"start_line":1097,"start_character":0,"end_line":1097,"end_character":71},"updated":"2021-03-11 23:55:53.000000000","message":"Re-iteration from before, task.context is context.","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"22ec33c5a93b58f8289620982be9deb0822e6a95","unresolved":false,"context_lines":[{"line_number":1094,"context_line":"            # need caller\u0027s auth to work with Swift."},{"line_number":1095,"context_line":"            if context.auth_token:"},{"line_number":1096,"context_line":"                driver_internal_info \u003d node.driver_internal_info"},{"line_number":1097,"context_line":"                driver_internal_info[\u0027auth_token\u0027] \u003d context.auth_token"},{"line_number":1098,"context_line":"                node.driver_internal_info \u003d driver_internal_info"},{"line_number":1099,"context_line":"                node.save()"},{"line_number":1100,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f2e90ed4_4a0530d8","line":1097,"range":{"start_line":1097,"start_character":0,"end_line":1097,"end_character":71},"in_reply_to":"4b84d20c_5b1d619f","updated":"2021-03-17 17:08:14.000000000","message":"Ack; no longer part of the spec, removed","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"}],"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":"56108a02384b4996ffb9646954adc3f53f966086","unresolved":true,"context_lines":[{"line_number":394,"context_line":"    cfg.StrOpt(\u0027mold_storage\u0027,"},{"line_number":395,"context_line":"               default\u003d\u0027swift\u0027,"},{"line_number":396,"context_line":"               help\u003d_(\u0027Configuration mold storage location. Supports \"swift\" \u0027"},{"line_number":397,"context_line":"                      \u0027and \"web\". By default \"swift\".\u0027)),"},{"line_number":398,"context_line":"    cfg.StrOpt(\u0027mold_basic_auth\u0027,"},{"line_number":399,"context_line":"               help\u003d_(\u0027User:Password pair for \"web\" Basic auth. By default \u0027"},{"line_number":400,"context_line":"                      \u0027set empty.\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"659728af_b3f240fc","line":397,"range":{"start_line":397,"start_character":28,"end_line":397,"end_character":31},"updated":"2021-03-11 23:55:53.000000000","message":"s/web/http/. Conceptually the web is everything, where HTTP is the base protocol used for the storage as a put operation. FWIW, swift uses the same so it might nt even be needed.","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"22ec33c5a93b58f8289620982be9deb0822e6a95","unresolved":true,"context_lines":[{"line_number":394,"context_line":"    cfg.StrOpt(\u0027mold_storage\u0027,"},{"line_number":395,"context_line":"               default\u003d\u0027swift\u0027,"},{"line_number":396,"context_line":"               help\u003d_(\u0027Configuration mold storage location. Supports \"swift\" \u0027"},{"line_number":397,"context_line":"                      \u0027and \"web\". By default \"swift\".\u0027)),"},{"line_number":398,"context_line":"    cfg.StrOpt(\u0027mold_basic_auth\u0027,"},{"line_number":399,"context_line":"               help\u003d_(\u0027User:Password pair for \"web\" Basic auth. By default \u0027"},{"line_number":400,"context_line":"                      \u0027set empty.\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"4714ce39_dca6e79e","line":397,"range":{"start_line":397,"start_character":28,"end_line":397,"end_character":31},"in_reply_to":"659728af_b3f240fc","updated":"2021-03-17 17:08:14.000000000","message":"agree, for now the distinction is not in protocols used, but where to get credentials to access. For Swift it will use task\u0027s context, for web it will used credentials from configuration. In future more storage locations, non-HTTP, could be added, I\u0027d like to keep this as it is unless there are other suggestions.","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"56108a02384b4996ffb9646954adc3f53f966086","unresolved":true,"context_lines":[{"line_number":397,"context_line":"                      \u0027and \"web\". By default \"swift\".\u0027)),"},{"line_number":398,"context_line":"    cfg.StrOpt(\u0027mold_basic_auth\u0027,"},{"line_number":399,"context_line":"               help\u003d_(\u0027User:Password pair for \"web\" Basic auth. By default \u0027"},{"line_number":400,"context_line":"                      \u0027set empty.\u0027))"},{"line_number":401,"context_line":"]"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"c3c02144_aeeb8007","line":400,"updated":"2021-03-11 23:55:53.000000000","message":"I would have separate username/password parameters as opposed to a pair.","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"22ec33c5a93b58f8289620982be9deb0822e6a95","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                      \u0027and \"web\". By default \"swift\".\u0027)),"},{"line_number":398,"context_line":"    cfg.StrOpt(\u0027mold_basic_auth\u0027,"},{"line_number":399,"context_line":"               help\u003d_(\u0027User:Password pair for \"web\" Basic auth. By default \u0027"},{"line_number":400,"context_line":"                      \u0027set empty.\u0027))"},{"line_number":401,"context_line":"]"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"674dfe69_d7fdeb7b","line":400,"in_reply_to":"c3c02144_aeeb8007","updated":"2021-03-17 17:08:14.000000000","message":"Done","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9cb069c4ee88f30e2560af030426bd8a0fdc4215","unresolved":true,"context_lines":[{"line_number":427,"context_line":"    cfg.StrOpt(\u0027mold_storage\u0027,"},{"line_number":428,"context_line":"               default\u003d\u0027swift\u0027,"},{"line_number":429,"context_line":"               help\u003d_(\u0027Configuration mold storage location. Supports \"swift\" \u0027"},{"line_number":430,"context_line":"                      \u0027and \"web\". By default \"swift\".\u0027)),"},{"line_number":431,"context_line":"    cfg.StrOpt(\u0027mold_user\u0027,"},{"line_number":432,"context_line":"               help\u003d_(\u0027User for \"web\" Basic auth. By default set empty.\u0027)),"},{"line_number":433,"context_line":"    cfg.StrOpt(\u0027mold_password\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"52f9d135_a3224f5f","line":430,"range":{"start_line":430,"start_character":28,"end_line":430,"end_character":31},"updated":"2021-03-18 14:34:38.000000000","message":"\"http\", not web. web is an extremely overloaded word and for all I know the web is AOL 3.2.2 In other use, lets use labels for standards or applications","commit_id":"169a30451c6e619f4d7b6dff5a738e94a1791d89"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"d4fe7af0f68c796f03331f1b77e65ac765ce8975","unresolved":false,"context_lines":[{"line_number":427,"context_line":"    cfg.StrOpt(\u0027mold_storage\u0027,"},{"line_number":428,"context_line":"               default\u003d\u0027swift\u0027,"},{"line_number":429,"context_line":"               help\u003d_(\u0027Configuration mold storage location. Supports \"swift\" \u0027"},{"line_number":430,"context_line":"                      \u0027and \"web\". By default \"swift\".\u0027)),"},{"line_number":431,"context_line":"    cfg.StrOpt(\u0027mold_user\u0027,"},{"line_number":432,"context_line":"               help\u003d_(\u0027User for \"web\" Basic auth. By default set empty.\u0027)),"},{"line_number":433,"context_line":"    cfg.StrOpt(\u0027mold_password\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aa145c2_418e5fd6","line":430,"range":{"start_line":430,"start_character":28,"end_line":430,"end_character":31},"in_reply_to":"52f9d135_a3224f5f","updated":"2021-03-19 15:34:08.000000000","message":"Done","commit_id":"169a30451c6e619f4d7b6dff5a738e94a1791d89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"075e6d02658f469f20d3050898982b32394a0953","unresolved":true,"context_lines":[{"line_number":429,"context_line":"               help\u003d_(\u0027Configuration mold storage location. Supports \"swift\" \u0027"},{"line_number":430,"context_line":"                      \u0027and \"http\". By default \"swift\".\u0027)),"},{"line_number":431,"context_line":"    cfg.StrOpt(\u0027mold_user\u0027,"},{"line_number":432,"context_line":"               help\u003d_(\u0027User for \"web\" Basic auth. By default set empty.\u0027)),"},{"line_number":433,"context_line":"    cfg.StrOpt(\u0027mold_password\u0027,"},{"line_number":434,"context_line":"               help\u003d_(\u0027Password for \"web\" Basic auth. By default set empty.\u0027))"},{"line_number":435,"context_line":"]"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"07df5cfa_000eb44b","line":434,"range":{"start_line":432,"start_character":31,"end_line":434,"end_character":44},"updated":"2021-03-22 16:41:01.000000000","message":"s/web/http/","commit_id":"a3eb7432fec545bdb994ad1506e22a3a68c4a36b"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"541fa7b0f724931fe9598c62f8ac5ed2163978d4","unresolved":false,"context_lines":[{"line_number":429,"context_line":"               help\u003d_(\u0027Configuration mold storage location. Supports \"swift\" \u0027"},{"line_number":430,"context_line":"                      \u0027and \"http\". By default \"swift\".\u0027)),"},{"line_number":431,"context_line":"    cfg.StrOpt(\u0027mold_user\u0027,"},{"line_number":432,"context_line":"               help\u003d_(\u0027User for \"web\" Basic auth. By default set empty.\u0027)),"},{"line_number":433,"context_line":"    cfg.StrOpt(\u0027mold_password\u0027,"},{"line_number":434,"context_line":"               help\u003d_(\u0027Password for \"web\" Basic auth. By default set empty.\u0027))"},{"line_number":435,"context_line":"]"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"951494c0_9538ce3c","line":434,"range":{"start_line":432,"start_character":31,"end_line":434,"end_character":44},"in_reply_to":"07df5cfa_000eb44b","updated":"2021-03-22 17:18:34.000000000","message":"Done","commit_id":"a3eb7432fec545bdb994ad1506e22a3a68c4a36b"}],"ironic/drivers/utils.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":"56108a02384b4996ffb9646954adc3f53f966086","unresolved":true,"context_lines":[{"line_number":387,"context_line":"    \"\"\""},{"line_number":388,"context_line":"    auth_header \u003d _get_auth_header(node)"},{"line_number":389,"context_line":"    response \u003d requests.put("},{"line_number":390,"context_line":"        url, data\u003djson.dumps(data, indent\u003d2), headers\u003dauth_header)"},{"line_number":391,"context_line":"    response.raise_for_status()"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1d3a5acd_2e34ff05","line":390,"updated":"2021-03-11 23:55:53.000000000","message":"Just something to consider, you might want to ensure that requests has some sort of retries set so it doesn\u0027t fail immediately. The number one bug we find in production is some transient thing happened and the remote end in the physical infrastructure caused the packet to be delayed a little.","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"22ec33c5a93b58f8289620982be9deb0822e6a95","unresolved":false,"context_lines":[{"line_number":387,"context_line":"    \"\"\""},{"line_number":388,"context_line":"    auth_header \u003d _get_auth_header(node)"},{"line_number":389,"context_line":"    response \u003d requests.put("},{"line_number":390,"context_line":"        url, data\u003djson.dumps(data, indent\u003d2), headers\u003dauth_header)"},{"line_number":391,"context_line":"    response.raise_for_status()"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"51b00df6_b1b84e60","line":390,"in_reply_to":"1d3a5acd_2e34ff05","updated":"2021-03-17 17:08:14.000000000","message":"Done","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"56108a02384b4996ffb9646954adc3f53f966086","unresolved":true,"context_lines":[{"line_number":391,"context_line":"    response.raise_for_status()"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"def get_configuration_mold(node, url):"},{"line_number":395,"context_line":"    \"\"\"Gets configuration mold from indicated location."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    :param node: A node object."}],"source_content_type":"text/x-python","patch_set":1,"id":"3df60a40_b69997e3","line":394,"updated":"2021-03-11 23:55:53.000000000","message":"I would pass the task in and allow the task\u0027s context to be passed through.","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"22ec33c5a93b58f8289620982be9deb0822e6a95","unresolved":false,"context_lines":[{"line_number":391,"context_line":"    response.raise_for_status()"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"def get_configuration_mold(node, url):"},{"line_number":395,"context_line":"    \"\"\"Gets configuration mold from indicated location."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    :param node: A node object."}],"source_content_type":"text/x-python","patch_set":1,"id":"c7337f1c_d00a4cad","line":394,"in_reply_to":"3df60a40_b69997e3","updated":"2021-03-17 17:08:14.000000000","message":"Done","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"56108a02384b4996ffb9646954adc3f53f966086","unresolved":true,"context_lines":[{"line_number":404,"context_line":"    :raises HTTPError: If failed to complete HTTP request."},{"line_number":405,"context_line":"    \"\"\""},{"line_number":406,"context_line":"    auth_header \u003d _get_auth_header(node)"},{"line_number":407,"context_line":"    response \u003d requests.get(url, headers\u003dauth_header)"},{"line_number":408,"context_line":"    if response.status_code \u003d\u003d requests.codes.ok:"},{"line_number":409,"context_line":"        return response.json()"},{"line_number":410,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"acd35d92_7ac5ce8d","line":407,"updated":"2021-03-11 23:55:53.000000000","message":"Same comment regarding requests invocation from line 390.","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"22ec33c5a93b58f8289620982be9deb0822e6a95","unresolved":false,"context_lines":[{"line_number":404,"context_line":"    :raises HTTPError: If failed to complete HTTP request."},{"line_number":405,"context_line":"    \"\"\""},{"line_number":406,"context_line":"    auth_header \u003d _get_auth_header(node)"},{"line_number":407,"context_line":"    response \u003d requests.get(url, headers\u003dauth_header)"},{"line_number":408,"context_line":"    if response.status_code \u003d\u003d requests.codes.ok:"},{"line_number":409,"context_line":"        return response.json()"},{"line_number":410,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1eef075f_756eb283","line":407,"in_reply_to":"acd35d92_7ac5ce8d","updated":"2021-03-17 17:08:14.000000000","message":"Done","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"56108a02384b4996ffb9646954adc3f53f966086","unresolved":true,"context_lines":[{"line_number":420,"context_line":"    \"\"\""},{"line_number":421,"context_line":"    auth_header \u003d None"},{"line_number":422,"context_line":"    if CONF.mold_storage \u003d\u003d \u0027swift\u0027:"},{"line_number":423,"context_line":"        auth_token \u003d node.driver_internal_info.get(\u0027auth_token\u0027)"},{"line_number":424,"context_line":"        if auth_token:"},{"line_number":425,"context_line":"            auth_header \u003d {\u0027X-Auth-Token\u0027: auth_token}"},{"line_number":426,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9781ab81_f7db8cf3","line":423,"updated":"2021-03-11 23:55:53.000000000","message":"Use swift\u0027s client and just pass in the task context. Swift\u0027s client can sort it out.","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"22ec33c5a93b58f8289620982be9deb0822e6a95","unresolved":true,"context_lines":[{"line_number":420,"context_line":"    \"\"\""},{"line_number":421,"context_line":"    auth_header \u003d None"},{"line_number":422,"context_line":"    if CONF.mold_storage \u003d\u003d \u0027swift\u0027:"},{"line_number":423,"context_line":"        auth_token \u003d node.driver_internal_info.get(\u0027auth_token\u0027)"},{"line_number":424,"context_line":"        if auth_token:"},{"line_number":425,"context_line":"            auth_header \u003d {\u0027X-Auth-Token\u0027: auth_token}"},{"line_number":426,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"a66f6852_f8987bba","line":423,"in_reply_to":"9781ab81_f7db8cf3","updated":"2021-03-17 17:08:14.000000000","message":"Looking at swift\u0027s client I couldn\u0027t find a way to use full URLs, only by container, object name, etc.. If I switched to that, then I would have to deconstruct the URL and I prefer not to do that.\n\nKeeping `requests` with Swift, but taking token for task\u0027s context.","commit_id":"8b953bfb8bc269e4de18eda6c7a5be9fd41142ef"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9cb069c4ee88f30e2560af030426bd8a0fdc4215","unresolved":true,"context_lines":[{"line_number":402,"context_line":"    \"\"\""},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    @tenacity.retry("},{"line_number":405,"context_line":"        retry\u003dtenacity.retry_if_exception_type(requests.exceptions.HTTPError),"},{"line_number":406,"context_line":"        stop\u003dtenacity.stop_after_attempt(3),"},{"line_number":407,"context_line":"        wait\u003dtenacity.wait_fixed(3),"},{"line_number":408,"context_line":"        reraise\u003dTrue"}],"source_content_type":"text/x-python","patch_set":2,"id":"896e0cbd_2591b54b","line":405,"range":{"start_line":405,"start_character":46,"end_line":405,"end_character":78},"updated":"2021-03-18 14:34:38.000000000","message":"Lets be a little more specific on types of errors we should retry on. Unauthorized shouldn\u0027t be retried, where as ConnectionError should be.","commit_id":"169a30451c6e619f4d7b6dff5a738e94a1791d89"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"d4fe7af0f68c796f03331f1b77e65ac765ce8975","unresolved":false,"context_lines":[{"line_number":402,"context_line":"    \"\"\""},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    @tenacity.retry("},{"line_number":405,"context_line":"        retry\u003dtenacity.retry_if_exception_type(requests.exceptions.HTTPError),"},{"line_number":406,"context_line":"        stop\u003dtenacity.stop_after_attempt(3),"},{"line_number":407,"context_line":"        wait\u003dtenacity.wait_fixed(3),"},{"line_number":408,"context_line":"        reraise\u003dTrue"}],"source_content_type":"text/x-python","patch_set":2,"id":"8001bdba_c19f6f82","line":405,"range":{"start_line":405,"start_character":46,"end_line":405,"end_character":78},"in_reply_to":"896e0cbd_2591b54b","updated":"2021-03-19 15:34:08.000000000","message":"Done","commit_id":"169a30451c6e619f4d7b6dff5a738e94a1791d89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9cb069c4ee88f30e2560af030426bd8a0fdc4215","unresolved":true,"context_lines":[{"line_number":429,"context_line":"    :raises HTTPError: If failed to complete HTTP request."},{"line_number":430,"context_line":"    \"\"\""},{"line_number":431,"context_line":"    @tenacity.retry("},{"line_number":432,"context_line":"        retry\u003dtenacity.retry_if_exception_type(requests.exceptions.HTTPError),"},{"line_number":433,"context_line":"        stop\u003dtenacity.stop_after_attempt(3),"},{"line_number":434,"context_line":"        wait\u003dtenacity.wait_fixed(3),"},{"line_number":435,"context_line":"        reraise\u003dTrue"},{"line_number":436,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":2,"id":"215289a2_10aea628","line":433,"range":{"start_line":432,"start_character":0,"end_line":433,"end_character":44},"updated":"2021-03-18 14:34:38.000000000","message":"Same as above. Specific error handling because we don\u0027t need this retrying for some period of time due to a legitimate failure or misconfiguration.","commit_id":"169a30451c6e619f4d7b6dff5a738e94a1791d89"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"d4fe7af0f68c796f03331f1b77e65ac765ce8975","unresolved":false,"context_lines":[{"line_number":429,"context_line":"    :raises HTTPError: If failed to complete HTTP request."},{"line_number":430,"context_line":"    \"\"\""},{"line_number":431,"context_line":"    @tenacity.retry("},{"line_number":432,"context_line":"        retry\u003dtenacity.retry_if_exception_type(requests.exceptions.HTTPError),"},{"line_number":433,"context_line":"        stop\u003dtenacity.stop_after_attempt(3),"},{"line_number":434,"context_line":"        wait\u003dtenacity.wait_fixed(3),"},{"line_number":435,"context_line":"        reraise\u003dTrue"},{"line_number":436,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf9dc622_6b087265","line":433,"range":{"start_line":432,"start_character":0,"end_line":433,"end_character":44},"in_reply_to":"215289a2_10aea628","updated":"2021-03-19 15:34:08.000000000","message":"Done","commit_id":"169a30451c6e619f4d7b6dff5a738e94a1791d89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9cb069c4ee88f30e2560af030426bd8a0fdc4215","unresolved":true,"context_lines":[{"line_number":454,"context_line":"    \"\"\""},{"line_number":455,"context_line":"    auth_header \u003d None"},{"line_number":456,"context_line":"    if CONF.mold_storage \u003d\u003d \u0027swift\u0027:"},{"line_number":457,"context_line":"        auth_token \u003d task.context.auth_token"},{"line_number":458,"context_line":"        if auth_token:"},{"line_number":459,"context_line":"            auth_header \u003d {\u0027X-Auth-Token\u0027: auth_token}"},{"line_number":460,"context_line":"        else:"},{"line_number":461,"context_line":"            raise exception.IronicException("},{"line_number":462,"context_line":"                _(\u0027Missing auth_token for node %s\u0027) % task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":2,"id":"387537e9_03356414","line":459,"range":{"start_line":457,"start_character":0,"end_line":459,"end_character":54},"updated":"2021-03-18 14:34:38.000000000","message":"Please invoke a proper swift client for storage. You can pass the ?context.session? in to the session variable for it to get what it needs in terms of tokens, credentials, and appropriate information for the cloud.","commit_id":"169a30451c6e619f4d7b6dff5a738e94a1791d89"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"d4fe7af0f68c796f03331f1b77e65ac765ce8975","unresolved":true,"context_lines":[{"line_number":454,"context_line":"    \"\"\""},{"line_number":455,"context_line":"    auth_header \u003d None"},{"line_number":456,"context_line":"    if CONF.mold_storage \u003d\u003d \u0027swift\u0027:"},{"line_number":457,"context_line":"        auth_token \u003d task.context.auth_token"},{"line_number":458,"context_line":"        if auth_token:"},{"line_number":459,"context_line":"            auth_header \u003d {\u0027X-Auth-Token\u0027: auth_token}"},{"line_number":460,"context_line":"        else:"},{"line_number":461,"context_line":"            raise exception.IronicException("},{"line_number":462,"context_line":"                _(\u0027Missing auth_token for node %s\u0027) % task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":2,"id":"f8853abf_a0c6ab15","line":459,"range":{"start_line":457,"start_character":0,"end_line":459,"end_character":54},"in_reply_to":"387537e9_03356414","updated":"2021-03-19 15:34:08.000000000","message":"will discuss this","commit_id":"169a30451c6e619f4d7b6dff5a738e94a1791d89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9cb069c4ee88f30e2560af030426bd8a0fdc4215","unresolved":true,"context_lines":[{"line_number":460,"context_line":"        else:"},{"line_number":461,"context_line":"            raise exception.IronicException("},{"line_number":462,"context_line":"                _(\u0027Missing auth_token for node %s\u0027) % task.node.uuid)"},{"line_number":463,"context_line":"    elif CONF.mold_storage \u003d\u003d \u0027web\u0027:"},{"line_number":464,"context_line":"        if CONF.mold_user and CONF.mold_password:"},{"line_number":465,"context_line":"            auth_header \u003d {\u0027Authorization\u0027: \u0027Basic %s\u0027"},{"line_number":466,"context_line":"                           % base64.encode_as_text("}],"source_content_type":"text/x-python","patch_set":2,"id":"00a0f637_91252dd9","line":463,"range":{"start_line":463,"start_character":31,"end_line":463,"end_character":34},"updated":"2021-03-18 14:34:38.000000000","message":"http please.","commit_id":"169a30451c6e619f4d7b6dff5a738e94a1791d89"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"d4fe7af0f68c796f03331f1b77e65ac765ce8975","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        else:"},{"line_number":461,"context_line":"            raise exception.IronicException("},{"line_number":462,"context_line":"                _(\u0027Missing auth_token for node %s\u0027) % task.node.uuid)"},{"line_number":463,"context_line":"    elif CONF.mold_storage \u003d\u003d \u0027web\u0027:"},{"line_number":464,"context_line":"        if CONF.mold_user and CONF.mold_password:"},{"line_number":465,"context_line":"            auth_header \u003d {\u0027Authorization\u0027: \u0027Basic %s\u0027"},{"line_number":466,"context_line":"                           % base64.encode_as_text("}],"source_content_type":"text/x-python","patch_set":2,"id":"86eead3d_2ee5740e","line":463,"range":{"start_line":463,"start_character":31,"end_line":463,"end_character":34},"in_reply_to":"00a0f637_91252dd9","updated":"2021-03-19 15:34:08.000000000","message":"Done","commit_id":"169a30451c6e619f4d7b6dff5a738e94a1791d89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"09cbb3f86275753f22057d8f776933ab07204c61","unresolved":true,"context_lines":[{"line_number":455,"context_line":"        token found in task\u0027s context."},{"line_number":456,"context_line":"    \"\"\""},{"line_number":457,"context_line":"    auth_header \u003d None"},{"line_number":458,"context_line":"    if CONF.mold_storage \u003d\u003d \u0027swift\u0027:"},{"line_number":459,"context_line":"        auth_token \u003d task.context.auth_token"},{"line_number":460,"context_line":"        if auth_token:"},{"line_number":461,"context_line":"            auth_header \u003d {\u0027X-Auth-Token\u0027: auth_token}"},{"line_number":462,"context_line":"        else:"},{"line_number":463,"context_line":"            raise exception.IronicException("},{"line_number":464,"context_line":"                _(\u0027Missing auth_token for node %s\u0027) % task.node.uuid)"},{"line_number":465,"context_line":"    elif CONF.mold_storage \u003d\u003d \u0027http\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"38a66d19_3cfea1b7","line":462,"range":{"start_line":458,"start_character":0,"end_line":462,"end_character":13},"updated":"2021-03-19 15:45:47.000000000","message":"With swift, you should be using the swift client and the context session to post through. The swiftclient will do the right thing and use the existing token from the session or appropriately fallback to the service account if memory serves. We have patterns for this already in ironic.\n\nBesides, the auth_token on the context won\u0027t be there if there is an intermediate step such as that requires a heartbeat.","commit_id":"f5e86d1e5d4487a4ec152a084f1e2ccb13846b4f"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"97ae61c80a2f12a8bbff222149aabe9114fa881a","unresolved":true,"context_lines":[{"line_number":455,"context_line":"        token found in task\u0027s context."},{"line_number":456,"context_line":"    \"\"\""},{"line_number":457,"context_line":"    auth_header \u003d None"},{"line_number":458,"context_line":"    if CONF.mold_storage \u003d\u003d \u0027swift\u0027:"},{"line_number":459,"context_line":"        auth_token \u003d task.context.auth_token"},{"line_number":460,"context_line":"        if auth_token:"},{"line_number":461,"context_line":"            auth_header \u003d {\u0027X-Auth-Token\u0027: auth_token}"},{"line_number":462,"context_line":"        else:"},{"line_number":463,"context_line":"            raise exception.IronicException("},{"line_number":464,"context_line":"                _(\u0027Missing auth_token for node %s\u0027) % task.node.uuid)"},{"line_number":465,"context_line":"    elif CONF.mold_storage \u003d\u003d \u0027http\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"4f029513_61a16b49","line":462,"range":{"start_line":458,"start_character":0,"end_line":462,"end_character":13},"in_reply_to":"38a66d19_3cfea1b7","updated":"2021-03-22 15:40:55.000000000","message":"per review jam meeting - adding TODO note as more digging necessary.","commit_id":"f5e86d1e5d4487a4ec152a084f1e2ccb13846b4f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"075e6d02658f469f20d3050898982b32394a0953","unresolved":true,"context_lines":[{"line_number":431,"context_line":"    \"\"\""},{"line_number":432,"context_line":"    @tenacity.retry("},{"line_number":433,"context_line":"        retry\u003dtenacity.retry_if_exception_type("},{"line_number":434,"context_line":"            requests.exceptions.ConnectionError),"},{"line_number":435,"context_line":"        stop\u003dtenacity.stop_after_attempt(3),"},{"line_number":436,"context_line":"        wait\u003dtenacity.wait_fixed(3),"},{"line_number":437,"context_line":"        reraise\u003dTrue"}],"source_content_type":"text/x-python","patch_set":4,"id":"d013a696_88289d5b","line":434,"range":{"start_line":434,"start_character":3,"end_line":434,"end_character":49},"updated":"2021-03-22 16:41:01.000000000","message":"That works, however it won\u0027t Timeout, but it will catch ConnectTimeout which I think makes sense.","commit_id":"a3eb7432fec545bdb994ad1506e22a3a68c4a36b"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"541fa7b0f724931fe9598c62f8ac5ed2163978d4","unresolved":false,"context_lines":[{"line_number":431,"context_line":"    \"\"\""},{"line_number":432,"context_line":"    @tenacity.retry("},{"line_number":433,"context_line":"        retry\u003dtenacity.retry_if_exception_type("},{"line_number":434,"context_line":"            requests.exceptions.ConnectionError),"},{"line_number":435,"context_line":"        stop\u003dtenacity.stop_after_attempt(3),"},{"line_number":436,"context_line":"        wait\u003dtenacity.wait_fixed(3),"},{"line_number":437,"context_line":"        reraise\u003dTrue"}],"source_content_type":"text/x-python","patch_set":4,"id":"da3721aa_cb253608","line":434,"range":{"start_line":434,"start_character":3,"end_line":434,"end_character":49},"in_reply_to":"d013a696_88289d5b","updated":"2021-03-22 17:18:34.000000000","message":"Ack","commit_id":"a3eb7432fec545bdb994ad1506e22a3a68c4a36b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"075e6d02658f469f20d3050898982b32394a0953","unresolved":true,"context_lines":[{"line_number":432,"context_line":"    @tenacity.retry("},{"line_number":433,"context_line":"        retry\u003dtenacity.retry_if_exception_type("},{"line_number":434,"context_line":"            requests.exceptions.ConnectionError),"},{"line_number":435,"context_line":"        stop\u003dtenacity.stop_after_attempt(3),"},{"line_number":436,"context_line":"        wait\u003dtenacity.wait_fixed(3),"},{"line_number":437,"context_line":"        reraise\u003dTrue"},{"line_number":438,"context_line":"    )"},{"line_number":439,"context_line":"    def _request(url, auth_header):"}],"source_content_type":"text/x-python","patch_set":4,"id":"268a6b38_ae964e1a","line":436,"range":{"start_line":435,"start_character":0,"end_line":436,"end_character":36},"updated":"2021-03-22 16:41:01.000000000","message":"A reason to make these configurable... We have clients who occasionally hit spanning tree issues. This may not survive a hold-down timer on traffic forwarding on a port. This may be good, or may be bad. It is best to let operators configure such parameters, fwiw.","commit_id":"a3eb7432fec545bdb994ad1506e22a3a68c4a36b"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"541fa7b0f724931fe9598c62f8ac5ed2163978d4","unresolved":false,"context_lines":[{"line_number":432,"context_line":"    @tenacity.retry("},{"line_number":433,"context_line":"        retry\u003dtenacity.retry_if_exception_type("},{"line_number":434,"context_line":"            requests.exceptions.ConnectionError),"},{"line_number":435,"context_line":"        stop\u003dtenacity.stop_after_attempt(3),"},{"line_number":436,"context_line":"        wait\u003dtenacity.wait_fixed(3),"},{"line_number":437,"context_line":"        reraise\u003dTrue"},{"line_number":438,"context_line":"    )"},{"line_number":439,"context_line":"    def _request(url, auth_header):"}],"source_content_type":"text/x-python","patch_set":4,"id":"cb676ec8_69ebf921","line":436,"range":{"start_line":435,"start_character":0,"end_line":436,"end_character":36},"in_reply_to":"268a6b38_ae964e1a","updated":"2021-03-22 17:18:34.000000000","message":"Done","commit_id":"a3eb7432fec545bdb994ad1506e22a3a68c4a36b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"075e6d02658f469f20d3050898982b32394a0953","unresolved":true,"context_lines":[{"line_number":456,"context_line":"    \"\"\""},{"line_number":457,"context_line":"    auth_header \u003d None"},{"line_number":458,"context_line":"    if CONF.mold_storage \u003d\u003d \u0027swift\u0027:"},{"line_number":459,"context_line":"        # TODO(ajya) Need to update to use Swift client and context session"},{"line_number":460,"context_line":"        auth_token \u003d task.context.auth_token"},{"line_number":461,"context_line":"        if auth_token:"},{"line_number":462,"context_line":"            auth_header \u003d {\u0027X-Auth-Token\u0027: auth_token}"}],"source_content_type":"text/x-python","patch_set":4,"id":"63d756e1_b4449147","line":459,"updated":"2021-03-22 16:41:01.000000000","message":"Two things going on here:\n1) Swiftclient requires passing in the authtoken and/or service token. It doesn\u0027t actually do the magic for us. Our wrapper needs additional work to decompose URLs as it expects everything to be specific container based. As such, this does need more work but I think it is fine for now if the feature is marked experimental.\n2) The weakness in in-ability to fallback automatically ultimately means this is not going to work if someone has an intermediate deploy/clean step which fires up the ramdisk. or requires an async call-back.  Definite room for improvement there, but I\u0027m much more comfortable with stressing experimental nature in this case.","commit_id":"a3eb7432fec545bdb994ad1506e22a3a68c4a36b"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"541fa7b0f724931fe9598c62f8ac5ed2163978d4","unresolved":false,"context_lines":[{"line_number":456,"context_line":"    \"\"\""},{"line_number":457,"context_line":"    auth_header \u003d None"},{"line_number":458,"context_line":"    if CONF.mold_storage \u003d\u003d \u0027swift\u0027:"},{"line_number":459,"context_line":"        # TODO(ajya) Need to update to use Swift client and context session"},{"line_number":460,"context_line":"        auth_token \u003d task.context.auth_token"},{"line_number":461,"context_line":"        if auth_token:"},{"line_number":462,"context_line":"            auth_header \u003d {\u0027X-Auth-Token\u0027: auth_token}"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa68e22e_52e1faf1","line":459,"in_reply_to":"63d756e1_b4449147","updated":"2021-03-22 17:18:34.000000000","message":"thank you for the details","commit_id":"a3eb7432fec545bdb994ad1506e22a3a68c4a36b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"075e6d02658f469f20d3050898982b32394a0953","unresolved":true,"context_lines":[{"line_number":462,"context_line":"            auth_header \u003d {\u0027X-Auth-Token\u0027: auth_token}"},{"line_number":463,"context_line":"        else:"},{"line_number":464,"context_line":"            raise exception.IronicException("},{"line_number":465,"context_line":"                _(\u0027Missing auth_token for node %s\u0027) % task.node.uuid)"},{"line_number":466,"context_line":"    elif CONF.mold_storage \u003d\u003d \u0027http\u0027:"},{"line_number":467,"context_line":"        if CONF.mold_user and CONF.mold_password:"},{"line_number":468,"context_line":"            auth_header \u003d {\u0027Authorization\u0027: \u0027Basic %s\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"4c051b9f_33f0031f","line":465,"range":{"start_line":465,"start_character":18,"end_line":465,"end_character":49},"updated":"2021-03-22 16:41:01.000000000","message":"It would be useful to understand what is going on. Maybe add \"for configuration mold access\" to the string?","commit_id":"a3eb7432fec545bdb994ad1506e22a3a68c4a36b"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"541fa7b0f724931fe9598c62f8ac5ed2163978d4","unresolved":false,"context_lines":[{"line_number":462,"context_line":"            auth_header \u003d {\u0027X-Auth-Token\u0027: auth_token}"},{"line_number":463,"context_line":"        else:"},{"line_number":464,"context_line":"            raise exception.IronicException("},{"line_number":465,"context_line":"                _(\u0027Missing auth_token for node %s\u0027) % task.node.uuid)"},{"line_number":466,"context_line":"    elif CONF.mold_storage \u003d\u003d \u0027http\u0027:"},{"line_number":467,"context_line":"        if CONF.mold_user and CONF.mold_password:"},{"line_number":468,"context_line":"            auth_header \u003d {\u0027Authorization\u0027: \u0027Basic %s\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"99465548_79a88adb","line":465,"range":{"start_line":465,"start_character":18,"end_line":465,"end_character":49},"in_reply_to":"4c051b9f_33f0031f","updated":"2021-03-22 17:18:34.000000000","message":"Done","commit_id":"a3eb7432fec545bdb994ad1506e22a3a68c4a36b"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"4961c5dd8d9b9f8561888a96fb9cd37d998a0583","unresolved":true,"context_lines":[{"line_number":464,"context_line":"            raise exception.IronicException("},{"line_number":465,"context_line":"                _(\u0027Missing auth_token for configuration mold access for node \u0027"},{"line_number":466,"context_line":"                  \u0027%s\u0027) % task.node.uuid)"},{"line_number":467,"context_line":"    elif CONF.mold_storage \u003d\u003d \u0027http\u0027:"},{"line_number":468,"context_line":"        if CONF.mold_user and CONF.mold_password:"},{"line_number":469,"context_line":"            auth_header \u003d {\u0027Authorization\u0027: \u0027Basic %s\u0027"},{"line_number":470,"context_line":"                           % base64.encode_as_text("}],"source_content_type":"text/x-python","patch_set":5,"id":"5f6d5026_4b9bcbb1","line":467,"range":{"start_line":467,"start_character":0,"end_line":467,"end_character":37},"updated":"2021-03-23 00:42:56.000000000","message":"wonder why http and not https was chosen?","commit_id":"4dd6cc557f66233c87b6671fcbc4e47051c4224e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3dcc60e802d2c01d9610d2f96e768cec17ad0b0e","unresolved":true,"context_lines":[{"line_number":464,"context_line":"            raise exception.IronicException("},{"line_number":465,"context_line":"                _(\u0027Missing auth_token for configuration mold access for node \u0027"},{"line_number":466,"context_line":"                  \u0027%s\u0027) % task.node.uuid)"},{"line_number":467,"context_line":"    elif CONF.mold_storage \u003d\u003d \u0027http\u0027:"},{"line_number":468,"context_line":"        if CONF.mold_user and CONF.mold_password:"},{"line_number":469,"context_line":"            auth_header \u003d {\u0027Authorization\u0027: \u0027Basic %s\u0027"},{"line_number":470,"context_line":"                           % base64.encode_as_text("}],"source_content_type":"text/x-python","patch_set":5,"id":"12097512_40abd28c","line":467,"range":{"start_line":467,"start_character":0,"end_line":467,"end_character":37},"in_reply_to":"5f6d5026_4b9bcbb1","updated":"2021-03-23 13:57:02.000000000","message":"https is just http on an ssl/tls transport. The actual transport is defined by the URL","commit_id":"4dd6cc557f66233c87b6671fcbc4e47051c4224e"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"f91180ea9a52d174585773f4f70bc51f06b59c8e","unresolved":true,"context_lines":[{"line_number":457,"context_line":"    auth_header \u003d None"},{"line_number":458,"context_line":"    if CONF.mold_storage \u003d\u003d \u0027swift\u0027:"},{"line_number":459,"context_line":"        # TODO(ajya) Need to update to use Swift client and context session"},{"line_number":460,"context_line":"        auth_token \u003d swift.get_swift_session().get_token()"},{"line_number":461,"context_line":"        if auth_token:"},{"line_number":462,"context_line":"            auth_header \u003d {\u0027X-Auth-Token\u0027: auth_token}"},{"line_number":463,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"702d7e9d_c7e1452d","line":460,"range":{"start_line":460,"start_character":8,"end_line":460,"end_character":58},"updated":"2021-03-23 18:00:44.000000000","message":"after some integration testing I\u0027m switching to this method - auth_token was empty previously.","commit_id":"ab0443dee7f04c698e70319b57308c1ab40188e6"}],"ironic/tests/unit/drivers/test_utils.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":"5c357cdad241ab4203076efd14178b51bfb158d2","unresolved":true,"context_lines":[{"line_number":411,"context_line":"                              task, method\u003d\u0027fake_method\u0027)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"class ConfigurationMoldTestCase(db_base.DbTestCase):"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def setUp(self):"},{"line_number":417,"context_line":"        super(ConfigurationMoldTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":6,"id":"29c1d591_37b0f1f7","line":414,"updated":"2021-03-24 15:34:16.000000000","message":"I don\u0027t see anywhere where we\u0027re at least checking that the retry is not out of control or that it is doing the right thing. That is semi-contracted/ensured behavior, and we should likely have a test and appropriate checks to ensure that it is behaving as we expect.\n\nI\u0027d like to see it as a follow-up, but don\u0027t see it explicitly blocking this patch.","commit_id":"ab0443dee7f04c698e70319b57308c1ab40188e6"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1839a28fefea5425ba460f7c8d2dc731866d0980","unresolved":false,"context_lines":[{"line_number":411,"context_line":"                              task, method\u003d\u0027fake_method\u0027)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"class ConfigurationMoldTestCase(db_base.DbTestCase):"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def setUp(self):"},{"line_number":417,"context_line":"        super(ConfigurationMoldTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ca2cac4_6223fc4a","line":414,"in_reply_to":"29c1d591_37b0f1f7","updated":"2021-03-26 09:41:59.000000000","message":"Done","commit_id":"ab0443dee7f04c698e70319b57308c1ab40188e6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5c357cdad241ab4203076efd14178b51bfb158d2","unresolved":true,"context_lines":[{"line_number":487,"context_line":"        response \u003d mock.MagicMock()"},{"line_number":488,"context_line":"        response.status_code \u003d 404"},{"line_number":489,"context_line":"        response.raise_for_status.side_effect \u003d requests.exceptions.HTTPError"},{"line_number":490,"context_line":"        mock_put.return_value \u003d response"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":493,"context_line":"            self.assertRaises("}],"source_content_type":"text/x-python","patch_set":6,"id":"e4cbd3e8_22e2c986","line":490,"updated":"2021-03-24 15:34:16.000000000","message":"nit: ideally, we should check that put was only called once.","commit_id":"ab0443dee7f04c698e70319b57308c1ab40188e6"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1839a28fefea5425ba460f7c8d2dc731866d0980","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        response \u003d mock.MagicMock()"},{"line_number":488,"context_line":"        response.status_code \u003d 404"},{"line_number":489,"context_line":"        response.raise_for_status.side_effect \u003d requests.exceptions.HTTPError"},{"line_number":490,"context_line":"        mock_put.return_value \u003d response"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":493,"context_line":"            self.assertRaises("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a2fb5df_6b170d7b","line":490,"in_reply_to":"e4cbd3e8_22e2c986","updated":"2021-03-26 09:41:59.000000000","message":"Done","commit_id":"ab0443dee7f04c698e70319b57308c1ab40188e6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5c357cdad241ab4203076efd14178b51bfb158d2","unresolved":true,"context_lines":[{"line_number":576,"context_line":"        response.status_code \u003d 404"},{"line_number":577,"context_line":"        response.raise_for_status.side_effect \u003d requests.exceptions.HTTPError"},{"line_number":578,"context_line":"        mock_get.return_value \u003d response"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":581,"context_line":"            self.assertRaises("},{"line_number":582,"context_line":"                requests.exceptions.HTTPError,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3e9b464c_347f6d33","line":579,"updated":"2021-03-24 15:34:16.000000000","message":"nit: we should ensure the get is only called once in this case.","commit_id":"ab0443dee7f04c698e70319b57308c1ab40188e6"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1839a28fefea5425ba460f7c8d2dc731866d0980","unresolved":false,"context_lines":[{"line_number":576,"context_line":"        response.status_code \u003d 404"},{"line_number":577,"context_line":"        response.raise_for_status.side_effect \u003d requests.exceptions.HTTPError"},{"line_number":578,"context_line":"        mock_get.return_value \u003d response"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":581,"context_line":"            self.assertRaises("},{"line_number":582,"context_line":"                requests.exceptions.HTTPError,"}],"source_content_type":"text/x-python","patch_set":6,"id":"d2be3341_af222230","line":579,"in_reply_to":"3e9b464c_347f6d33","updated":"2021-03-26 09:41:59.000000000","message":"Done","commit_id":"ab0443dee7f04c698e70319b57308c1ab40188e6"}]}
