in azurelinuxagent/ga/exthandlers.py [0:0]
def report_ext_handler_status(self, vm_status, ext_handler, goal_state_changed):
ext_handler_i = ExtHandlerInstance(ext_handler, self.protocol)
handler_status = ext_handler_i.get_handler_status()
# If nothing available, skip reporting
if handler_status is None:
# We should always have some handler status if requested state != Uninstall irrespective of single or
# multi-config. If state is != Uninstall, report error
if ext_handler.state != ExtensionRequestedState.Uninstall:
msg = "No handler status found for {0}. Not reporting anything for it.".format(ext_handler.name)
ext_handler_i.report_error_on_incarnation_change(goal_state_changed, log_msg=msg, event_msg=msg)
return
handler_state = ext_handler_i.get_handler_state()
ext_handler_statuses = []
# For MultiConfig, we need to report status per extension even for Handler level failures.
# If we have HandlerStatus for a MultiConfig handler and GS is requesting for it, we would report status per
# extension even if HandlerState == NotInstalled (Sample scenario: ExtensionsGoalStateError, DecideVersionError, etc)
# We also need to report extension status for an uninstalled handler if extensions are disabled because CRP
# waits for extension runtime status before failing the extension operation.
if handler_state != ExtHandlerState.NotInstalled or ext_handler.supports_multi_config or not conf.get_extensions_enabled():
# Since we require reading the Manifest for reading the heartbeat, this would fail if HandlerManifest not found.
# Only try to read heartbeat if HandlerState != NotInstalled.
if handler_state != ExtHandlerState.NotInstalled:
# Heartbeat is a handler level thing only, so we dont need to modify this
try:
heartbeat = ext_handler_i.collect_heartbeat()
if heartbeat is not None:
handler_status.status = heartbeat.get('status')
if 'formattedMessage' in heartbeat:
handler_status.message = parse_formatted_message(heartbeat.get('formattedMessage'))
except ExtensionError as e:
ext_handler_i.set_handler_status(message=ustr(e), code=e.code)
ext_handler_statuses = ext_handler_i.get_extension_handler_statuses(handler_status, goal_state_changed)
# If not any extension status reported, report the Handler status
if not any(ext_handler_statuses):
ext_handler_statuses.append(handler_status)
vm_status.vmAgent.extensionHandlers.extend(ext_handler_statuses)