Skip to content

Commit 3c9d5d7

Browse files
spriorielloclaude
andcommitted
fix: address remaining reviewer feedback from PR integrations#3143
- Remove fmt.Sprintf from all tflog calls; use static messages with structured fields map for dynamic data (28 instances fixed) - Add configuration_id Computed field to both resources so the numeric config ID is stored separately in state - Update/Delete now read enterprise_slug and configuration_id from state via d.Get() instead of parsing the composite ID - Update enterprise docs with configuration_id attribute Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent fe4b55e commit 3c9d5d7

4 files changed

Lines changed: 52 additions & 71 deletions

github/resource_github_enterprise_security_configuration.go

Lines changed: 25 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ func resourceGithubEnterpriseSecurityConfiguration() *schema.Resource {
3232
ForceNew: true,
3333
Description: "The slug of the enterprise.",
3434
},
35+
"configuration_id": {
36+
Type: schema.TypeInt,
37+
Computed: true,
38+
Description: "The numeric ID of the code security configuration.",
39+
},
3540
"name": {
3641
Type: schema.TypeString,
3742
Required: true,
@@ -303,7 +308,7 @@ func resourceGithubEnterpriseSecurityConfigurationCreate(ctx context.Context, d
303308
enterprise := d.Get("enterprise_slug").(string)
304309
name := d.Get("name").(string)
305310

306-
tflog.Debug(ctx, fmt.Sprintf("Creating enterprise code security configuration: %s/%s", enterprise, name), map[string]any{
311+
tflog.Debug(ctx, "Creating enterprise code security configuration", map[string]any{
307312
"enterprise": enterprise,
308313
"name": name,
309314
})
@@ -312,7 +317,7 @@ func resourceGithubEnterpriseSecurityConfigurationCreate(ctx context.Context, d
312317

313318
configuration, _, err := client.Enterprise.CreateCodeSecurityConfiguration(ctx, enterprise, config)
314319
if err != nil {
315-
tflog.Error(ctx, fmt.Sprintf("Failed to create enterprise code security configuration: %s/%s", enterprise, name), map[string]any{
320+
tflog.Error(ctx, "Failed to create enterprise code security configuration", map[string]any{
316321
"enterprise": enterprise,
317322
"name": name,
318323
"error": err.Error(),
@@ -326,7 +331,7 @@ func resourceGithubEnterpriseSecurityConfigurationCreate(ctx context.Context, d
326331
}
327332
d.SetId(id)
328333

329-
tflog.Info(ctx, fmt.Sprintf("Created enterprise code security configuration: %s/%s (ID: %d)", enterprise, name, configuration.GetID()), map[string]any{
334+
tflog.Info(ctx, "Created enterprise code security configuration", map[string]any{
330335
"enterprise": enterprise,
331336
"name": name,
332337
"id": configuration.GetID(),
@@ -348,7 +353,7 @@ func resourceGithubEnterpriseSecurityConfigurationRead(ctx context.Context, d *s
348353
return diag.FromErr(err)
349354
}
350355

351-
tflog.Trace(ctx, fmt.Sprintf("Reading enterprise code security configuration: %s/%d", enterprise, id), map[string]any{
356+
tflog.Trace(ctx, "Reading enterprise code security configuration", map[string]any{
352357
"enterprise": enterprise,
353358
"id": id,
354359
})
@@ -358,15 +363,15 @@ func resourceGithubEnterpriseSecurityConfigurationRead(ctx context.Context, d *s
358363
var ghErr *github.ErrorResponse
359364
if errors.As(err, &ghErr) {
360365
if ghErr.Response.StatusCode == http.StatusNotFound {
361-
tflog.Info(ctx, fmt.Sprintf("Removing enterprise code security configuration %s/%d from state because it no longer exists in GitHub", enterprise, id), map[string]any{
366+
tflog.Info(ctx, "Removing enterprise code security configuration from state because it no longer exists in GitHub", map[string]any{
362367
"enterprise": enterprise,
363368
"id": id,
364369
})
365370
d.SetId("")
366371
return nil
367372
}
368373
}
369-
tflog.Error(ctx, fmt.Sprintf("Failed to read enterprise code security configuration: %s/%d", enterprise, id), map[string]any{
374+
tflog.Error(ctx, "Failed to read enterprise code security configuration", map[string]any{
370375
"enterprise": enterprise,
371376
"id": id,
372377
"error": err.Error(),
@@ -382,7 +387,7 @@ func resourceGithubEnterpriseSecurityConfigurationRead(ctx context.Context, d *s
382387
return diags
383388
}
384389

385-
tflog.Trace(ctx, fmt.Sprintf("Successfully read enterprise code security configuration: %s/%d", enterprise, id), map[string]any{
390+
tflog.Trace(ctx, "Successfully read enterprise code security configuration", map[string]any{
386391
"enterprise": enterprise,
387392
"id": id,
388393
})
@@ -392,35 +397,27 @@ func resourceGithubEnterpriseSecurityConfigurationRead(ctx context.Context, d *s
392397

393398
func resourceGithubEnterpriseSecurityConfigurationUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
394399
client := meta.(*Owner).v3client
400+
enterprise := d.Get("enterprise_slug").(string)
401+
id := int64(d.Get("configuration_id").(int))
395402

396-
enterprise, idStr, err := parseID2(d.Id())
397-
if err != nil {
398-
return diag.FromErr(err)
399-
}
400-
401-
id, err := strconv.ParseInt(idStr, 10, 64)
402-
if err != nil {
403-
return diag.FromErr(err)
404-
}
405-
406-
tflog.Debug(ctx, fmt.Sprintf("Updating enterprise code security configuration: %s/%d", enterprise, id), map[string]any{
403+
tflog.Debug(ctx, "Updating enterprise code security configuration", map[string]any{
407404
"enterprise": enterprise,
408405
"id": id,
409406
})
410407

411408
config := expandCodeSecurityConfigurationCommon(d)
412409

413-
_, _, err = client.Enterprise.UpdateCodeSecurityConfiguration(ctx, enterprise, id, config)
410+
_, _, err := client.Enterprise.UpdateCodeSecurityConfiguration(ctx, enterprise, id, config)
414411
if err != nil {
415-
tflog.Error(ctx, fmt.Sprintf("Failed to update enterprise code security configuration: %s/%d", enterprise, id), map[string]any{
412+
tflog.Error(ctx, "Failed to update enterprise code security configuration", map[string]any{
416413
"enterprise": enterprise,
417414
"id": id,
418415
"error": err.Error(),
419416
})
420417
return diag.FromErr(err)
421418
}
422419

423-
tflog.Info(ctx, fmt.Sprintf("Updated enterprise code security configuration: %s/%d", enterprise, id), map[string]any{
420+
tflog.Info(ctx, "Updated enterprise code security configuration", map[string]any{
424421
"enterprise": enterprise,
425422
"id": id,
426423
})
@@ -430,41 +427,33 @@ func resourceGithubEnterpriseSecurityConfigurationUpdate(ctx context.Context, d
430427

431428
func resourceGithubEnterpriseSecurityConfigurationDelete(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
432429
client := meta.(*Owner).v3client
430+
enterprise := d.Get("enterprise_slug").(string)
431+
id := int64(d.Get("configuration_id").(int))
433432

434-
enterprise, idStr, err := parseID2(d.Id())
435-
if err != nil {
436-
return diag.FromErr(err)
437-
}
438-
439-
id, err := strconv.ParseInt(idStr, 10, 64)
440-
if err != nil {
441-
return diag.FromErr(err)
442-
}
443-
444-
tflog.Debug(ctx, fmt.Sprintf("Deleting enterprise code security configuration: %s/%d", enterprise, id), map[string]any{
433+
tflog.Debug(ctx, "Deleting enterprise code security configuration", map[string]any{
445434
"enterprise": enterprise,
446435
"id": id,
447436
})
448437

449-
_, err = client.Enterprise.DeleteCodeSecurityConfiguration(ctx, enterprise, id)
438+
_, err := client.Enterprise.DeleteCodeSecurityConfiguration(ctx, enterprise, id)
450439
if err != nil {
451440
var ghErr *github.ErrorResponse
452441
if errors.As(err, &ghErr) && ghErr.Response.StatusCode == http.StatusNotFound {
453-
tflog.Info(ctx, fmt.Sprintf("Enterprise code security configuration %s/%d already deleted", enterprise, id), map[string]any{
442+
tflog.Info(ctx, "Enterprise code security configuration already deleted", map[string]any{
454443
"enterprise": enterprise,
455444
"id": id,
456445
})
457446
return nil
458447
}
459-
tflog.Error(ctx, fmt.Sprintf("Failed to delete enterprise code security configuration: %s/%d", enterprise, id), map[string]any{
448+
tflog.Error(ctx, "Failed to delete enterprise code security configuration", map[string]any{
460449
"enterprise": enterprise,
461450
"id": id,
462451
"error": err.Error(),
463452
})
464453
return diag.FromErr(err)
465454
}
466455

467-
tflog.Info(ctx, fmt.Sprintf("Deleted enterprise code security configuration: %s/%d", enterprise, id), map[string]any{
456+
tflog.Info(ctx, "Deleted enterprise code security configuration", map[string]any{
468457
"enterprise": enterprise,
469458
"id": id,
470459
})

github/resource_github_organization_security_configuration.go

Lines changed: 23 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package github
33
import (
44
"context"
55
"errors"
6-
"fmt"
76
"net/http"
87
"strconv"
98

@@ -26,6 +25,11 @@ func resourceGithubOrganizationSecurityConfiguration() *schema.Resource {
2625
},
2726

2827
Schema: map[string]*schema.Schema{
28+
"configuration_id": {
29+
Type: schema.TypeInt,
30+
Computed: true,
31+
Description: "The numeric ID of the code security configuration.",
32+
},
2933
"name": {
3034
Type: schema.TypeString,
3135
Required: true,
@@ -301,7 +305,7 @@ func resourceGithubOrganizationSecurityConfigurationCreate(ctx context.Context,
301305
org := meta.(*Owner).name
302306
name := d.Get("name").(string)
303307

304-
tflog.Debug(ctx, fmt.Sprintf("Creating organization code security configuration: %s/%s", org, name), map[string]any{
308+
tflog.Debug(ctx, "Creating organization code security configuration", map[string]any{
305309
"organization": org,
306310
"name": name,
307311
})
@@ -310,7 +314,7 @@ func resourceGithubOrganizationSecurityConfigurationCreate(ctx context.Context,
310314

311315
configuration, _, err := client.Organizations.CreateCodeSecurityConfiguration(ctx, org, config)
312316
if err != nil {
313-
tflog.Error(ctx, fmt.Sprintf("Failed to create organization code security configuration: %s/%s", org, name), map[string]any{
317+
tflog.Error(ctx, "Failed to create organization code security configuration", map[string]any{
314318
"organization": org,
315319
"name": name,
316320
"error": err.Error(),
@@ -324,7 +328,7 @@ func resourceGithubOrganizationSecurityConfigurationCreate(ctx context.Context,
324328
}
325329
d.SetId(id)
326330

327-
tflog.Info(ctx, fmt.Sprintf("Created organization code security configuration: %s/%s (ID: %d)", org, name, configuration.GetID()), map[string]any{
331+
tflog.Info(ctx, "Created organization code security configuration", map[string]any{
328332
"organization": org,
329333
"name": name,
330334
"id": configuration.GetID(),
@@ -350,7 +354,7 @@ func resourceGithubOrganizationSecurityConfigurationRead(ctx context.Context, d
350354
return diag.FromErr(err)
351355
}
352356

353-
tflog.Trace(ctx, fmt.Sprintf("Reading organization code security configuration: %s/%d", org, id), map[string]any{
357+
tflog.Trace(ctx, "Reading organization code security configuration", map[string]any{
354358
"organization": org,
355359
"id": id,
356360
})
@@ -360,15 +364,15 @@ func resourceGithubOrganizationSecurityConfigurationRead(ctx context.Context, d
360364
var ghErr *github.ErrorResponse
361365
if errors.As(err, &ghErr) {
362366
if ghErr.Response.StatusCode == http.StatusNotFound {
363-
tflog.Info(ctx, fmt.Sprintf("Removing organization code security configuration %s/%d from state because it no longer exists in GitHub", org, id), map[string]any{
367+
tflog.Info(ctx, "Removing organization code security configuration from state because it no longer exists in GitHub", map[string]any{
364368
"organization": org,
365369
"id": id,
366370
})
367371
d.SetId("")
368372
return nil
369373
}
370374
}
371-
tflog.Error(ctx, fmt.Sprintf("Failed to read organization code security configuration: %s/%d", org, id), map[string]any{
375+
tflog.Error(ctx, "Failed to read organization code security configuration", map[string]any{
372376
"organization": org,
373377
"id": id,
374378
"error": err.Error(),
@@ -380,7 +384,7 @@ func resourceGithubOrganizationSecurityConfigurationRead(ctx context.Context, d
380384
return diags
381385
}
382386

383-
tflog.Trace(ctx, fmt.Sprintf("Successfully read organization code security configuration: %s/%d", org, id), map[string]any{
387+
tflog.Trace(ctx, "Successfully read organization code security configuration", map[string]any{
384388
"organization": org,
385389
"id": id,
386390
})
@@ -394,18 +398,10 @@ func resourceGithubOrganizationSecurityConfigurationUpdate(ctx context.Context,
394398
return diag.FromErr(err)
395399
}
396400
client := meta.(*Owner).v3client
401+
org := meta.(*Owner).name
402+
id := int64(d.Get("configuration_id").(int))
397403

398-
org, idStr, err := parseID2(d.Id())
399-
if err != nil {
400-
return diag.FromErr(err)
401-
}
402-
403-
id, err := strconv.ParseInt(idStr, 10, 64)
404-
if err != nil {
405-
return diag.FromErr(err)
406-
}
407-
408-
tflog.Debug(ctx, fmt.Sprintf("Updating organization code security configuration: %s/%d", org, id), map[string]any{
404+
tflog.Debug(ctx, "Updating organization code security configuration", map[string]any{
409405
"organization": org,
410406
"id": id,
411407
})
@@ -414,15 +410,15 @@ func resourceGithubOrganizationSecurityConfigurationUpdate(ctx context.Context,
414410

415411
_, _, err = client.Organizations.UpdateCodeSecurityConfiguration(ctx, org, id, config)
416412
if err != nil {
417-
tflog.Error(ctx, fmt.Sprintf("Failed to update organization code security configuration: %s/%d", org, id), map[string]any{
413+
tflog.Error(ctx, "Failed to update organization code security configuration", map[string]any{
418414
"organization": org,
419415
"id": id,
420416
"error": err.Error(),
421417
})
422418
return diag.FromErr(err)
423419
}
424420

425-
tflog.Info(ctx, fmt.Sprintf("Updated organization code security configuration: %s/%d", org, id), map[string]any{
421+
tflog.Info(ctx, "Updated organization code security configuration", map[string]any{
426422
"organization": org,
427423
"id": id,
428424
})
@@ -436,18 +432,10 @@ func resourceGithubOrganizationSecurityConfigurationDelete(ctx context.Context,
436432
return diag.FromErr(err)
437433
}
438434
client := meta.(*Owner).v3client
435+
org := meta.(*Owner).name
436+
id := int64(d.Get("configuration_id").(int))
439437

440-
org, idStr, err := parseID2(d.Id())
441-
if err != nil {
442-
return diag.FromErr(err)
443-
}
444-
445-
id, err := strconv.ParseInt(idStr, 10, 64)
446-
if err != nil {
447-
return diag.FromErr(err)
448-
}
449-
450-
tflog.Debug(ctx, fmt.Sprintf("Deleting organization code security configuration: %s/%d", org, id), map[string]any{
438+
tflog.Debug(ctx, "Deleting organization code security configuration", map[string]any{
451439
"organization": org,
452440
"id": id,
453441
})
@@ -456,21 +444,21 @@ func resourceGithubOrganizationSecurityConfigurationDelete(ctx context.Context,
456444
if err != nil {
457445
var ghErr *github.ErrorResponse
458446
if errors.As(err, &ghErr) && ghErr.Response.StatusCode == http.StatusNotFound {
459-
tflog.Info(ctx, fmt.Sprintf("Organization code security configuration %s/%d already deleted", org, id), map[string]any{
447+
tflog.Info(ctx, "Organization code security configuration already deleted", map[string]any{
460448
"organization": org,
461449
"id": id,
462450
})
463451
return nil
464452
}
465-
tflog.Error(ctx, fmt.Sprintf("Failed to delete organization code security configuration: %s/%d", org, id), map[string]any{
453+
tflog.Error(ctx, "Failed to delete organization code security configuration", map[string]any{
466454
"organization": org,
467455
"id": id,
468456
"error": err.Error(),
469457
})
470458
return diag.FromErr(err)
471459
}
472460

473-
tflog.Info(ctx, fmt.Sprintf("Deleted organization code security configuration: %s/%d", org, id), map[string]any{
461+
tflog.Info(ctx, "Deleted organization code security configuration", map[string]any{
474462
"organization": org,
475463
"id": id,
476464
})

github/util_security_configuration.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ func flattenSecretScanningDelegatedBypassOptions(options *github.SecretScanningD
6767
// setCodeSecurityConfigurationState writes all shared CodeSecurityConfiguration fields to Terraform state.
6868
// Used by both the organization and enterprise security configuration resources.
6969
func setCodeSecurityConfigurationState(d *schema.ResourceData, configuration *github.CodeSecurityConfiguration) diag.Diagnostics {
70+
if err := d.Set("configuration_id", configuration.GetID()); err != nil {
71+
return diag.FromErr(err)
72+
}
7073
if err := d.Set("name", configuration.Name); err != nil {
7174
return diag.FromErr(err)
7275
}

website/docs/r/enterprise_security_configuration.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ The following arguments are supported:
6060

6161
## Attributes Reference
6262

63+
* `configuration_id` - The numeric ID of the code security configuration.
6364
* `target_type` - The target type of the code security configuration.
6465

6566
### Dependency Graph Autosubmit Action Options

0 commit comments

Comments
 (0)