// getAllUnitNames returns a sequence of valid Unit objects from state. If any // of the service names or unit names are not found, an error is returned. func getAllUnitNames(st *state.State, units, services []string) (result []*state.Unit, err error) { unitsSet := set.NewStrings(units...) for _, name := range services { service, err := st.Service(name) if err != nil { return nil, err } units, err := service.AllUnits() if err != nil { return nil, err } for _, unit := range units { unitsSet.Add(unit.Name()) } } for _, unitName := range unitsSet.Values() { unit, err := st.Unit(unitName) if err != nil { return nil, err } // We only operate on principal units, and only thise that have an // assigned machines. if unit.IsPrincipal() { if _, err := unit.AssignedMachineId(); err != nil { return nil, err } } else { return nil, fmt.Errorf("%s is not a principal unit", unit) } result = append(result, unit) } return result, nil }
func isRemoved(st *state.State, name string) func(*gc.C) bool { return func(c *gc.C) bool { _, err := st.Unit(name) if errors.IsNotFound(err) { return true } c.Assert(err, gc.IsNil) return false } }