Skip to content

Commit 25aedf9

Browse files
authored
Merge pull request #27213 from nclaeys/f-aws_prometheus_workspace_change26444
Add log group arn to aws prometheus workspace 26444
2 parents dfb7948 + 8963e02 commit 25aedf9

12 files changed

+589
-307
lines changed

.changelog/27213.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/aws_prometheus_workspace: Add `logging_configuration` argument
3+
```

internal/service/amp/alert_manager_definition.go

+31-33
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package amp
22

33
import (
44
"context"
5-
"fmt"
65
"log"
76

87
"github.com/aws/aws-sdk-go/aws"
@@ -16,10 +15,11 @@ import (
1615

1716
func ResourceAlertManagerDefinition() *schema.Resource {
1817
return &schema.Resource{
19-
CreateContext: resourceAlertManagerDefinitionCreate,
20-
ReadContext: resourceAlertManagerDefinitionRead,
21-
UpdateContext: resourceAlertManagerDefinitionUpdate,
22-
DeleteContext: resourceAlertManagerDefinitionDelete,
18+
CreateWithoutTimeout: resourceAlertManagerDefinitionCreate,
19+
ReadWithoutTimeout: resourceAlertManagerDefinitionRead,
20+
UpdateWithoutTimeout: resourceAlertManagerDefinitionUpdate,
21+
DeleteWithoutTimeout: resourceAlertManagerDefinitionDelete,
22+
2323
Importer: &schema.ResourceImporter{
2424
State: schema.ImportStatePassthrough,
2525
},
@@ -47,39 +47,16 @@ func resourceAlertManagerDefinitionCreate(ctx context.Context, d *schema.Resourc
4747
WorkspaceId: aws.String(workspaceID),
4848
}
4949

50-
log.Printf("[DEBUG] Creating Prometheus Alert Manager Definition: %s", input)
5150
_, err := conn.CreateAlertManagerDefinitionWithContext(ctx, input)
5251

5352
if err != nil {
54-
return diag.FromErr(fmt.Errorf("error creating Prometheus Alert Manager Definition (%s): %w", workspaceID, err))
53+
return diag.Errorf("creating Prometheus Alert Manager Definition (%s): %s", workspaceID, err)
5554
}
5655

5756
d.SetId(workspaceID)
5857

5958
if _, err := waitAlertManagerDefinitionCreated(ctx, conn, d.Id()); err != nil {
60-
return diag.FromErr(fmt.Errorf("error waiting for Prometheus Alert Manager Definition (%s) create: %w", d.Id(), err))
61-
}
62-
63-
return resourceAlertManagerDefinitionRead(ctx, d, meta)
64-
}
65-
66-
func resourceAlertManagerDefinitionUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
67-
conn := meta.(*conns.AWSClient).AMPConn
68-
69-
input := &prometheusservice.PutAlertManagerDefinitionInput{
70-
Data: []byte(d.Get("definition").(string)),
71-
WorkspaceId: aws.String(d.Get("workspace_id").(string)),
72-
}
73-
74-
log.Printf("[DEBUG] Updating Prometheus Alert Manager Definition: %s", input)
75-
_, err := conn.PutAlertManagerDefinitionWithContext(ctx, input)
76-
77-
if err != nil {
78-
return diag.FromErr(fmt.Errorf("error updating Prometheus Alert Manager Definition (%s): %w", d.Id(), err))
79-
}
80-
81-
if _, err := waitAlertManagerDefinitionUpdated(ctx, conn, d.Id()); err != nil {
82-
return diag.FromErr(fmt.Errorf("error waiting for Prometheus Alert Manager Definition (%s) update: %w", d.Id(), err))
59+
return diag.Errorf("waiting for Prometheus Alert Manager Definition (%s) create: %s", d.Id(), err)
8360
}
8461

8562
return resourceAlertManagerDefinitionRead(ctx, d, meta)
@@ -97,7 +74,7 @@ func resourceAlertManagerDefinitionRead(ctx context.Context, d *schema.ResourceD
9774
}
9875

9976
if err != nil {
100-
return diag.FromErr(fmt.Errorf("error reading Prometheus Alert Manager Definition (%s): %w", d.Id(), err))
77+
return diag.Errorf("reading Prometheus Alert Manager Definition (%s): %s", d.Id(), err)
10178
}
10279

10380
d.Set("definition", string(amd.Data))
@@ -106,6 +83,27 @@ func resourceAlertManagerDefinitionRead(ctx context.Context, d *schema.ResourceD
10683
return nil
10784
}
10885

86+
func resourceAlertManagerDefinitionUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
87+
conn := meta.(*conns.AWSClient).AMPConn
88+
89+
input := &prometheusservice.PutAlertManagerDefinitionInput{
90+
Data: []byte(d.Get("definition").(string)),
91+
WorkspaceId: aws.String(d.Get("workspace_id").(string)),
92+
}
93+
94+
_, err := conn.PutAlertManagerDefinitionWithContext(ctx, input)
95+
96+
if err != nil {
97+
return diag.Errorf("updating Prometheus Alert Manager Definition (%s): %s", d.Id(), err)
98+
}
99+
100+
if _, err := waitAlertManagerDefinitionUpdated(ctx, conn, d.Id()); err != nil {
101+
return diag.Errorf("waiting for Prometheus Alert Manager Definition (%s) update: %s", d.Id(), err)
102+
}
103+
104+
return resourceAlertManagerDefinitionRead(ctx, d, meta)
105+
}
106+
109107
func resourceAlertManagerDefinitionDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
110108
conn := meta.(*conns.AWSClient).AMPConn
111109

@@ -119,11 +117,11 @@ func resourceAlertManagerDefinitionDelete(ctx context.Context, d *schema.Resourc
119117
}
120118

121119
if err != nil {
122-
return diag.FromErr(fmt.Errorf("error deleting Prometheus Alert Manager Definition (%s): %w", d.Id(), err))
120+
return diag.Errorf("deleting Prometheus Alert Manager Definition (%s): %s", d.Id(), err)
123121
}
124122

125123
if _, err := waitAlertManagerDefinitionDeleted(ctx, conn, d.Id()); err != nil {
126-
return diag.FromErr(fmt.Errorf("error waiting for Prometheus Alert Manager Definition (%s) delete: %w", d.Id(), err))
124+
return diag.Errorf("waiting for Prometheus Alert Manager Definition (%s) delete: %s", d.Id(), err)
127125
}
128126

129127
return nil

internal/service/amp/alert_manager_definition_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ alertmanager_config: |
138138

139139
func testAccAlertManagerDefinitionConfig_basic(definition string) string {
140140
return fmt.Sprintf(`
141-
resource "aws_prometheus_workspace" "test" {
142-
}
141+
resource "aws_prometheus_workspace" "test" {}
142+
143143
resource "aws_prometheus_alert_manager_definition" "test" {
144144
workspace_id = aws_prometheus_workspace.test.id
145145
definition = %[1]q

internal/service/amp/find.go

+28-3
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ func FindRuleGroupNamespaceByARN(ctx context.Context, conn *prometheusservice.Pr
7676
return output.RuleGroupsNamespace, nil
7777
}
7878

79-
func FindWorkspaceByID(conn *prometheusservice.PrometheusService, id string) (*prometheusservice.WorkspaceDescription, error) {
79+
func FindWorkspaceByID(ctx context.Context, conn *prometheusservice.PrometheusService, id string) (*prometheusservice.WorkspaceDescription, error) {
8080
input := &prometheusservice.DescribeWorkspaceInput{
8181
WorkspaceId: aws.String(id),
8282
}
8383

84-
output, err := conn.DescribeWorkspace(input)
84+
output, err := conn.DescribeWorkspaceWithContext(ctx, input)
8585

8686
if tfawserr.ErrCodeEquals(err, prometheusservice.ErrCodeResourceNotFoundException) {
8787
return nil, &resource.NotFoundError{
@@ -94,9 +94,34 @@ func FindWorkspaceByID(conn *prometheusservice.PrometheusService, id string) (*p
9494
return nil, err
9595
}
9696

97-
if output == nil || output.Workspace == nil {
97+
if output == nil || output.Workspace == nil || output.Workspace.Status == nil {
9898
return nil, tfresource.NewEmptyResultError(input)
9999
}
100100

101101
return output.Workspace, nil
102102
}
103+
104+
func FindLoggingConfigurationByWorkspaceID(ctx context.Context, conn *prometheusservice.PrometheusService, id string) (*prometheusservice.LoggingConfigurationMetadata, error) {
105+
input := &prometheusservice.DescribeLoggingConfigurationInput{
106+
WorkspaceId: aws.String(id),
107+
}
108+
109+
output, err := conn.DescribeLoggingConfigurationWithContext(ctx, input)
110+
111+
if tfawserr.ErrCodeEquals(err, prometheusservice.ErrCodeResourceNotFoundException) {
112+
return nil, &resource.NotFoundError{
113+
LastError: err,
114+
LastRequest: input,
115+
}
116+
}
117+
118+
if err != nil {
119+
return nil, err
120+
}
121+
122+
if output == nil || output.LoggingConfiguration == nil || output.LoggingConfiguration.Status == nil {
123+
return nil, tfresource.NewEmptyResultError(input)
124+
}
125+
126+
return output.LoggingConfiguration, nil
127+
}

internal/service/amp/rule_group_namespace.go

+33-35
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package amp
22

33
import (
44
"context"
5-
"fmt"
65
"log"
76

87
"github.com/aws/aws-sdk-go/aws"
@@ -16,10 +15,11 @@ import (
1615

1716
func ResourceRuleGroupNamespace() *schema.Resource {
1817
return &schema.Resource{
19-
CreateContext: resourceRuleGroupNamespaceCreate,
20-
ReadContext: resourceRuleGroupNamespaceRead,
21-
UpdateContext: resourceRuleGroupNamespaceUpdate,
22-
DeleteContext: resourceRuleGroupNamespaceDelete,
18+
CreateWithoutTimeout: resourceRuleGroupNamespaceCreate,
19+
ReadWithoutTimeout: resourceRuleGroupNamespaceRead,
20+
UpdateWithoutTimeout: resourceRuleGroupNamespaceUpdate,
21+
DeleteWithoutTimeout: resourceRuleGroupNamespaceDelete,
22+
2323
Importer: &schema.ResourceImporter{
2424
State: schema.ImportStatePassthrough,
2525
},
@@ -49,45 +49,21 @@ func resourceRuleGroupNamespaceCreate(ctx context.Context, d *schema.ResourceDat
4949
workspaceID := d.Get("workspace_id").(string)
5050
name := d.Get("name").(string)
5151
input := &prometheusservice.CreateRuleGroupsNamespaceInput{
52-
Name: aws.String(name),
5352
Data: []byte(d.Get("data").(string)),
53+
Name: aws.String(name),
5454
WorkspaceId: aws.String(workspaceID),
5555
}
5656

57-
log.Printf("[DEBUG] Creating Prometheus Rule Group Namespace: %s", input)
5857
output, err := conn.CreateRuleGroupsNamespaceWithContext(ctx, input)
5958

6059
if err != nil {
61-
return diag.FromErr(fmt.Errorf("error creating Prometheus Rule Group Namespace (%s) for workspace (%s): %w", name, workspaceID, err))
60+
return diag.Errorf("creating Prometheus Rule Group Namespace (%s) for Workspace (%s): %s", name, workspaceID, err)
6261
}
6362

6463
d.SetId(aws.StringValue(output.Arn))
6564

6665
if _, err := waitRuleGroupNamespaceCreated(ctx, conn, d.Id()); err != nil {
67-
return diag.FromErr(fmt.Errorf("error waiting for Prometheus Rule Group Namespace (%s) create: %w", d.Id(), err))
68-
}
69-
70-
return resourceRuleGroupNamespaceRead(ctx, d, meta)
71-
}
72-
73-
func resourceRuleGroupNamespaceUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
74-
conn := meta.(*conns.AWSClient).AMPConn
75-
76-
input := &prometheusservice.PutRuleGroupsNamespaceInput{
77-
Name: aws.String(d.Get("name").(string)),
78-
Data: []byte(d.Get("data").(string)),
79-
WorkspaceId: aws.String(d.Get("workspace_id").(string)),
80-
}
81-
82-
log.Printf("[DEBUG] Updating Prometheus Rule Group Namespace: %s", input)
83-
_, err := conn.PutRuleGroupsNamespaceWithContext(ctx, input)
84-
85-
if err != nil {
86-
return diag.FromErr(fmt.Errorf("error updating Prometheus Rule Group Namespace (%s): %w", d.Id(), err))
87-
}
88-
89-
if _, err := waitRuleGroupNamespaceUpdated(ctx, conn, d.Id()); err != nil {
90-
return diag.FromErr(fmt.Errorf("error waiting for Prometheus Rule Group Namespace (%s) update: %w", d.Id(), err))
66+
return diag.Errorf("waiting for Prometheus Rule Group Namespace (%s) create: %s", d.Id(), err)
9167
}
9268

9369
return resourceRuleGroupNamespaceRead(ctx, d, meta)
@@ -105,7 +81,7 @@ func resourceRuleGroupNamespaceRead(ctx context.Context, d *schema.ResourceData,
10581
}
10682

10783
if err != nil {
108-
return diag.FromErr(fmt.Errorf("error reading Prometheus Rule Group Namespace (%s): %w", d.Id(), err))
84+
return diag.Errorf("reading Prometheus Rule Group Namespace (%s): %s", d.Id(), err)
10985
}
11086

11187
d.Set("data", string(rgn.Data))
@@ -119,6 +95,28 @@ func resourceRuleGroupNamespaceRead(ctx context.Context, d *schema.ResourceData,
11995
return nil
12096
}
12197

98+
func resourceRuleGroupNamespaceUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
99+
conn := meta.(*conns.AWSClient).AMPConn
100+
101+
input := &prometheusservice.PutRuleGroupsNamespaceInput{
102+
Data: []byte(d.Get("data").(string)),
103+
Name: aws.String(d.Get("name").(string)),
104+
WorkspaceId: aws.String(d.Get("workspace_id").(string)),
105+
}
106+
107+
_, err := conn.PutRuleGroupsNamespaceWithContext(ctx, input)
108+
109+
if err != nil {
110+
return diag.Errorf("updating Prometheus Rule Group Namespace (%s): %s", d.Id(), err)
111+
}
112+
113+
if _, err := waitRuleGroupNamespaceUpdated(ctx, conn, d.Id()); err != nil {
114+
return diag.Errorf("waiting for Prometheus Rule Group Namespace (%s) update: %s", d.Id(), err)
115+
}
116+
117+
return resourceRuleGroupNamespaceRead(ctx, d, meta)
118+
}
119+
122120
func resourceRuleGroupNamespaceDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
123121
conn := meta.(*conns.AWSClient).AMPConn
124122

@@ -133,11 +131,11 @@ func resourceRuleGroupNamespaceDelete(ctx context.Context, d *schema.ResourceDat
133131
}
134132

135133
if err != nil {
136-
return diag.FromErr(fmt.Errorf("error deleting Prometheus Rule Group Namespace (%s): %w", d.Id(), err))
134+
return diag.Errorf("deleting Prometheus Rule Group Namespace (%s): %s", d.Id(), err)
137135
}
138136

139137
if _, err := waitRuleGroupNamespaceDeleted(ctx, conn, d.Id()); err != nil {
140-
return diag.FromErr(fmt.Errorf("error waiting for Prometheus Rule Group Namespace (%s) delete: %w", d.Id(), err))
138+
return diag.Errorf("waiting for Prometheus Rule Group Namespace (%s) delete: %s", d.Id(), err)
141139
}
142140

143141
return nil

internal/service/amp/rule_group_namespace_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,8 @@ groups:
143143

144144
func testAccRuleGroupNamespaceConfig_basic(data string) string {
145145
return fmt.Sprintf(`
146-
resource "aws_prometheus_workspace" "test" {
147-
}
146+
resource "aws_prometheus_workspace" "test" {}
147+
148148
resource "aws_prometheus_rule_group_namespace" "test" {
149149
workspace_id = aws_prometheus_workspace.test.id
150150
name = "rules"

internal/service/amp/status.go

+13-34
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,10 @@ import (
55

66
"github.com/aws/aws-sdk-go/aws"
77
"github.com/aws/aws-sdk-go/service/prometheusservice"
8-
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
98
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
109
"github.com/hashicorp/terraform-provider-aws/internal/tfresource"
1110
)
1211

13-
const (
14-
resourceStatusFailed = "Failed"
15-
resourceStatusUnknown = "Unknown"
16-
resourceStatusDeleted = "Deleted"
17-
)
18-
1912
func statusAlertManagerDefinition(ctx context.Context, conn *prometheusservice.PrometheusService, id string) resource.StateRefreshFunc {
2013
return func() (interface{}, string, error) {
2114
output, err := FindAlertManagerDefinitionByID(ctx, conn, id)
@@ -48,48 +41,34 @@ func statusRuleGroupNamespace(ctx context.Context, conn *prometheusservice.Prome
4841
}
4942
}
5043

51-
// statusWorkspaceCreated fetches the Workspace and its Status.
52-
func statusWorkspaceCreated(ctx context.Context, conn *prometheusservice.PrometheusService, id string) resource.StateRefreshFunc {
44+
func statusWorkspace(ctx context.Context, conn *prometheusservice.PrometheusService, id string) resource.StateRefreshFunc {
5345
return func() (interface{}, string, error) {
54-
input := &prometheusservice.DescribeWorkspaceInput{
55-
WorkspaceId: aws.String(id),
56-
}
46+
output, err := FindWorkspaceByID(ctx, conn, id)
5747

58-
output, err := conn.DescribeWorkspaceWithContext(ctx, input)
59-
60-
if err != nil {
61-
return output, resourceStatusFailed, err
48+
if tfresource.NotFound(err) {
49+
return nil, "", nil
6250
}
6351

64-
if output == nil || output.Workspace == nil {
65-
return output, resourceStatusUnknown, nil
52+
if err != nil {
53+
return nil, "", err
6654
}
6755

68-
return output.Workspace, aws.StringValue(output.Workspace.Status.StatusCode), nil
56+
return output, aws.StringValue(output.Status.StatusCode), nil
6957
}
7058
}
7159

72-
// statusWorkspaceDeleted fetches the Workspace and its Status
73-
func statusWorkspaceDeleted(ctx context.Context, conn *prometheusservice.PrometheusService, id string) resource.StateRefreshFunc {
60+
func statusLoggingConfiguration(ctx context.Context, conn *prometheusservice.PrometheusService, workspaceID string) resource.StateRefreshFunc {
7461
return func() (interface{}, string, error) {
75-
input := &prometheusservice.DescribeWorkspaceInput{
76-
WorkspaceId: aws.String(id),
77-
}
78-
79-
output, err := conn.DescribeWorkspaceWithContext(ctx, input)
62+
output, err := FindLoggingConfigurationByWorkspaceID(ctx, conn, workspaceID)
8063

81-
if tfawserr.ErrCodeEquals(err, prometheusservice.ErrCodeResourceNotFoundException) {
82-
return output, resourceStatusDeleted, nil
64+
if tfresource.NotFound(err) {
65+
return nil, "", nil
8366
}
8467

8568
if err != nil {
86-
return output, resourceStatusUnknown, err
87-
}
88-
89-
if output == nil || output.Workspace == nil {
90-
return output, resourceStatusUnknown, nil
69+
return nil, "", err
9170
}
9271

93-
return output.Workspace, aws.StringValue(output.Workspace.Status.StatusCode), nil
72+
return output, aws.StringValue(output.Status.StatusCode), nil
9473
}
9574
}

0 commit comments

Comments
 (0)