Skip to content

Commit 09874ce

Browse files
feat(enterprise-scim): add github_enterprise_scim_user data source
Retrieve information about a single SCIM user by ID. Includes: - Data source implementation - Acceptance tests - Documentation
1 parent 3e4f30d commit 09874ce

3 files changed

Lines changed: 142 additions & 0 deletions

File tree

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package github
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
)
10+
11+
func dataSourceGithubEnterpriseSCIMUser() *schema.Resource {
12+
s := enterpriseSCIMUserSchema()
13+
s["enterprise"] = &schema.Schema{
14+
Description: "The enterprise slug.",
15+
Type: schema.TypeString,
16+
Required: true,
17+
}
18+
s["scim_user_id"] = &schema.Schema{
19+
Description: "The SCIM user ID.",
20+
Type: schema.TypeString,
21+
Required: true,
22+
}
23+
24+
return &schema.Resource{
25+
Description: "Lookup SCIM provisioning information for a single GitHub enterprise user.",
26+
ReadContext: dataSourceGithubEnterpriseSCIMUserRead,
27+
Schema: s,
28+
}
29+
}
30+
31+
func dataSourceGithubEnterpriseSCIMUserRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
32+
client := meta.(*Owner).v3client
33+
34+
enterprise := d.Get("enterprise").(string)
35+
scimUserID := d.Get("scim_user_id").(string)
36+
37+
user, _, err := client.Enterprise.GetProvisionedSCIMUser(ctx, enterprise, scimUserID)
38+
if err != nil {
39+
return diag.FromErr(err)
40+
}
41+
42+
d.SetId(fmt.Sprintf("%s/%s", enterprise, scimUserID))
43+
44+
if err := d.Set("schemas", user.Schemas); err != nil {
45+
return diag.FromErr(err)
46+
}
47+
if user.ID != nil {
48+
if err := d.Set("id", *user.ID); err != nil {
49+
return diag.FromErr(err)
50+
}
51+
}
52+
if err := d.Set("external_id", user.ExternalID); err != nil {
53+
return diag.FromErr(err)
54+
}
55+
if err := d.Set("user_name", user.UserName); err != nil {
56+
return diag.FromErr(err)
57+
}
58+
if err := d.Set("display_name", user.DisplayName); err != nil {
59+
return diag.FromErr(err)
60+
}
61+
if err := d.Set("active", user.Active); err != nil {
62+
return diag.FromErr(err)
63+
}
64+
if err := d.Set("name", flattenEnterpriseSCIMUserName(user.Name)); err != nil {
65+
return diag.FromErr(err)
66+
}
67+
if err := d.Set("emails", flattenEnterpriseSCIMUserEmails(user.Emails)); err != nil {
68+
return diag.FromErr(err)
69+
}
70+
if err := d.Set("roles", flattenEnterpriseSCIMUserRoles(user.Roles)); err != nil {
71+
return diag.FromErr(err)
72+
}
73+
if err := d.Set("meta", flattenEnterpriseSCIMMeta(user.Meta)); err != nil {
74+
return diag.FromErr(err)
75+
}
76+
77+
return nil
78+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package github
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
8+
)
9+
10+
func TestAccGithubEnterpriseSCIMUserDataSource(t *testing.T) {
11+
t.Run("reads user without error", func(t *testing.T) {
12+
resource.Test(t, resource.TestCase{
13+
PreCheck: func() { skipUnlessEnterprise(t) },
14+
ProviderFactories: providerFactories,
15+
Steps: []resource.TestStep{{
16+
Config: fmt.Sprintf(`
17+
data "github_enterprise_scim_users" "all" {
18+
enterprise = "%s"
19+
}
20+
21+
data "github_enterprise_scim_user" "test" {
22+
enterprise = "%[1]s"
23+
scim_user_id = data.github_enterprise_scim_users.all.resources[0].id
24+
}
25+
`, testAccConf.enterpriseSlug),
26+
Check: resource.ComposeTestCheckFunc(
27+
resource.TestCheckResourceAttrSet("data.github_enterprise_scim_user.test", "id"),
28+
resource.TestCheckResourceAttrSet("data.github_enterprise_scim_user.test", "user_name"),
29+
resource.TestCheckResourceAttrSet("data.github_enterprise_scim_user.test", "display_name"),
30+
resource.TestCheckResourceAttrSet("data.github_enterprise_scim_user.test", "schemas.#"),
31+
resource.TestCheckResourceAttrSet("data.github_enterprise_scim_user.test", "emails.#"),
32+
),
33+
}},
34+
})
35+
})
36+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
---
2+
layout: "github"
3+
page_title: "GitHub: github_enterprise_scim_user"
4+
description: |-
5+
Get SCIM provisioning information for a GitHub enterprise user.
6+
---
7+
8+
# github_enterprise_scim_user
9+
10+
Use this data source to retrieve SCIM provisioning information for a single enterprise user.
11+
12+
## Example Usage
13+
14+
```hcl
15+
data "github_enterprise_scim_user" "example" {
16+
enterprise = "example-co"
17+
scim_user_id = "123456"
18+
}
19+
```
20+
21+
## Argument Reference
22+
23+
* `enterprise` - (Required) The enterprise slug.
24+
* `scim_user_id` - (Required) The SCIM user ID.
25+
26+
## Attributes Reference
27+
28+
* `schemas`, `id`, `external_id`, `user_name`, `display_name`, `active`, `name`, `emails`, `roles`, `meta`.

0 commit comments

Comments
 (0)