// UpdateSettings persists all changes made to the local settings of // all given pairs of relation and unit. Keys with empty values are // considered a signal to delete these values. func (u *UniterAPI) UpdateSettings(args params.RelationUnitsSettings) (params.ErrorResults, error) { result := params.ErrorResults{ Results: make([]params.ErrorResult, len(args.RelationUnits)), } canAccess, err := u.accessUnit() if err != nil { return params.ErrorResults{}, err } for i, arg := range args.RelationUnits { relUnit, err := u.getRelationUnit(canAccess, arg.Relation, arg.Unit) if err == nil { var settings *state.Settings settings, err = relUnit.Settings() if err == nil { for k, v := range arg.Settings { if v == "" { settings.Delete(k) } else { settings.Set(k, v) } } _, err = settings.Write() } } result.Results[i].Error = common.ServerError(err) } return result, nil }
// ReadSettings returns the local settings of each given set of // relation/unit. func (u *UniterAPI) ReadSettings(args params.RelationUnits) (params.RelationSettingsResults, error) { result := params.RelationSettingsResults{ Results: make([]params.RelationSettingsResult, len(args.RelationUnits)), } canAccess, err := u.accessUnit() if err != nil { return params.RelationSettingsResults{}, err } for i, arg := range args.RelationUnits { relUnit, err := u.getRelationUnit(canAccess, arg.Relation, arg.Unit) if err == nil { var settings *state.Settings settings, err = relUnit.Settings() if err == nil { result.Results[i].Settings, err = convertRelationSettings(settings.Map()) } } result.Results[i].Error = common.ServerError(err) } return result, nil }