// processUnitAndAgentStatus retrieves status information for both unit and unitAgents. func processUnitAndAgentStatus(unit *state.Unit, status *api.UnitStatus) { status.UnitAgent, status.Workload = processUnitStatus(unit) // Legacy fields required until Juju 2.0. // We only display pending, started, error, stopped. var ok bool legacyState, ok := state.TranslateToLegacyAgentState( state.Status(status.UnitAgent.Status), state.Status(status.Workload.Status), status.Workload.Info, ) if !ok { logger.Warningf( "translate to legacy status encounted unexpected workload status %q and agent status %q", status.Workload.Status, status.UnitAgent.Status) } status.AgentState = params.Status(legacyState) if status.AgentState == params.StatusError { status.AgentStateInfo = status.Workload.Info } status.AgentVersion = status.UnitAgent.Version status.Life = status.UnitAgent.Life status.Err = status.UnitAgent.Err processUnitLost(unit, status) return }
func (sf *statusFormatter) updateUnitStatusInfo(unit *api.UnitStatus, serviceName string) { // This logic has no business here but can't be moved until Juju 2.0. statusInfo := unit.Workload.Info if unit.Workload.Status == "" { // Old server that doesn't support this field and others. // Just use the info string as-is. statusInfo = unit.AgentStateInfo } if unit.Workload.Status == params.StatusError { if relation, ok := sf.relations[getRelationIdFromData(unit)]; ok { // Append the details of the other endpoint on to the status info string. if ep, ok := findOtherEndpoint(relation.Endpoints, serviceName); ok { unit.Workload.Info = statusInfo + " for " + ep.String() unit.AgentStateInfo = unit.Workload.Info } } } }