func()

in groups/reconcile.go [224:279]


func (r *Reconciler) ReconcileGroups(groups []GoogleGroup) error {
	// aggregate the errors that occured and return them together in the end.
	var errs []error
	for _, g := range groups {
		if g.EmailId == "" {
			errs = append(errs, fmt.Errorf("group has no email-id: %#v", g))
		}

		err := r.adminService.CreateOrUpdateGroupIfNescessary(g)
		if err != nil {
			errs = append(errs, err)
		}

		err = r.groupService.UpdateGroupSettings(g)
		if err != nil {
			errs = append(errs, err)
		}

		err = r.adminService.AddOrUpdateGroupMembers(g, OwnerRole, g.Owners)
		if err != nil {
			errs = append(errs, err)
		}

		err = r.adminService.AddOrUpdateGroupMembers(g, ManagerRole, g.Managers)
		if err != nil {
			errs = append(errs, err)
		}

		err = r.adminService.AddOrUpdateGroupMembers(g, MemberRole, g.Members)
		if err != nil {
			errs = append(errs, err)
		}

		if g.Settings["ReconcileMembers"] == "true" {
			members := append(g.Owners, g.Managers...)
			members = append(members, g.Members...)
			err = r.adminService.RemoveMembersFromGroup(g, members)
			if err != nil {
				errs = append(errs, err)
			}
		} else {
			members := append(g.Owners, g.Managers...)
			err = r.adminService.RemoveOwnerOrManagersFromGroup(g, members)
			if err != nil {
				errs = append(errs, err)
			}
		}
	}

	err := r.adminService.DeleteGroupsIfNecessary()
	if err != nil {
		errs = append(errs, err)
	}

	return utilerrors.NewAggregate(errs)
}