|
7 | 7 | "strconv"
|
8 | 8 |
|
9 | 9 | goapi "github.com/grafana/grafana-openapi-client-go/client"
|
| 10 | + "github.com/grafana/grafana-openapi-client-go/client/teams" |
10 | 11 | "github.com/grafana/grafana-openapi-client-go/models"
|
11 | 12 | "github.com/grafana/terraform-provider-grafana/v3/internal/common"
|
12 | 13 | "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
@@ -85,6 +86,9 @@ to the team. Note: users specified here must already exist in Grafana.
|
85 | 86 | Type: schema.TypeBool,
|
86 | 87 | Optional: true,
|
87 | 88 | Default: true,
|
| 89 | + DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool { |
| 90 | + return old == new || (old == "" && new == "true") |
| 91 | + }, |
88 | 92 | Description: `
|
89 | 93 | Ignores team members that have been added to team by [Team Sync](https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-team-sync/).
|
90 | 94 | Team Sync can be provisioned using [grafana_team_external_group resource](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/team_external_group).
|
@@ -154,7 +158,40 @@ Team Sync can be provisioned using [grafana_team_external_group resource](https:
|
154 | 158 | "grafana_team",
|
155 | 159 | orgResourceIDInt("id"),
|
156 | 160 | schema,
|
157 |
| - ) |
| 161 | + ).WithLister(listerFunction(listTeams)) |
| 162 | +} |
| 163 | + |
| 164 | +func listTeams(ctx context.Context, client *goapi.GrafanaHTTPAPI, data *ListerData) ([]string, error) { |
| 165 | + orgIDs, err := data.OrgIDs(client) |
| 166 | + if err != nil { |
| 167 | + return nil, err |
| 168 | + } |
| 169 | + |
| 170 | + var ids []string |
| 171 | + for _, orgID := range orgIDs { |
| 172 | + client = client.Clone().WithOrgID(orgID) |
| 173 | + |
| 174 | + var page int64 = 1 |
| 175 | + for { |
| 176 | + params := teams.NewSearchTeamsParams().WithPage(&page) |
| 177 | + resp, err := client.Teams.SearchTeams(params) |
| 178 | + if err != nil { |
| 179 | + return nil, err |
| 180 | + } |
| 181 | + |
| 182 | + for _, team := range resp.Payload.Teams { |
| 183 | + ids = append(ids, MakeOrgResourceID(orgID, team.ID)) |
| 184 | + } |
| 185 | + |
| 186 | + if resp.Payload.TotalCount <= int64(len(ids)) { |
| 187 | + break |
| 188 | + } |
| 189 | + |
| 190 | + page++ |
| 191 | + } |
| 192 | + } |
| 193 | + |
| 194 | + return ids, nil |
158 | 195 | }
|
159 | 196 |
|
160 | 197 | func CreateTeam(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
|
|
0 commit comments