func makeMachineStatus(machine *state.Machine) (status params.MachineStatus) { var err error status.Id = machine.Id() agentStatus := processMachine(machine) status.AgentStatus = agentStatus status.Series = machine.Series() status.Jobs = paramsJobsFromJobs(machine.Jobs()) status.WantsVote = machine.WantsVote() status.HasVote = machine.HasVote() sInfo, err := machine.InstanceStatus() populateStatusFromStatusInfoAndErr(&status.InstanceStatus, sInfo, err) instid, err := machine.InstanceId() if err == nil { status.InstanceId = instid addr, err := machine.PublicAddress() if err != nil { // Usually this indicates that no addresses have been set on the // machine yet. addr = network.Address{} logger.Debugf("error fetching public address: %q", err) } status.DNSName = addr.Value mAddrs := machine.Addresses() if len(mAddrs) == 0 { logger.Debugf("no IP addresses fetched for machine %q", instid) // At least give it the newly created DNSName address, if it exists. if addr.Value != "" { mAddrs = append(mAddrs, addr) } } for _, mAddr := range mAddrs { switch mAddr.Scope { case network.ScopeMachineLocal, network.ScopeLinkLocal: continue } status.IPAddresses = append(status.IPAddresses, mAddr.Value) } } else { if errors.IsNotProvisioned(err) { status.InstanceId = "pending" } else { status.InstanceId = "error" } } hc, err := machine.HardwareCharacteristics() if err != nil { if !errors.IsNotFound(err) { status.Hardware = "error" } } else { status.Hardware = hc.String() } status.Containers = make(map[string]params.MachineStatus) return }
// runMachineUpdate connects via ssh to the machine and runs the update script. func runMachineUpdate(machine *state.Machine, sshArg string) error { addr, err := machine.PublicAddress() if err != nil { if network.IsNoAddress(err) { return errors.Annotatef(err, "no appropriate public address found") } return errors.Trace(err) } return runViaSSH(addr.Value, sshArg) }
func makeMachineStatus(machine *state.Machine) (status params.MachineStatus) { status.Id = machine.Id() agentStatus, compatStatus := processMachine(machine) status.Agent = agentStatus // These legacy status values will be deprecated for Juju 2.0. status.AgentState = compatStatus.Status status.AgentStateInfo = compatStatus.Info status.AgentVersion = compatStatus.Version status.Life = compatStatus.Life status.Err = compatStatus.Err status.Series = machine.Series() status.Jobs = paramsJobsFromJobs(machine.Jobs()) status.WantsVote = machine.WantsVote() status.HasVote = machine.HasVote() instid, err := machine.InstanceId() if err == nil { status.InstanceId = instid status.InstanceState, err = machine.InstanceStatus() if err != nil { status.InstanceState = "error" } addr, err := machine.PublicAddress() if err != nil { // Usually this indicates that no addresses have been set on the // machine yet. addr = network.Address{} logger.Warningf("error fetching public address: %q", err) } status.DNSName = addr.Value } else { if errors.IsNotProvisioned(err) { status.InstanceId = "pending" } else { status.InstanceId = "error" } // There's no point in reporting a pending agent state // if the machine hasn't been provisioned. This // also makes unprovisioned machines visually distinct // in the output. status.AgentState = "" } hc, err := machine.HardwareCharacteristics() if err != nil { if !errors.IsNotFound(err) { status.Hardware = "error" } } else { status.Hardware = hc.String() } status.Containers = make(map[string]params.MachineStatus) return }
func makeMachineStatus(machine *state.Machine) (status params.MachineStatus) { status.Id = machine.Id() agentStatus := processMachine(machine) status.Agent = agentStatus status.Series = machine.Series() status.Jobs = paramsJobsFromJobs(machine.Jobs()) status.WantsVote = machine.WantsVote() status.HasVote = machine.HasVote() instid, err := machine.InstanceId() if err == nil { status.InstanceId = instid status.InstanceState, err = machine.InstanceStatus() if err != nil { status.InstanceState = "error" } addr, err := machine.PublicAddress() if err != nil { // Usually this indicates that no addresses have been set on the // machine yet. addr = network.Address{} logger.Debugf("error fetching public address: %q", err) } status.DNSName = addr.Value } else { if errors.IsNotProvisioned(err) { status.InstanceId = "pending" } else { status.InstanceId = "error" } } hc, err := machine.HardwareCharacteristics() if err != nil { if !errors.IsNotFound(err) { status.Hardware = "error" } } else { status.Hardware = hc.String() } status.Containers = make(map[string]params.MachineStatus) return }