// UpdateConfigSettings changes a service's charm config settings. Values set // to nil will be deleted; unknown and invalid values will return an error. func (s *Service) UpdateConfigSettings(changes charm.Settings) error { charm, _, err := s.Charm() if err != nil { return err } changes, err = charm.Config().ValidateSettings(changes) if err != nil { return err } // TODO(fwereade) state.Settings is itself really problematic in just // about every use case. This needs to be resolved some time; but at // least the settings docs are keyed by charm url as well as service // name, so the actual impact of a race is non-threatening. node, err := readSettings(s.st, s.settingsKey()) if err != nil { return err } for name, value := range changes { if value == nil { node.Delete(name) } else { node.Set(name, value) } } _, err = node.Write() return err }
// ServiceGet returns the configuration for a service. func (c *Client) ServiceGet(args params.ServiceGet) (params.ServiceGetResults, error) { service, err := c.api.state.Service(args.ServiceName) if err != nil { return params.ServiceGetResults{}, err } settings, err := service.ConfigSettings() if err != nil { return params.ServiceGetResults{}, err } charm, _, err := service.Charm() if err != nil { return params.ServiceGetResults{}, err } configInfo := describe(settings, charm.Config()) var constraints constraints.Value if service.IsPrincipal() { constraints, err = service.Constraints() if err != nil { return params.ServiceGetResults{}, err } } return params.ServiceGetResults{ Service: args.ServiceName, Charm: charm.Meta().Name, Config: configInfo, Constraints: constraints, }, nil }
// CharmInfo returns information about the requested charm. func (c *Client) CharmInfo(args params.CharmInfo) (api.CharmInfo, error) { curl, err := charm.ParseURL(args.CharmURL) if err != nil { return api.CharmInfo{}, err } charm, err := c.api.state.Charm(curl) if err != nil { return api.CharmInfo{}, err } info := api.CharmInfo{ Revision: charm.Revision(), URL: curl.String(), Config: charm.Config(), Meta: charm.Meta(), } return info, nil }