Skip to content

Commit

Permalink
Org DS: Use OpenAPI client (#1175)
Browse files Browse the repository at this point in the history
* Org DS: Use OpenAPI client

* generate docs

* Fix test
  • Loading branch information
julienduchesne authored Nov 21, 2023
1 parent 39857cb commit 3847a93
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 25 deletions.
5 changes: 4 additions & 1 deletion docs/data-sources/organization_preferences.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,15 @@ data "grafana_organization_preferences" "test" {}
<!-- schema generated by tfplugindocs -->
## Schema

### Optional

- `org_id` (String) The Organization ID. If not set, the Org ID defined in the provider block will be used.

### Read-Only

- `home_dashboard_id` (Number) The Organization home dashboard ID.
- `home_dashboard_uid` (String) The Organization home dashboard UID. This is only available in Grafana 9.0+.
- `id` (String) The ID of this resource.
- `org_id` (String) The Organization ID. If not set, the Org ID defined in the provider block will be used.
- `theme` (String) The Organization theme. Available values are `light`, `dark`, or an empty string for the default.
- `timezone` (String) The Organization timezone. Available values are `utc`, `browser`, or an empty string for the default.
- `week_start` (String) The Organization week start.
21 changes: 12 additions & 9 deletions internal/resources/grafana/data_source_organization.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"strconv"
"strings"

"github.com/grafana/terraform-provider-grafana/internal/common"
"github.com/grafana/grafana-openapi-client-go/client/orgs"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
Expand Down Expand Up @@ -53,9 +53,11 @@ func DatasourceOrganization() *schema.Resource {
}

func dataSourceOrganizationRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*common.Client).GrafanaAPI
client := OAPIGlobalClient(meta)
name := d.Get("name").(string)
org, err := client.OrgByName(name)

params := orgs.NewGetOrgByNameParams().WithOrgName(name)
org, err := client.Orgs.GetOrgByName(params, nil)

if err != nil {
if strings.HasPrefix(err.Error(), "status: 404") {
Expand All @@ -64,18 +66,19 @@ func dataSourceOrganizationRead(ctx context.Context, d *schema.ResourceData, met
return diag.FromErr(err)
}

orgUsers, err := client.OrgUsers(org.ID)
orgUsersParams := orgs.NewGetOrgUsersParams().WithOrgID(org.Payload.ID)
orgUsers, err := client.Orgs.GetOrgUsers(orgUsersParams, nil)
if err != nil {
return diag.FromErr(err)
}

userCollections := map[string][]string{
"admins": []string{},
"editors": []string{},
"viewers": []string{},
"admins": {},
"editors": {},
"viewers": {},
}

for _, user := range orgUsers {
for _, user := range orgUsers.Payload {
role := fmt.Sprintf("%ss", strings.ToLower(user.Role))
userCollections[role] = append(userCollections[role], user.Email)
}
Expand All @@ -86,6 +89,6 @@ func dataSourceOrganizationRead(ctx context.Context, d *schema.ResourceData, met
}
}

d.SetId(strconv.FormatInt(org.ID, 10))
d.SetId(strconv.FormatInt(org.Payload.ID, 10))
return nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package grafana

import (
"context"
"strconv"

"github.com/grafana/grafana-openapi-client-go/client/org_preferences"
"github.com/grafana/terraform-provider-grafana/internal/common"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
Expand All @@ -15,25 +17,26 @@ func DatasourceOrganizationPreferences() *schema.Resource {
* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/preferences/#get-current-org-prefs)
`,
ReadContext: dataSourceOrganizationPreferencesRead,
Schema: common.CloneResourceSchemaForDatasource(ResourceOrganizationPreferences(), map[string]*schema.Schema{}),
Schema: common.CloneResourceSchemaForDatasource(ResourceOrganizationPreferences(), map[string]*schema.Schema{
"org_id": orgIDAttribute(),
}),
}
}

func dataSourceOrganizationPreferencesRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*common.Client).GrafanaAPI
prefs, err := client.OrgPreferences()

client, orgID := OAPIClientFromNewOrgResource(meta, d)
resp, err := client.OrgPreferences.GetOrgPreferences(org_preferences.NewGetOrgPreferencesParams(), nil)
if err != nil {
return diag.FromErr(err)
}

prefs := resp.Payload
d.Set("theme", prefs.Theme)
d.Set("home_dashboard_id", prefs.HomeDashboardID)
d.Set("home_dashboard_uid", prefs.HomeDashboardUID)
d.Set("timezone", prefs.Timezone)
d.Set("week_start", prefs.WeekStart)

d.SetId("organization_preferences")
d.SetId("organization_preferences" + strconv.FormatInt(orgID, 10))

return nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,8 @@ func TestAccDatasourceOrganizationPreferences_basic(t *testing.T) {
testutils.CheckOSSTestsEnabled(t)

checks := []resource.TestCheckFunc{
resource.TestCheckResourceAttr(
"data.grafana_organization_preferences.test", "theme", "",
),
resource.TestCheckResourceAttr(
"data.grafana_organization_preferences.test", "timezone", "",
),
resource.TestCheckResourceAttr(
"data.grafana_organization_preferences.test", "id", "organization_preferences",
),
resource.TestCheckResourceAttr("data.grafana_organization_preferences.test", "theme", ""),
resource.TestCheckResourceAttr("data.grafana_organization_preferences.test", "timezone", ""),
}

resource.ParallelTest(t, resource.TestCase{
Expand Down

0 comments on commit 3847a93

Please sign in to comment.