func (context *statusContext) processUnit(unit *state.Unit) (status unitStatus) { status.PublicAddress, _ = unit.PublicAddress() for _, port := range unit.OpenedPorts() { status.OpenedPorts = append(status.OpenedPorts, port.String()) } if unit.IsPrincipal() { status.Machine, _ = unit.AssignedMachineId() } status.Life, status.AgentVersion, status.AgentState, status.AgentStateInfo, status.Err = processAgent(unit) if subUnits := unit.SubordinateNames(); len(subUnits) > 0 { status.Subordinates = make(map[string]unitStatus) for _, name := range subUnits { subUnit := context.unitByName(name) // subUnit may be nil if subordinate was filtered out. if subUnit != nil { status.Subordinates[name] = context.processUnit(subUnit) } } } return }
func (s *AssignSuite) assertAssignedUnit(c *C, unit *state.Unit) string { // Check the machine on the unit is set. machineId, err := unit.AssignedMachineId() c.Assert(err, IsNil) // Check that the principal is set on the machine. machine, err := s.State.Machine(machineId) c.Assert(err, IsNil) machineUnits, err := machine.Units() c.Assert(err, IsNil) c.Assert(machineUnits, HasLen, 1) // Make sure it is the right unit. c.Assert(machineUnits[0].Name(), Equals, unit.Name()) return machineId }
func processUnit(unit *state.Unit) (map[string]interface{}, error) { r := m() if addr, ok := unit.PublicAddress(); ok { r["public-address"] = addr } if id, err := unit.AssignedMachineId(); err == nil { // TODO(dfc) we could make this nicer, ie machine/0 r["machine"] = id } processVersion(r, unit) processStatus(r, unit) return r, nil }
func (context *statusContext) processUnit(unit *state.Unit) (status unitStatus) { status.PublicAddress, _ = unit.PublicAddress() if unit.IsPrincipal() { status.Machine, _ = unit.AssignedMachineId() } status.Life, status.AgentVersion, status.AgentState, status.AgentStateInfo, status.Err = processAgent(unit) if subUnits := unit.SubordinateNames(); len(subUnits) > 0 { status.Subordinates = make(map[string]unitStatus) for _, name := range subUnits { subUnit := context.unitByName(name) status.Subordinates[name] = context.processUnit(subUnit) } } return }
func (c *NatCommand) UnitContainment(u *state.Unit) (*UnitContainment, error) { machineId, err := u.AssignedMachineId() if err != nil { return nil, err } host, ok := c.MachineMap[machineId] if !ok { return nil, fmt.Errorf("machine not found: %q", machineId) } gatewayId := state.ParentId(machineId) if gatewayId == "" { // Ignore machines not in containers return nil, ErrNoContainer } gateway, ok := c.MachineMap[gatewayId] if !ok { return nil, fmt.Errorf("parent machine %q not found", gatewayId) } return &UnitContainment{Unit: u, GatewayMachine: gateway, HostMachine: host}, nil }