Skip to content

Commit 2f2c50c

Browse files
Use context-aware CRUD for enterprise cost centers
1 parent b29fbf1 commit 2f2c50c

4 files changed

+67
-63
lines changed

github/data_source_github_enterprise_cost_center.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ import (
55
"fmt"
66
"strings"
77

8+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
89
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
910
)
1011

1112
func dataSourceGithubEnterpriseCostCenter() *schema.Resource {
1213
return &schema.Resource{
13-
Read: dataSourceGithubEnterpriseCostCenterRead,
14+
ReadContext: dataSourceGithubEnterpriseCostCenterRead,
1415

1516
Schema: map[string]*schema.Schema{
1617
"enterprise_slug": {
@@ -58,16 +59,16 @@ func dataSourceGithubEnterpriseCostCenter() *schema.Resource {
5859
}
5960
}
6061

61-
func dataSourceGithubEnterpriseCostCenterRead(d *schema.ResourceData, meta any) error {
62+
func dataSourceGithubEnterpriseCostCenterRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
6263
client := meta.(*Owner).v3client
6364
enterpriseSlug := d.Get("enterprise_slug").(string)
6465
costCenterID := d.Get("cost_center_id").(string)
6566

66-
ctx := context.WithValue(context.Background(), ctxId, fmt.Sprintf("%s/%s", enterpriseSlug, costCenterID))
67+
ctx = context.WithValue(ctx, ctxId, fmt.Sprintf("%s/%s", enterpriseSlug, costCenterID))
6768

6869
cc, err := enterpriseCostCenterGet(ctx, client, enterpriseSlug, costCenterID)
6970
if err != nil {
70-
return err
71+
return diag.FromErr(err)
7172
}
7273

7374
d.SetId(costCenterID)

github/data_source_github_enterprise_cost_centers.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ import (
44
"context"
55
"fmt"
66

7+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
78
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
89
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
910
)
1011

1112
func dataSourceGithubEnterpriseCostCenters() *schema.Resource {
1213
return &schema.Resource{
13-
Read: dataSourceGithubEnterpriseCostCentersRead,
14+
ReadContext: dataSourceGithubEnterpriseCostCentersRead,
1415

1516
Schema: map[string]*schema.Schema{
1617
"enterprise_slug": {
@@ -62,18 +63,18 @@ func dataSourceGithubEnterpriseCostCenters() *schema.Resource {
6263
}
6364
}
6465

65-
func dataSourceGithubEnterpriseCostCentersRead(d *schema.ResourceData, meta any) error {
66+
func dataSourceGithubEnterpriseCostCentersRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
6667
client := meta.(*Owner).v3client
6768
enterpriseSlug := d.Get("enterprise_slug").(string)
6869
state := ""
6970
if v, ok := d.GetOk("state"); ok {
7071
state = v.(string)
7172
}
7273

73-
ctx := context.WithValue(context.Background(), ctxId, fmt.Sprintf("%s/cost-centers", enterpriseSlug))
74+
ctx = context.WithValue(ctx, ctxId, fmt.Sprintf("%s/cost-centers", enterpriseSlug))
7475
centers, err := enterpriseCostCentersList(ctx, client, enterpriseSlug, state)
7576
if err != nil {
76-
return err
77+
return diag.FromErr(err)
7778
}
7879

7980
items := make([]any, 0, len(centers))

github/resource_github_enterprise_cost_center.go

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@ import (
66
"log"
77
"strings"
88

9+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
910
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1011
)
1112

1213
func resourceGithubEnterpriseCostCenter() *schema.Resource {
1314
return &schema.Resource{
14-
Create: resourceGithubEnterpriseCostCenterCreate,
15-
Read: resourceGithubEnterpriseCostCenterRead,
16-
Update: resourceGithubEnterpriseCostCenterUpdate,
17-
Delete: resourceGithubEnterpriseCostCenterDelete,
15+
CreateContext: resourceGithubEnterpriseCostCenterCreate,
16+
ReadContext: resourceGithubEnterpriseCostCenterRead,
17+
UpdateContext: resourceGithubEnterpriseCostCenterUpdate,
18+
DeleteContext: resourceGithubEnterpriseCostCenterDelete,
1819
Importer: &schema.ResourceImporter{
19-
State: resourceGithubEnterpriseCostCenterImport,
20+
StateContext: resourceGithubEnterpriseCostCenterImport,
2021
},
2122

2223
Schema: map[string]*schema.Schema{
@@ -63,33 +64,33 @@ func resourceGithubEnterpriseCostCenter() *schema.Resource {
6364
}
6465
}
6566

66-
func resourceGithubEnterpriseCostCenterCreate(d *schema.ResourceData, meta any) error {
67+
func resourceGithubEnterpriseCostCenterCreate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
6768
client := meta.(*Owner).v3client
6869
enterpriseSlug := d.Get("enterprise_slug").(string)
6970
name := d.Get("name").(string)
7071

71-
ctx := context.WithValue(context.Background(), ctxId, fmt.Sprintf("%s/%s", enterpriseSlug, name))
72+
ctx = context.WithValue(ctx, ctxId, fmt.Sprintf("%s/%s", enterpriseSlug, name))
7273
log.Printf("[INFO] Creating enterprise cost center: %s (%s)", name, enterpriseSlug)
7374

7475
cc, err := enterpriseCostCenterCreate(ctx, client, enterpriseSlug, name)
7576
if err != nil {
76-
return err
77+
return diag.FromErr(err)
7778
}
7879

7980
if cc == nil || cc.ID == "" {
80-
return fmt.Errorf("failed to create cost center: missing id in response")
81+
return diag.FromErr(fmt.Errorf("failed to create cost center: missing id in response"))
8182
}
8283

8384
d.SetId(cc.ID)
84-
return resourceGithubEnterpriseCostCenterRead(d, meta)
85+
return resourceGithubEnterpriseCostCenterRead(ctx, d, meta)
8586
}
8687

87-
func resourceGithubEnterpriseCostCenterRead(d *schema.ResourceData, meta any) error {
88+
func resourceGithubEnterpriseCostCenterRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
8889
client := meta.(*Owner).v3client
8990
enterpriseSlug := d.Get("enterprise_slug").(string)
9091
costCenterID := d.Id()
9192

92-
ctx := context.WithValue(context.Background(), ctxId, fmt.Sprintf("%s/%s", enterpriseSlug, costCenterID))
93+
ctx = context.WithValue(ctx, ctxId, fmt.Sprintf("%s/%s", enterpriseSlug, costCenterID))
9394

9495
cc, err := enterpriseCostCenterGet(ctx, client, enterpriseSlug, costCenterID)
9596
if err != nil {
@@ -98,7 +99,7 @@ func resourceGithubEnterpriseCostCenterRead(d *schema.ResourceData, meta any) er
9899
d.SetId("")
99100
return nil
100101
}
101-
return err
102+
return diag.FromErr(err)
102103
}
103104

104105
_ = d.Set("name", cc.Name)
@@ -122,53 +123,53 @@ func resourceGithubEnterpriseCostCenterRead(d *schema.ResourceData, meta any) er
122123
return nil
123124
}
124125

125-
func resourceGithubEnterpriseCostCenterUpdate(d *schema.ResourceData, meta any) error {
126+
func resourceGithubEnterpriseCostCenterUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
126127
client := meta.(*Owner).v3client
127128
enterpriseSlug := d.Get("enterprise_slug").(string)
128129
costCenterID := d.Id()
129130

130-
ctx := context.WithValue(context.Background(), ctxId, fmt.Sprintf("%s/%s", enterpriseSlug, costCenterID))
131+
ctx = context.WithValue(ctx, ctxId, fmt.Sprintf("%s/%s", enterpriseSlug, costCenterID))
131132

132133
cc, err := enterpriseCostCenterGet(ctx, client, enterpriseSlug, costCenterID)
133134
if err != nil {
134-
return err
135+
return diag.FromErr(err)
135136
}
136137
if strings.EqualFold(cc.State, "deleted") {
137-
return fmt.Errorf("cannot update cost center %q because it is archived", costCenterID)
138+
return diag.FromErr(fmt.Errorf("cannot update cost center %q because it is archived", costCenterID))
138139
}
139140

140141
if d.HasChange("name") {
141142
name := d.Get("name").(string)
142143
log.Printf("[INFO] Updating enterprise cost center: %s/%s", enterpriseSlug, costCenterID)
143144
_, err := enterpriseCostCenterUpdate(ctx, client, enterpriseSlug, costCenterID, name)
144145
if err != nil {
145-
return err
146+
return diag.FromErr(err)
146147
}
147148
}
148149

149-
return resourceGithubEnterpriseCostCenterRead(d, meta)
150+
return resourceGithubEnterpriseCostCenterRead(ctx, d, meta)
150151
}
151152

152-
func resourceGithubEnterpriseCostCenterDelete(d *schema.ResourceData, meta any) error {
153+
func resourceGithubEnterpriseCostCenterDelete(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
153154
client := meta.(*Owner).v3client
154155
enterpriseSlug := d.Get("enterprise_slug").(string)
155156
costCenterID := d.Id()
156157

157-
ctx := context.WithValue(context.Background(), ctxId, fmt.Sprintf("%s/%s", enterpriseSlug, costCenterID))
158+
ctx = context.WithValue(ctx, ctxId, fmt.Sprintf("%s/%s", enterpriseSlug, costCenterID))
158159
log.Printf("[INFO] Archiving enterprise cost center: %s/%s", enterpriseSlug, costCenterID)
159160

160161
_, err := enterpriseCostCenterArchive(ctx, client, enterpriseSlug, costCenterID)
161162
if err != nil {
162163
if is404(err) {
163164
return nil
164165
}
165-
return err
166+
return diag.FromErr(err)
166167
}
167168

168169
return nil
169170
}
170171

171-
func resourceGithubEnterpriseCostCenterImport(d *schema.ResourceData, meta any) ([]*schema.ResourceData, error) {
172+
func resourceGithubEnterpriseCostCenterImport(ctx context.Context, d *schema.ResourceData, meta any) ([]*schema.ResourceData, error) {
172173
parts := strings.Split(d.Id(), "/")
173174
if len(parts) != 2 {
174175
return nil, fmt.Errorf("invalid import specified: supplied import must be written as <enterprise_slug>/<cost_center_id>")

0 commit comments

Comments
 (0)