improve additional teams lookup (#2445)
* improve additional teams lookup --------- Co-authored-by: Jan Mussler <janm81@gmail.com>
This commit is contained in:
parent
8ae769a567
commit
f41c14f468
|
|
@ -66,30 +66,37 @@ func (ptm *PostgresTeamMap) fetchAdditionalTeams(team string, superuserTeams boo
|
||||||
teams = (*ptm)[team].AdditionalTeams
|
teams = (*ptm)[team].AdditionalTeams
|
||||||
}
|
}
|
||||||
if transitive {
|
if transitive {
|
||||||
exclude = append(exclude, team)
|
|
||||||
for _, additionalTeam := range teams {
|
for _, additionalTeam := range teams {
|
||||||
if !(util.SliceContains(exclude, additionalTeam)) {
|
if !(util.SliceContains(exclude, additionalTeam)) {
|
||||||
|
// remember to not check team and additionalTeam again
|
||||||
|
exclude = append(exclude, additionalTeam)
|
||||||
transitiveTeams := (*ptm).fetchAdditionalTeams(additionalTeam, superuserTeams, transitive, exclude)
|
transitiveTeams := (*ptm).fetchAdditionalTeams(additionalTeam, superuserTeams, transitive, exclude)
|
||||||
for _, transitiveTeam := range transitiveTeams {
|
for _, transitiveTeam := range transitiveTeams {
|
||||||
if !(util.SliceContains(exclude, transitiveTeam)) && !(util.SliceContains(teams, transitiveTeam)) {
|
if !(util.SliceContains(exclude, transitiveTeam)) {
|
||||||
|
// remember to not check transitive team again in case
|
||||||
|
// it is one of the next additional teams of the outer loop
|
||||||
|
exclude = append(exclude, transitiveTeam)
|
||||||
|
if !(util.SliceContains(teams, transitiveTeam)) {
|
||||||
|
// found a new transitive additional team
|
||||||
teams = append(teams, transitiveTeam)
|
teams = append(teams, transitiveTeam)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return teams
|
return teams
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAdditionalTeams function to retrieve list of additional teams
|
// GetAdditionalTeams function to retrieve list of additional teams
|
||||||
func (ptm *PostgresTeamMap) GetAdditionalTeams(team string, transitive bool) []string {
|
func (ptm *PostgresTeamMap) GetAdditionalTeams(team string, transitive bool) []string {
|
||||||
return ptm.fetchAdditionalTeams(team, false, transitive, []string{})
|
return ptm.fetchAdditionalTeams(team, false, transitive, []string{team})
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAdditionalSuperuserTeams function to retrieve list of additional superuser teams
|
// GetAdditionalSuperuserTeams function to retrieve list of additional superuser teams
|
||||||
func (ptm *PostgresTeamMap) GetAdditionalSuperuserTeams(team string, transitive bool) []string {
|
func (ptm *PostgresTeamMap) GetAdditionalSuperuserTeams(team string, transitive bool) []string {
|
||||||
return ptm.fetchAdditionalTeams(team, true, transitive, []string{})
|
return ptm.fetchAdditionalTeams(team, true, transitive, []string{team})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load function to import data from PostgresTeam CRD
|
// Load function to import data from PostgresTeam CRD
|
||||||
|
|
|
||||||
|
|
@ -42,12 +42,26 @@ var (
|
||||||
AdditionalMembers: map[string][]string{"acid": []string{"batman"}},
|
AdditionalMembers: map[string][]string{"acid": []string{"batman"}},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
TypeMeta: metav1.TypeMeta{
|
||||||
|
Kind: "PostgresTeam",
|
||||||
|
APIVersion: "acid.zalan.do/v1",
|
||||||
|
},
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "teamD",
|
||||||
|
},
|
||||||
|
Spec: acidv1.PostgresTeamSpec{
|
||||||
|
AdditionalSuperuserTeams: map[string][]string{},
|
||||||
|
AdditionalTeams: map[string][]string{"teamA": []string{"teamD"}, "teamC": []string{"teamD"}, "teamD": []string{"teamA", "teamB", "teamC"}},
|
||||||
|
AdditionalMembers: map[string][]string{"acid": []string{"batman"}},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
pgTeamMap = PostgresTeamMap{
|
pgTeamMap = PostgresTeamMap{
|
||||||
"teamA": {
|
"teamA": {
|
||||||
AdditionalSuperuserTeams: []string{"teamB", "team24x7"},
|
AdditionalSuperuserTeams: []string{"teamB", "team24x7"},
|
||||||
AdditionalTeams: []string{"teamC"},
|
AdditionalTeams: []string{"teamC", "teamD"},
|
||||||
AdditionalMembers: []string{},
|
AdditionalMembers: []string{},
|
||||||
},
|
},
|
||||||
"teamB": {
|
"teamB": {
|
||||||
|
|
@ -57,7 +71,12 @@ var (
|
||||||
},
|
},
|
||||||
"teamC": {
|
"teamC": {
|
||||||
AdditionalSuperuserTeams: []string{"team24x7"},
|
AdditionalSuperuserTeams: []string{"team24x7"},
|
||||||
AdditionalTeams: []string{"teamA", "teamB", "acid"},
|
AdditionalTeams: []string{"teamA", "teamB", "teamD", "acid"},
|
||||||
|
AdditionalMembers: []string{},
|
||||||
|
},
|
||||||
|
"teamD": {
|
||||||
|
AdditionalSuperuserTeams: []string{},
|
||||||
|
AdditionalTeams: []string{"teamA", "teamB", "teamC"},
|
||||||
AdditionalMembers: []string{},
|
AdditionalMembers: []string{},
|
||||||
},
|
},
|
||||||
"team24x7": {
|
"team24x7": {
|
||||||
|
|
@ -119,14 +138,14 @@ func TestGetAdditionalTeams(t *testing.T) {
|
||||||
"Check that additional teams are returned",
|
"Check that additional teams are returned",
|
||||||
"teamA",
|
"teamA",
|
||||||
false,
|
false,
|
||||||
[]string{"teamC"},
|
[]string{"teamC", "teamD"},
|
||||||
"GetAdditionalTeams returns wrong list",
|
"GetAdditionalTeams returns wrong list",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Check that additional teams are returned incl. transitive teams",
|
"Check that additional teams are returned incl. transitive teams",
|
||||||
"teamA",
|
"teamA",
|
||||||
true,
|
true,
|
||||||
[]string{"teamC", "teamB", "acid"},
|
[]string{"teamC", "teamD", "teamB", "acid"},
|
||||||
"GetAdditionalTeams returns wrong list",
|
"GetAdditionalTeams returns wrong list",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue