// WatchContainers returns a StringsWatcher that notifies of changes // to the lifecycles of containers of the specified type on the machine. func (m *Machine) WatchContainers(ctype instance.ContainerType) (watcher.StringsWatcher, error) { if string(ctype) == "" { return nil, errors.New("container type must be specified") } supported := false for _, c := range instance.ContainerTypes { if ctype == c { supported = true break } } if !supported { return nil, fmt.Errorf("unsupported container type %q", ctype) } var results params.StringsWatchResults args := params.WatchContainers{ Params: []params.WatchContainer{ {MachineTag: m.tag, ContainerType: string(ctype)}, }, } err := m.st.call("WatchContainers", args, &results) if err != nil { return nil, err } if len(results.Results) != 1 { return nil, fmt.Errorf("expected 1 result, got %d", len(results.Results)) } result := results.Results[0] if result.Error != nil { return nil, result.Error } w := watcher.NewStringsWatcher(m.st.caller, result) return w, nil }
// WatchEnvironMachines returns a StringsWatcher that notifies of // changes to the life cycles of the top level machines in the current // environment. func (st *State) WatchEnvironMachines() (watcher.StringsWatcher, error) { var result params.StringsWatchResult err := st.call("WatchEnvironMachines", nil, &result) if err != nil { return nil, err } if err := result.Error; err != nil { return nil, result.Error } w := watcher.NewStringsWatcher(st.caller, result) return w, nil }
// WatchRelations returns a StringsWatcher that notifies of changes to // the lifecycles of relations involving s. func (s *Service) WatchRelations() (watcher.StringsWatcher, error) { var results params.StringsWatchResults args := params.Entities{ Entities: []params.Entity{{Tag: s.tag}}, } err := s.st.call("WatchServiceRelations", args, &results) if err != nil { return nil, err } if len(results.Results) != 1 { return nil, fmt.Errorf("expected 1 result, got %d", len(results.Results)) } result := results.Results[0] if result.Error != nil { return nil, result.Error } w := watcher.NewStringsWatcher(s.st.caller, result) return w, nil }
// WatchAllContainers returns a StringsWatcher that notifies of changes // to the lifecycles of all containers on the machine. func (m *Machine) WatchAllContainers() (watcher.StringsWatcher, error) { var results params.StringsWatchResults args := params.WatchContainers{ Params: []params.WatchContainer{ {MachineTag: m.tag}, }, } err := m.st.call("WatchContainers", args, &results) if err != nil { return nil, err } if len(results.Results) != 1 { return nil, fmt.Errorf("expected 1 result, got %d", len(results.Results)) } result := results.Results[0] if result.Error != nil { return nil, result.Error } w := watcher.NewStringsWatcher(m.st.caller, result) return w, nil }