)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"910a40cc4d8642d2c630f8d2528b97dc7c90d9c4","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Arun S A G \u003csagarun@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-03-30 11:49:50 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add agent_state and agent_status params to heartbeat"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"agent_state is used by anaconda ramdisk to inform the"},{"line_number":10,"context_line":"conductor about state of the deployment. Valid agent"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"be101396_1ffdea1c","line":7,"updated":"2021-03-30 22:48:13.000000000","message":"looks like agent_status and agent_status_message are being added.","commit_id":"b8b5304e1a83cf43b29fa1b54af6365b8ed1ff0e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"910a40cc4d8642d2c630f8d2528b97dc7c90d9c4","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add agent_state and agent_status params to heartbeat"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"agent_state is used by anaconda ramdisk to inform the"},{"line_number":10,"context_line":"conductor about state of the deployment. Valid agent"},{"line_number":11,"context_line":"states are \u0027start\u0027, \u0027end\u0027 and \u0027error\u0027. The agent_status"},{"line_number":12,"context_line":"is used to describe the why the agent_state is set to a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"246a2062_e63dfcd4","line":9,"updated":"2021-03-30 22:48:13.000000000","message":"s/agent_state/agent_status/","commit_id":"b8b5304e1a83cf43b29fa1b54af6365b8ed1ff0e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"910a40cc4d8642d2c630f8d2528b97dc7c90d9c4","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"agent_state is used by anaconda ramdisk to inform the"},{"line_number":10,"context_line":"conductor about state of the deployment. Valid agent"},{"line_number":11,"context_line":"states are \u0027start\u0027, \u0027end\u0027 and \u0027error\u0027. The agent_status"},{"line_number":12,"context_line":"is used to describe the why the agent_state is set to a"},{"line_number":13,"context_line":"particular state."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"01cbafd3_3c94713b","line":11,"updated":"2021-03-30 22:48:13.000000000","message":"s/agent_status/agent_status_message/","commit_id":"b8b5304e1a83cf43b29fa1b54af6365b8ed1ff0e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"910a40cc4d8642d2c630f8d2528b97dc7c90d9c4","unresolved":true,"context_lines":[{"line_number":9,"context_line":"agent_state is used by anaconda ramdisk to inform the"},{"line_number":10,"context_line":"conductor about state of the deployment. Valid agent"},{"line_number":11,"context_line":"states are \u0027start\u0027, \u0027end\u0027 and \u0027error\u0027. The agent_status"},{"line_number":12,"context_line":"is used to describe the why the agent_state is set to a"},{"line_number":13,"context_line":"particular state."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"When anaconda finishes deployment the agent_state is"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"9aacc00d_2b122ab4","line":12,"updated":"2021-03-30 22:48:13.000000000","message":"nit s/the why/why/\n\noh, and s/agent_state/agent_status/","commit_id":"b8b5304e1a83cf43b29fa1b54af6365b8ed1ff0e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"910a40cc4d8642d2c630f8d2528b97dc7c90d9c4","unresolved":true,"context_lines":[{"line_number":12,"context_line":"is used to describe the why the agent_state is set to a"},{"line_number":13,"context_line":"particular state."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"When anaconda finishes deployment the agent_state is"},{"line_number":16,"context_line":"set to \u0027end\u0027. When anaconda ramdisk is unable to deploy"},{"line_number":17,"context_line":"the  OS for some reason the agent_state is set to \u0027error\u0027."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"15d36280_ac5b4051","line":15,"updated":"2021-03-30 22:48:13.000000000","message":"agent_status","commit_id":"b8b5304e1a83cf43b29fa1b54af6365b8ed1ff0e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"910a40cc4d8642d2c630f8d2528b97dc7c90d9c4","unresolved":true,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"When anaconda finishes deployment the agent_state is"},{"line_number":16,"context_line":"set to \u0027end\u0027. When anaconda ramdisk is unable to deploy"},{"line_number":17,"context_line":"the  OS for some reason the agent_state is set to \u0027error\u0027."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"PXEAnacondaDeploy is implemented to handle the \u0027anaconda\u0027"},{"line_number":20,"context_line":"deploy interface. PXEAnacondaDeploy ties to together pieces"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"79181bbb_6bf665a0","line":17,"updated":"2021-03-30 22:48:13.000000000","message":"ditto","commit_id":"b8b5304e1a83cf43b29fa1b54af6365b8ed1ff0e"}],"ironic/api/controllers/v1/ramdisk.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"910a40cc4d8642d2c630f8d2528b97dc7c90d9c4","unresolved":true,"context_lines":[{"line_number":179,"context_line":"            anaconda ramdisk to send status back to Ironic. The valid states"},{"line_number":180,"context_line":"            are \u0027start\u0027, \u0027end\u0027, \u0027error\u0027"},{"line_number":181,"context_line":"        :param agent_status_message: Status message describing current"},{"line_number":182,"context_line":"            agent_status"},{"line_number":183,"context_line":"        :raises: NodeNotFound if node with provided UUID or name was not found."},{"line_number":184,"context_line":"        :raises: InvalidUuidOrName if node_ident is not valid name or UUID."},{"line_number":185,"context_line":"        :raises: NoValidHost if RPC topic for node could not be retrieved."}],"source_content_type":"text/x-python","patch_set":13,"id":"969ebe96_1d6f9a58","line":182,"updated":"2021-03-30 22:48:13.000000000","message":"is this always set if agent_status is set?","commit_id":"b8b5304e1a83cf43b29fa1b54af6365b8ed1ff0e"},{"author":{"_account_id":12640,"name":"Arun S A G","email":"sagarun@gmail.com","username":"sagarun"},"change_message_id":"d8a6f52ee1a36f06791a70e93c4754117be1142a","unresolved":true,"context_lines":[{"line_number":179,"context_line":"            anaconda ramdisk to send status back to Ironic. The valid states"},{"line_number":180,"context_line":"            are \u0027start\u0027, \u0027end\u0027, \u0027error\u0027"},{"line_number":181,"context_line":"        :param agent_status_message: Status message describing current"},{"line_number":182,"context_line":"            agent_status"},{"line_number":183,"context_line":"        :raises: NodeNotFound if node with provided UUID or name was not found."},{"line_number":184,"context_line":"        :raises: InvalidUuidOrName if node_ident is not valid name or UUID."},{"line_number":185,"context_line":"        :raises: NoValidHost if RPC topic for node could not be retrieved."}],"source_content_type":"text/x-python","patch_set":13,"id":"e1d71708_e80d77d0","line":182,"in_reply_to":"969ebe96_1d6f9a58","updated":"2021-03-30 23:12:23.000000000","message":"No. agent_status_message is optional, so it could be None.","commit_id":"b8b5304e1a83cf43b29fa1b54af6365b8ed1ff0e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"910a40cc4d8642d2c630f8d2528b97dc7c90d9c4","unresolved":true,"context_lines":[{"line_number":225,"context_line":"            valid_states \u003d \u0027,\u0027.join(AGENT_VALID_STATES)"},{"line_number":226,"context_line":"            LOG.error(\u0027Agent heartbeat received for node %(node)s \u0027"},{"line_number":227,"context_line":"                      \u0027has an invalid agent state: %(agent_status)s. \u0027"},{"line_number":228,"context_line":"                      \u0027Valid states are %(valid_states)s \u0027,"},{"line_number":229,"context_line":"                      {\u0027node\u0027: node_ident, \u0027agent_status\u0027: agent_status,"},{"line_number":230,"context_line":"                       \u0027valid_states\u0027: valid_states})"},{"line_number":231,"context_line":"            msg \u003d (_(\u0027Agent state is invalid. Valid states are %s.\u0027) %"}],"source_content_type":"text/x-python","patch_set":13,"id":"e77e1673_eab1a481","line":228,"updated":"2021-03-30 22:48:13.000000000","message":"not sure if people would like this to be \u0027state\u0027 or \u0027status\u0027... Probably \u0027status\u0027 since that\u0027s the name of the parameter?","commit_id":"b8b5304e1a83cf43b29fa1b54af6365b8ed1ff0e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"910a40cc4d8642d2c630f8d2528b97dc7c90d9c4","unresolved":true,"context_lines":[{"line_number":228,"context_line":"                      \u0027Valid states are %(valid_states)s \u0027,"},{"line_number":229,"context_line":"                      {\u0027node\u0027: node_ident, \u0027agent_status\u0027: agent_status,"},{"line_number":230,"context_line":"                       \u0027valid_states\u0027: valid_states})"},{"line_number":231,"context_line":"            msg \u003d (_(\u0027Agent state is invalid. Valid states are %s.\u0027) %"},{"line_number":232,"context_line":"                   valid_states)"},{"line_number":233,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ebf5e13d_ccc43680","line":231,"updated":"2021-03-30 22:48:13.000000000","message":"s/state/status/","commit_id":"b8b5304e1a83cf43b29fa1b54af6365b8ed1ff0e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"708f21ce8103a789c57ffd6dda609b37fce5ba77","unresolved":true,"context_lines":[{"line_number":196,"context_line":"        if ((agent_status or agent_status_message)"},{"line_number":197,"context_line":"                and not api_utils.allow_status_in_heartbeat()):"},{"line_number":198,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":199,"context_line":"                _(\u0027Fields \"agent_status\" and \"agent_status_message\"\u0027"},{"line_number":200,"context_line":"                  \u0027not recognised.\u0027)"},{"line_number":201,"context_line":"            )"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"b5cae8f5_1697c9cc","line":199,"updated":"2021-03-31 21:11:23.000000000","message":"nit, missing a space at the end","commit_id":"e248a115487d388a1656e44453b0a9f8fd36c446"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"7617146c7dffd970144493497651ff040bd3344d","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        if ((agent_status or agent_status_message)"},{"line_number":197,"context_line":"                and not api_utils.allow_status_in_heartbeat()):"},{"line_number":198,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":199,"context_line":"                _(\u0027Fields \"agent_status\" and \"agent_status_message\"\u0027"},{"line_number":200,"context_line":"                  \u0027not recognised.\u0027)"},{"line_number":201,"context_line":"            )"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"6776e41f_5b18d53e","line":199,"in_reply_to":"b5cae8f5_1697c9cc","updated":"2021-03-31 21:48:56.000000000","message":"Done","commit_id":"e248a115487d388a1656e44453b0a9f8fd36c446"}],"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":"7276608243c879a81cd26684d482da00a17e3660","unresolved":true,"context_lines":[{"line_number":3034,"context_line":"    @messaging.expected_exceptions(exception.InvalidParameterValue)"},{"line_number":3035,"context_line":"    @messaging.expected_exceptions(exception.NoFreeConductorWorker)"},{"line_number":3036,"context_line":"    def heartbeat(self, context, node_id, callback_url, agent_version\u003dNone,"},{"line_number":3037,"context_line":"                  agent_token\u003dNone, agent_state\u003dNone, agent_status\u003dNone,"},{"line_number":3038,"context_line":"                  agent_verify_ca\u003dNone):"},{"line_number":3039,"context_line":"        \"\"\"Process a heartbeat from the ramdisk."},{"line_number":3040,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"34c67d40_8ee73694","line":3037,"updated":"2021-03-27 00:02:26.000000000","message":"aieeeee similar names of danger! :)","commit_id":"64227493e3c82f14aad5b8b4fe799eb7b971a8f0"},{"author":{"_account_id":12640,"name":"Arun S A G","email":"sagarun@gmail.com","username":"sagarun"},"change_message_id":"6825c3681071816260f4b849eee028f3bbceef9a","unresolved":false,"context_lines":[{"line_number":3034,"context_line":"    @messaging.expected_exceptions(exception.InvalidParameterValue)"},{"line_number":3035,"context_line":"    @messaging.expected_exceptions(exception.NoFreeConductorWorker)"},{"line_number":3036,"context_line":"    def heartbeat(self, context, node_id, callback_url, agent_version\u003dNone,"},{"line_number":3037,"context_line":"                  agent_token\u003dNone, agent_state\u003dNone, agent_status\u003dNone,"},{"line_number":3038,"context_line":"                  agent_verify_ca\u003dNone):"},{"line_number":3039,"context_line":"        \"\"\"Process a heartbeat from the ramdisk."},{"line_number":3040,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"38c22ea4_85632aea","line":3037,"in_reply_to":"34c67d40_8ee73694","updated":"2021-03-29 09:08:37.000000000","message":"Done","commit_id":"64227493e3c82f14aad5b8b4fe799eb7b971a8f0"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"910a40cc4d8642d2c630f8d2528b97dc7c90d9c4","unresolved":true,"context_lines":[{"line_number":3058,"context_line":"        \"\"\""},{"line_number":3059,"context_line":"        LOG.debug(\u0027RPC heartbeat called for node %s\u0027, node_id)"},{"line_number":3060,"context_line":""},{"line_number":3061,"context_line":"        # Do not raise exception if version is missing in when agent is"},{"line_number":3062,"context_line":"        # anaconda ramdisk."},{"line_number":3063,"context_line":"        if agent_version is None and agent_status is None:"},{"line_number":3064,"context_line":"            LOG.error(\u0027Node %s transmitted no version information which \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"be410f81_52bca58a","line":3061,"updated":"2021-03-30 22:48:13.000000000","message":"nit s/in when/when/ I think?\n\nHmm, is the plan to add an agent version to anaconda? If not, what if the anaconda driver is enhanced in the future...","commit_id":"b8b5304e1a83cf43b29fa1b54af6365b8ed1ff0e"},{"author":{"_account_id":12640,"name":"Arun S A G","email":"sagarun@gmail.com","username":"sagarun"},"change_message_id":"d8a6f52ee1a36f06791a70e93c4754117be1142a","unresolved":false,"context_lines":[{"line_number":3058,"context_line":"        \"\"\""},{"line_number":3059,"context_line":"        LOG.debug(\u0027RPC heartbeat called for node %s\u0027, node_id)"},{"line_number":3060,"context_line":""},{"line_number":3061,"context_line":"        # Do not raise exception if version is missing in when agent is"},{"line_number":3062,"context_line":"        # anaconda ramdisk."},{"line_number":3063,"context_line":"        if agent_version is None and agent_status is None:"},{"line_number":3064,"context_line":"            LOG.error(\u0027Node %s transmitted no version information which \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"3656bb01_a5661acb","line":3061,"in_reply_to":"be410f81_52bca58a","updated":"2021-03-30 23:12:23.000000000","message":"No. There are no plans to add agent version to anaconda.  If the driver is enhanced in the future to have an agent_version and we want the agent_version to be not None then we have to change this if condition in the future.","commit_id":"b8b5304e1a83cf43b29fa1b54af6365b8ed1ff0e"}],"ironic/drivers/modules/ks.cfg.template":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"708f21ce8103a789c57ffd6dda609b37fce5ba77","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# Sending callback after the installation is mandatory"},{"line_number":34,"context_line":"%post"},{"line_number":35,"context_line":"/usr/bin/curl -X PUT -H \u0027Content-Type: application/json\u0027 -H \u0027Accept: application/json\u0027 -H \u0027X-OpenStack-Ironic-API-Version: 1.72\u0027 -d \u0027{\"agent_token\": \"{{ ks_options.agent_token }}\", \"agent_status\": \"end\", \"agent_status_message\": \"Deployment completed successfully.\"}\u0027 {{ ks_options.heartbeat_url }}"},{"line_number":36,"context_line":"%end"},{"line_number":37,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"9267a76a_2b3d55f1","line":35,"updated":"2021-03-31 21:11:23.000000000","message":"i suppose this is OK? what happens when we have newer API versions? guess it doesn\u0027t matter?","commit_id":"e248a115487d388a1656e44453b0a9f8fd36c446"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"de0671b88cdb38c993b42c22aafcef30fe5ce302","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# Sending callback after the installation is mandatory"},{"line_number":34,"context_line":"%post"},{"line_number":35,"context_line":"/usr/bin/curl -X PUT -H \u0027Content-Type: application/json\u0027 -H \u0027Accept: application/json\u0027 -H \u0027X-OpenStack-Ironic-API-Version: 1.72\u0027 -d \u0027{\"agent_token\": \"{{ ks_options.agent_token }}\", \"agent_status\": \"end\", \"agent_status_message\": \"Deployment completed successfully.\"}\u0027 {{ ks_options.heartbeat_url }}"},{"line_number":36,"context_line":"%end"},{"line_number":37,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"6c63f6e0_5797ebe5","line":35,"in_reply_to":"9267a76a_2b3d55f1","updated":"2021-03-31 22:05:23.000000000","message":"Shouldn\u0027t, in the grand scheme of universe. We keep it stable and test it.","commit_id":"e248a115487d388a1656e44453b0a9f8fd36c446"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"7617146c7dffd970144493497651ff040bd3344d","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# Sending callback after the installation is mandatory"},{"line_number":34,"context_line":"%post"},{"line_number":35,"context_line":"/usr/bin/curl -X PUT -H \u0027Content-Type: application/json\u0027 -H \u0027Accept: application/json\u0027 -H \u0027X-OpenStack-Ironic-API-Version: 1.72\u0027 -d \u0027{\"agent_token\": \"{{ ks_options.agent_token }}\", \"agent_status\": \"end\", \"agent_status_message\": \"Deployment completed successfully.\"}\u0027 {{ ks_options.heartbeat_url }}"},{"line_number":36,"context_line":"%end"},{"line_number":37,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"74982ed8_45a5fa22","line":35,"in_reply_to":"9267a76a_2b3d55f1","updated":"2021-03-31 21:48:56.000000000","message":"We want to keep this API microversion to ensure the API is still conforming to these commands. They\u0027ll have to be modified in the future if MIN is ever \u003e 1.72 or we change the API (and these curl commands) further.","commit_id":"e248a115487d388a1656e44453b0a9f8fd36c446"}],"ironic/drivers/modules/pxe.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"1133fe31046fade4e4b54e3b840a7e2c90e84ac4","unresolved":true,"context_lines":[{"line_number":269,"context_line":"        driver_internal_info[\u0027agent_last_heartbeat\u0027] \u003d str("},{"line_number":270,"context_line":"            timeutils.utcnow().isoformat())"},{"line_number":271,"context_line":"        if agent_verify_ca:"},{"line_number":272,"context_line":"            driver_internal_info[\u0027agent_verify_ca\u0027] \u003d agent_verify_ca"},{"line_number":273,"context_line":"        if agent_state:"},{"line_number":274,"context_line":"            driver_internal_info[\u0027agent_state\u0027] \u003d agent_state"},{"line_number":275,"context_line":"        if agent_status:"}],"source_content_type":"text/x-python","patch_set":5,"id":"f0a51e98_2d042ab4","line":272,"updated":"2021-03-19 22:51:35.000000000","message":"I strongly recommend you consider using another name/config to track this. Direct deploy sets up the IPA ramdisk to pass these checks, it might be difficult to do the same automatically in kickstart, and most of the defaults are written assuming that automation is in place and working.","commit_id":"1309514e37d36c32e77004007096e8b5b556dd8d"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"d0a1bd9e7f6aebbde55c65b8bc168d99aaf34b15","unresolved":true,"context_lines":[{"line_number":238,"context_line":"        :param callback_url: agent HTTP API URL."},{"line_number":239,"context_line":"        :param agent_version: The version of the agent that is heartbeating"},{"line_number":240,"context_line":"        :param agent_verify_ca: TLS certificate for the agent."},{"line_number":241,"context_line":"        :param agent_state: State of the heartbeating agent"},{"line_number":242,"context_line":"        :param agent_status: Status message that describes the agent_state"},{"line_number":243,"context_line":"        \"\"\""},{"line_number":244,"context_line":"        # NOTE(pas-ha) immediately skip the rest if nothing to do"}],"source_content_type":"text/x-python","patch_set":10,"id":"7d0c9921_a73f42b0","line":241,"updated":"2021-03-29 14:22:24.000000000","message":"there\u0027s no agent_state in the specs https://review.opendev.org/c/openstack/ironic-specs/+/748503\nI think this should be agent_status and we should change the next param from \u0027agent_state\u0027 to \u0027agent_status_message\u0027 or similar","commit_id":"0d8477b355104608837ce967f3ad56cc573f46d8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"80aeca6e7e7ebc7fcbef88956c04e927d10f16f0","unresolved":true,"context_lines":[{"line_number":217,"context_line":"               \u0027agent_status_message\u0027: agent_status_message}"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        if self.deploy_has_started(task):"},{"line_number":220,"context_line":"            LOG.info(\u0027The deploy on node %(node_id) has started. The \u0027"},{"line_number":221,"context_line":"                     \u0027agent returned following message: \u0027"},{"line_number":222,"context_line":"                     \u0027%(agent_status_message) \u0027, msg)"},{"line_number":223,"context_line":"            node.touch_provisioning()"}],"source_content_type":"text/x-python","patch_set":14,"id":"2e2cfc97_47441526","line":220,"updated":"2021-03-31 18:47:12.000000000","message":"s/%(node_id)/%(node_id)s/","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"534d6d4262175880c730bdca0a0f054761693677","unresolved":false,"context_lines":[{"line_number":217,"context_line":"               \u0027agent_status_message\u0027: agent_status_message}"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        if self.deploy_has_started(task):"},{"line_number":220,"context_line":"            LOG.info(\u0027The deploy on node %(node_id) has started. The \u0027"},{"line_number":221,"context_line":"                     \u0027agent returned following message: \u0027"},{"line_number":222,"context_line":"                     \u0027%(agent_status_message) \u0027, msg)"},{"line_number":223,"context_line":"            node.touch_provisioning()"}],"source_content_type":"text/x-python","patch_set":14,"id":"eb5c7d5c_7e0ecfa6","line":220,"in_reply_to":"2e2cfc97_47441526","updated":"2021-03-31 21:01:30.000000000","message":"Done","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"80aeca6e7e7ebc7fcbef88956c04e927d10f16f0","unresolved":true,"context_lines":[{"line_number":219,"context_line":"        if self.deploy_has_started(task):"},{"line_number":220,"context_line":"            LOG.info(\u0027The deploy on node %(node_id) has started. The \u0027"},{"line_number":221,"context_line":"                     \u0027agent returned following message: \u0027"},{"line_number":222,"context_line":"                     \u0027%(agent_status_message) \u0027, msg)"},{"line_number":223,"context_line":"            node.touch_provisioning()"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        elif self.deploy_is_done(task):"}],"source_content_type":"text/x-python","patch_set":14,"id":"362dcf59_4d783303","line":222,"updated":"2021-03-31 18:47:12.000000000","message":"s/%(agent_status_message)/%(agent_status_message)s/","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"534d6d4262175880c730bdca0a0f054761693677","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        if self.deploy_has_started(task):"},{"line_number":220,"context_line":"            LOG.info(\u0027The deploy on node %(node_id) has started. The \u0027"},{"line_number":221,"context_line":"                     \u0027agent returned following message: \u0027"},{"line_number":222,"context_line":"                     \u0027%(agent_status_message) \u0027, msg)"},{"line_number":223,"context_line":"            node.touch_provisioning()"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        elif self.deploy_is_done(task):"}],"source_content_type":"text/x-python","patch_set":14,"id":"cd44e0f1_6836bf5f","line":222,"in_reply_to":"362dcf59_4d783303","updated":"2021-03-31 21:01:30.000000000","message":"Done","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"80aeca6e7e7ebc7fcbef88956c04e927d10f16f0","unresolved":true,"context_lines":[{"line_number":225,"context_line":"        elif self.deploy_is_done(task):"},{"line_number":226,"context_line":"            LOG.info(\u0027The deploy on node %(node_id) has ended. The \u0027"},{"line_number":227,"context_line":"                     \u0027agent returned following message: \u0027"},{"line_number":228,"context_line":"                     \u0027%(agent_status_message)\u0027, msg)"},{"line_number":229,"context_line":"            self.reboot_to_instance(task)"},{"line_number":230,"context_line":"        else:"},{"line_number":231,"context_line":"            LOG.error(\u0027The deploy on node %(node_id) failed. The agent \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"ddf80906_a50b9b2e","line":228,"updated":"2021-03-31 18:47:12.000000000","message":"ditto","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"534d6d4262175880c730bdca0a0f054761693677","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        elif self.deploy_is_done(task):"},{"line_number":226,"context_line":"            LOG.info(\u0027The deploy on node %(node_id) has ended. The \u0027"},{"line_number":227,"context_line":"                     \u0027agent returned following message: \u0027"},{"line_number":228,"context_line":"                     \u0027%(agent_status_message)\u0027, msg)"},{"line_number":229,"context_line":"            self.reboot_to_instance(task)"},{"line_number":230,"context_line":"        else:"},{"line_number":231,"context_line":"            LOG.error(\u0027The deploy on node %(node_id) failed. The agent \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"39fba2a2_0fe15c5d","line":228,"in_reply_to":"ddf80906_a50b9b2e","updated":"2021-03-31 21:01:30.000000000","message":"Done","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"80aeca6e7e7ebc7fcbef88956c04e927d10f16f0","unresolved":true,"context_lines":[{"line_number":230,"context_line":"        else:"},{"line_number":231,"context_line":"            LOG.error(\u0027The deploy on node %(node_id) failed. The agent \u0027"},{"line_number":232,"context_line":"                      \u0027returned following error message: \u0027"},{"line_number":233,"context_line":"                      \u0027%(agent_status_message)\u0027, msg)"},{"line_number":234,"context_line":"            deploy_utils.set_failed_state(task, agent_status_message,"},{"line_number":235,"context_line":"                                          collect_logs\u003dFalse)"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"8584df73_b2ec163c","line":233,"updated":"2021-03-31 18:47:12.000000000","message":"ditto","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"534d6d4262175880c730bdca0a0f054761693677","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        else:"},{"line_number":231,"context_line":"            LOG.error(\u0027The deploy on node %(node_id) failed. The agent \u0027"},{"line_number":232,"context_line":"                      \u0027returned following error message: \u0027"},{"line_number":233,"context_line":"                      \u0027%(agent_status_message)\u0027, msg)"},{"line_number":234,"context_line":"            deploy_utils.set_failed_state(task, agent_status_message,"},{"line_number":235,"context_line":"                                          collect_logs\u003dFalse)"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"e61a0453_59e913ef","line":233,"in_reply_to":"8584df73_b2ec163c","updated":"2021-03-31 21:01:30.000000000","message":"Done","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"80aeca6e7e7ebc7fcbef88956c04e927d10f16f0","unresolved":true,"context_lines":[{"line_number":231,"context_line":"            LOG.error(\u0027The deploy on node %(node_id) failed. The agent \u0027"},{"line_number":232,"context_line":"                      \u0027returned following error message: \u0027"},{"line_number":233,"context_line":"                      \u0027%(agent_status_message)\u0027, msg)"},{"line_number":234,"context_line":"            deploy_utils.set_failed_state(task, agent_status_message,"},{"line_number":235,"context_line":"                                          collect_logs\u003dFalse)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    @METRICS.timer(\u0027HeartbeatMixin.heartbeat\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"82e44f4c_569dc16a","line":234,"updated":"2021-03-31 18:47:12.000000000","message":"I don\u0027t know what the agent_status_message string sez. hopefully it has enough info so the reader will understand. eg, maybe \u0027The agent returned following error message: %s\u0027 ? Or even \u0027anaconda agent... \u0027 so it is clear which agent? Well, the node\u0027s driver/interface info should make it clear.","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"534d6d4262175880c730bdca0a0f054761693677","unresolved":true,"context_lines":[{"line_number":231,"context_line":"            LOG.error(\u0027The deploy on node %(node_id) failed. The agent \u0027"},{"line_number":232,"context_line":"                      \u0027returned following error message: \u0027"},{"line_number":233,"context_line":"                      \u0027%(agent_status_message)\u0027, msg)"},{"line_number":234,"context_line":"            deploy_utils.set_failed_state(task, agent_status_message,"},{"line_number":235,"context_line":"                                          collect_logs\u003dFalse)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    @METRICS.timer(\u0027HeartbeatMixin.heartbeat\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"48ee4ee1_aba5136a","line":234,"in_reply_to":"82e44f4c_569dc16a","updated":"2021-03-31 21:01:30.000000000","message":"Since this is in the anaconda specific interface, I did s/the agent/Anaconda/ throughout this methods\u0027 log messages.","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"80aeca6e7e7ebc7fcbef88956c04e927d10f16f0","unresolved":true,"context_lines":[{"line_number":280,"context_line":"        if agent_status:"},{"line_number":281,"context_line":"            driver_internal_info[\u0027agent_status\u0027] \u003d agent_status"},{"line_number":282,"context_line":"        if agent_status_message:"},{"line_number":283,"context_line":"            driver_internal_info[\u0027agent_status_message\u0027] \u003d agent_status_message"},{"line_number":284,"context_line":"        node.driver_internal_info \u003d driver_internal_info"},{"line_number":285,"context_line":"        node.save()"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"48f8df7b_eea206d7","line":283,"updated":"2021-03-31 18:47:12.000000000","message":"Are the above 4 lines the only difference between this heartbeat() method and the one in agent_base.py?","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"534d6d4262175880c730bdca0a0f054761693677","unresolved":true,"context_lines":[{"line_number":280,"context_line":"        if agent_status:"},{"line_number":281,"context_line":"            driver_internal_info[\u0027agent_status\u0027] \u003d agent_status"},{"line_number":282,"context_line":"        if agent_status_message:"},{"line_number":283,"context_line":"            driver_internal_info[\u0027agent_status_message\u0027] \u003d agent_status_message"},{"line_number":284,"context_line":"        node.driver_internal_info \u003d driver_internal_info"},{"line_number":285,"context_line":"        node.save()"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"022aac67_bb492672","line":283,"in_reply_to":"48f8df7b_eea206d7","updated":"2021-03-31 21:01:30.000000000","message":"Yes. And unless there\u0027s a compelling reason otherwise, I don\u0027t see why those changes shouldn\u0027t be done in the agent_base.py version instead... so we moved them there and dropped the new heartbeat method.","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"}],"releasenotes/notes/anaconda-deploy-interface-c04932f6f469227a.yaml":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"80aeca6e7e7ebc7fcbef88956c04e927d10f16f0","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add ``anaconda`` deploy interface to Ironic. This driver will deploy the"},{"line_number":5,"context_line":"    the OS using anaconda installer and kickstart file instead of IPA. To"},{"line_number":6,"context_line":"    support this feature  a new configuration group ``anaconda`` is added to"},{"line_number":7,"context_line":"    Ironic configuration file along with ``default_ks_template`` configuration"},{"line_number":8,"context_line":"    option."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"bdb00a27_14f2a30f","line":5,"updated":"2021-03-31 18:47:12.000000000","message":"nit s/the OS/OS/","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"534d6d4262175880c730bdca0a0f054761693677","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add ``anaconda`` deploy interface to Ironic. This driver will deploy the"},{"line_number":5,"context_line":"    the OS using anaconda installer and kickstart file instead of IPA. To"},{"line_number":6,"context_line":"    support this feature  a new configuration group ``anaconda`` is added to"},{"line_number":7,"context_line":"    Ironic configuration file along with ``default_ks_template`` configuration"},{"line_number":8,"context_line":"    option."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"401cf514_6ca740df","line":5,"in_reply_to":"bdb00a27_14f2a30f","updated":"2021-03-31 21:01:30.000000000","message":"Done","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"09d661dafcc44f4ea39a423fcc9bad99faf212ee","unresolved":true,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    The deploy interface requires the OS Image in glance to be associated with"},{"line_number":11,"context_line":"    \u0027deploy_kernel_id\u0027, \u0027deploy_ramdisk_id\u0027 and \u0027deploy_squashfs_id\u0027"},{"line_number":12,"context_line":"    properties. Optionally a kickstart template also can be uploaded to glance"},{"line_number":13,"context_line":"    and associated with the OS image using \u0027ks_template_id\u0027 property."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    The deploy interface will fetch the kickstart template and validate the"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"5c53898d_6dfaa219","line":12,"updated":"2021-03-31 14:17:01.000000000","message":"Gaaaah, super long feature not. 😭","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"534d6d4262175880c730bdca0a0f054761693677","unresolved":true,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    The deploy interface requires the OS Image in glance to be associated with"},{"line_number":11,"context_line":"    \u0027deploy_kernel_id\u0027, \u0027deploy_ramdisk_id\u0027 and \u0027deploy_squashfs_id\u0027"},{"line_number":12,"context_line":"    properties. Optionally a kickstart template also can be uploaded to glance"},{"line_number":13,"context_line":"    and associated with the OS image using \u0027ks_template_id\u0027 property."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    The deploy interface will fetch the kickstart template and validate the"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"247f5b94_0e23f941","line":12,"in_reply_to":"5c53898d_6dfaa219","updated":"2021-03-31 21:01:30.000000000","message":"Talked to Julia, she was OK with this release note. We owe docs for this ASAP.","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"80aeca6e7e7ebc7fcbef88956c04e927d10f16f0","unresolved":true,"context_lines":[{"line_number":15,"context_line":"    The deploy interface will fetch the kickstart template and validate the"},{"line_number":16,"context_line":"    template and the generated kickstart file. The template is validated to"},{"line_number":17,"context_line":"    make sure all the required variables are preset. The required variables are"},{"line_number":18,"context_line":"    ks_options.liveimg_url, ks_options.agent_token and ks_options.heartbeat_url"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    The kickstart file validation happens using the \u0027ksvalidator\u0027 tool. This"},{"line_number":21,"context_line":"    tool is part of a GPL licensed library and cannot be installed as a"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"6403b91b_97031d8d","line":18,"updated":"2021-03-31 18:47:12.000000000","message":"period missing at the end.","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"534d6d4262175880c730bdca0a0f054761693677","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    The deploy interface will fetch the kickstart template and validate the"},{"line_number":16,"context_line":"    template and the generated kickstart file. The template is validated to"},{"line_number":17,"context_line":"    make sure all the required variables are preset. The required variables are"},{"line_number":18,"context_line":"    ks_options.liveimg_url, ks_options.agent_token and ks_options.heartbeat_url"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    The kickstart file validation happens using the \u0027ksvalidator\u0027 tool. This"},{"line_number":21,"context_line":"    tool is part of a GPL licensed library and cannot be installed as a"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"2e9d5afa_33ee5d17","line":18,"in_reply_to":"6403b91b_97031d8d","updated":"2021-03-31 21:01:30.000000000","message":"Done","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"80aeca6e7e7ebc7fcbef88956c04e927d10f16f0","unresolved":true,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    The kickstart file validation happens using the \u0027ksvalidator\u0027 tool. This"},{"line_number":21,"context_line":"    tool is part of a GPL licensed library and cannot be installed as a"},{"line_number":22,"context_line":"    dependency. Operators are encouraged to install \u0027pykickstart\u0027 libary on the"},{"line_number":23,"context_line":"    conductor themselves. If no \u0027ksvalidator\u0027 binary is found kickstart"},{"line_number":24,"context_line":"    validation will be skipped."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"bd28b4fd_7ceab90a","line":22,"updated":"2021-03-31 18:47:12.000000000","message":"nit s/libary/library/","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"534d6d4262175880c730bdca0a0f054761693677","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    The kickstart file validation happens using the \u0027ksvalidator\u0027 tool. This"},{"line_number":21,"context_line":"    tool is part of a GPL licensed library and cannot be installed as a"},{"line_number":22,"context_line":"    dependency. Operators are encouraged to install \u0027pykickstart\u0027 libary on the"},{"line_number":23,"context_line":"    conductor themselves. If no \u0027ksvalidator\u0027 binary is found kickstart"},{"line_number":24,"context_line":"    validation will be skipped."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"df8cdecd_03373210","line":22,"in_reply_to":"bd28b4fd_7ceab90a","updated":"2021-03-31 21:01:30.000000000","message":"Done","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"09d661dafcc44f4ea39a423fcc9bad99faf212ee","unresolved":true,"context_lines":[{"line_number":16,"context_line":"    template and the generated kickstart file. The template is validated to"},{"line_number":17,"context_line":"    make sure all the required variables are preset. The required variables are"},{"line_number":18,"context_line":"    ks_options.liveimg_url, ks_options.agent_token and ks_options.heartbeat_url"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    The kickstart file validation happens using the \u0027ksvalidator\u0027 tool. This"},{"line_number":21,"context_line":"    tool is part of a GPL licensed library and cannot be installed as a"},{"line_number":22,"context_line":"    dependency. Operators are encouraged to install \u0027pykickstart\u0027 libary on the"},{"line_number":23,"context_line":"    conductor themselves. If no \u0027ksvalidator\u0027 binary is found kickstart"},{"line_number":24,"context_line":"    validation will be skipped."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    The default kickstart template uses \u0027liveimg\u0027 kickstart command and expects"},{"line_number":27,"context_line":"    the OS image to be a squashfs.img file from a live ISO image, a compressed"},{"line_number":28,"context_line":"    tar file (.tar, .tbz, .tgz, .txz, .tar.bz2, .tar.gz, or .tar.xz.), or any"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"dd2c6e31_1c2c9be5","line":25,"range":{"start_line":19,"start_character":0,"end_line":25,"end_character":0},"updated":"2021-03-31 14:17:01.000000000","message":"and if memory serves installing the library brings the tool, and we invoke the tool as a separate process, which aiui is perfectly okay.","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"534d6d4262175880c730bdca0a0f054761693677","unresolved":true,"context_lines":[{"line_number":16,"context_line":"    template and the generated kickstart file. The template is validated to"},{"line_number":17,"context_line":"    make sure all the required variables are preset. The required variables are"},{"line_number":18,"context_line":"    ks_options.liveimg_url, ks_options.agent_token and ks_options.heartbeat_url"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    The kickstart file validation happens using the \u0027ksvalidator\u0027 tool. This"},{"line_number":21,"context_line":"    tool is part of a GPL licensed library and cannot be installed as a"},{"line_number":22,"context_line":"    dependency. Operators are encouraged to install \u0027pykickstart\u0027 libary on the"},{"line_number":23,"context_line":"    conductor themselves. If no \u0027ksvalidator\u0027 binary is found kickstart"},{"line_number":24,"context_line":"    validation will be skipped."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    The default kickstart template uses \u0027liveimg\u0027 kickstart command and expects"},{"line_number":27,"context_line":"    the OS image to be a squashfs.img file from a live ISO image, a compressed"},{"line_number":28,"context_line":"    tar file (.tar, .tbz, .tgz, .txz, .tar.bz2, .tar.gz, or .tar.xz.), or any"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"a096a907_9983e28a","line":25,"range":{"start_line":19,"start_character":0,"end_line":25,"end_character":0},"in_reply_to":"dd2c6e31_1c2c9be5","updated":"2021-03-31 21:01:30.000000000","message":"agreed","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"80aeca6e7e7ebc7fcbef88956c04e927d10f16f0","unresolved":true,"context_lines":[{"line_number":35,"context_line":"    An example of such calls to hearbeat API can be found in the default"},{"line_number":36,"context_line":"    kickstart template. To enable anaconda to send status back to Ironic API"},{"line_number":37,"context_line":"    via heartbeats agent_status and agent_status_messages are added to the"},{"line_number":38,"context_line":"    heartbeat API."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"00f2cb32_d30f9f3b","line":38,"updated":"2021-03-31 18:47:12.000000000","message":"somewhere in this, mention the microversion :)","commit_id":"3dda06779353c37e204317ca003ad53e2d8d428d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"708f21ce8103a789c57ffd6dda609b37fce5ba77","unresolved":true,"context_lines":[{"line_number":36,"context_line":"    An example of such calls to hearbeat API can be found in the default"},{"line_number":37,"context_line":"    kickstart template. To enable anaconda to send status back to Ironic API"},{"line_number":38,"context_line":"    via heartbeats agent_status and agent_status_messages are added to the"},{"line_number":39,"context_line":"    heartbeat API."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"ccfd19a1_9515007f","line":39,"updated":"2021-03-31 21:11:23.000000000","message":"don\u0027t know if we want to mention the microversion.","commit_id":"e248a115487d388a1656e44453b0a9f8fd36c446"}]}
