-
Notifications
You must be signed in to change notification settings - Fork 9.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
New resource: aws cloudwatch query definition #17899
Changes from 19 commits
4c258f6
51161fb
b39e2eb
0781a6e
5528826
9c4b012
84e2097
f21ad4d
f415d4b
2144f2a
96657fd
d62d0f0
203abdb
b2fe015
13bde98
277ec2e
d946107
53df017
0373da6
de3b9eb
39b3d3e
b7939b8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
package finder | ||
|
||
import ( | ||
"github.com/aws/aws-sdk-go/aws" | ||
"github.com/aws/aws-sdk-go/service/cloudwatchlogs" | ||
"github.com/terraform-providers/terraform-provider-aws/aws/internal/service/cloudwatchlogs/lister" | ||
) | ||
|
||
func QueryDefinition(conn *cloudwatchlogs.CloudWatchLogs, qName, qId string) (*cloudwatchlogs.QueryDefinition, error) { | ||
input := &cloudwatchlogs.DescribeQueryDefinitionsInput{ | ||
QueryDefinitionNamePrefix: aws.String(qName), | ||
MaxResults: aws.Int64(10), | ||
} | ||
|
||
var result *cloudwatchlogs.QueryDefinition | ||
err := lister.DescribeQueryDefinitionsPages(conn, input, func(page *cloudwatchlogs.DescribeQueryDefinitionsOutput, lastPage bool) bool { | ||
if page == nil { | ||
return !lastPage | ||
} | ||
|
||
for _, qd := range page.QueryDefinitions { | ||
if aws.StringValue(qd.QueryDefinitionId) == qId { | ||
result = qd | ||
return false | ||
} | ||
} | ||
return !lastPage | ||
}) | ||
|
||
return result, err | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
//go:generate go run ../../../generators/listpages/main.go -function=DescribeQueryDefinitions github.com/aws/aws-sdk-go/service/cloudwatchlogs | ||
|
||
package lister |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,168 @@ | ||||||||||||||||||||||||||||||||||||||||||||
package aws | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
import ( | ||||||||||||||||||||||||||||||||||||||||||||
"context" | ||||||||||||||||||||||||||||||||||||||||||||
"fmt" | ||||||||||||||||||||||||||||||||||||||||||||
"github.com/aws/aws-sdk-go/aws" | ||||||||||||||||||||||||||||||||||||||||||||
"github.com/aws/aws-sdk-go/service/cloudwatchlogs" | ||||||||||||||||||||||||||||||||||||||||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag" | ||||||||||||||||||||||||||||||||||||||||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||||||||||||||||||||||||||||||||||||||||||||
"github.com/terraform-providers/terraform-provider-aws/aws/internal/service/cloudwatchlogs/finder" | ||||||||||||||||||||||||||||||||||||||||||||
"log" | ||||||||||||||||||||||||||||||||||||||||||||
"strings" | ||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
func resourceAwsCloudWatchQueryDefinition() *schema.Resource { | ||||||||||||||||||||||||||||||||||||||||||||
return &schema.Resource{ | ||||||||||||||||||||||||||||||||||||||||||||
CreateContext: resourceAwsCloudWatchQueryDefinitionCreate, | ||||||||||||||||||||||||||||||||||||||||||||
ReadContext: resourceAwsCloudWatchQueryDefinitionRead, | ||||||||||||||||||||||||||||||||||||||||||||
UpdateContext: resourceAwsCloudWatchQueryDefinitionUpdate, | ||||||||||||||||||||||||||||||||||||||||||||
DeleteContext: resourceAwsCloudWatchQueryDefinitionDelete, | ||||||||||||||||||||||||||||||||||||||||||||
Importer: &schema.ResourceImporter{ | ||||||||||||||||||||||||||||||||||||||||||||
StateContext: resourceAwsCloudWatchQueryDefinitionImport, | ||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||
SchemaVersion: 1, | ||||||||||||||||||||||||||||||||||||||||||||
Schema: map[string]*schema.Schema{ | ||||||||||||||||||||||||||||||||||||||||||||
"name": { | ||||||||||||||||||||||||||||||||||||||||||||
Type: schema.TypeString, | ||||||||||||||||||||||||||||||||||||||||||||
Required: true, | ||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||
"query": { | ||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. To more closely match the API, we should call this |
||||||||||||||||||||||||||||||||||||||||||||
Type: schema.TypeString, | ||||||||||||||||||||||||||||||||||||||||||||
Required: true, | ||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||
"query_definition_id": { | ||||||||||||||||||||||||||||||||||||||||||||
Type: schema.TypeString, | ||||||||||||||||||||||||||||||||||||||||||||
Computed: true, | ||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||
"log_groups": { | ||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. To more closely match the API, we should call this |
||||||||||||||||||||||||||||||||||||||||||||
Type: schema.TypeList, | ||||||||||||||||||||||||||||||||||||||||||||
Optional: true, | ||||||||||||||||||||||||||||||||||||||||||||
Elem: &schema.Schema{ | ||||||||||||||||||||||||||||||||||||||||||||
Type: schema.TypeString, | ||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Log group names have a particular format, so we can add |
||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
func resourceAwsCloudWatchQueryDefinitionCreate(c context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { | ||||||||||||||||||||||||||||||||||||||||||||
conn := meta.(*AWSClient).cloudwatchlogsconn | ||||||||||||||||||||||||||||||||||||||||||||
params := getAwsCloudWatchQueryDefinitionInput(d) | ||||||||||||||||||||||||||||||||||||||||||||
r, err := conn.PutQueryDefinition(params) | ||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||
return diag.FromErr(err) | ||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We prefer adding a context message to error returns, for example
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
d.SetId(*r.QueryDefinitionId) | ||||||||||||||||||||||||||||||||||||||||||||
if err := d.Set("query_definition_id", aws.StringValue(r.QueryDefinitionId)); err != nil { | ||||||||||||||||||||||||||||||||||||||||||||
return diag.FromErr(err) | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+58
to
+60
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Checking for errors on
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||
return resourceAwsCloudWatchQueryDefinitionRead(c, d, meta) | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
func getAwsCloudWatchQueryDefinitionInput(d *schema.ResourceData) *cloudwatchlogs.PutQueryDefinitionInput { | ||||||||||||||||||||||||||||||||||||||||||||
name := d.Get("name").(string) | ||||||||||||||||||||||||||||||||||||||||||||
logGroups := d.Get("log_groups").([]interface{}) | ||||||||||||||||||||||||||||||||||||||||||||
var lgs []*string | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
for _, group := range logGroups { | ||||||||||||||||||||||||||||||||||||||||||||
l := group.(string) | ||||||||||||||||||||||||||||||||||||||||||||
lgs = append(lgs, aws.String(l)) | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
query := d.Get("query").(string) | ||||||||||||||||||||||||||||||||||||||||||||
return &cloudwatchlogs.PutQueryDefinitionInput{ | ||||||||||||||||||||||||||||||||||||||||||||
Name: aws.String(name), | ||||||||||||||||||||||||||||||||||||||||||||
LogGroupNames: lgs, | ||||||||||||||||||||||||||||||||||||||||||||
QueryString: aws.String(query), | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+66
to
+79
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The function
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
func resourceAwsCloudWatchQueryDefinitionRead(c context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { | ||||||||||||||||||||||||||||||||||||||||||||
conn := meta.(*AWSClient).cloudwatchlogsconn | ||||||||||||||||||||||||||||||||||||||||||||
name := d.Get("name").(string) | ||||||||||||||||||||||||||||||||||||||||||||
id := d.Id() | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
result, err := finder.QueryDefinition(conn, name, id) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||
return diag.FromErr(err) | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if result == nil { | ||||||||||||||||||||||||||||||||||||||||||||
log.Printf("[WARN] cloudwatch query definition (%s) not found, removing from state", d.Id()) | ||||||||||||||||||||||||||||||||||||||||||||
d.SetId("") | ||||||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||||||
if err := d.Set("query", aws.StringValue(result.QueryString)); err != nil { | ||||||||||||||||||||||||||||||||||||||||||||
return diag.FromErr(err) | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
if err := d.Set("query_definition_id", aws.StringValue(result.QueryDefinitionId)); err != nil { | ||||||||||||||||||||||||||||||||||||||||||||
return diag.FromErr(err) | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
if err := d.Set("log_groups", aws.StringValueSlice(result.LogGroupNames)); err != nil { | ||||||||||||||||||||||||||||||||||||||||||||
return diag.FromErr(err) | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
return nil | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
func resourceAwsCloudWatchQueryDefinitionUpdate(c context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { | ||||||||||||||||||||||||||||||||||||||||||||
conn := meta.(*AWSClient).cloudwatchlogsconn | ||||||||||||||||||||||||||||||||||||||||||||
queryId := d.Get("query_definition_id").(string) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
parms := getAwsCloudWatchQueryDefinitionInput(d) | ||||||||||||||||||||||||||||||||||||||||||||
parms.QueryDefinitionId = aws.String(queryId) | ||||||||||||||||||||||||||||||||||||||||||||
_, err := conn.PutQueryDefinition(parms) | ||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||
return diag.FromErr(err) | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
return resourceAwsCloudWatchQueryDefinitionRead(c, d, meta) | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
func resourceAwsCloudWatchQueryDefinitionDelete(c context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { | ||||||||||||||||||||||||||||||||||||||||||||
conn := meta.(*AWSClient).cloudwatchlogsconn | ||||||||||||||||||||||||||||||||||||||||||||
queryId := d.Get("query_definition_id").(string) | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
params := &cloudwatchlogs.DeleteQueryDefinitionInput{QueryDefinitionId: aws.String(queryId)} | ||||||||||||||||||||||||||||||||||||||||||||
_, err := conn.DeleteQueryDefinition(params) | ||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||
return diag.FromErr(err) | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
return nil | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
func resourceAwsCloudWatchQueryDefinitionImport(c context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { | ||||||||||||||||||||||||||||||||||||||||||||
name, id, err := parseImportFields(d.Id()) | ||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||
return nil, err | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if err := d.Set("name", name); err != nil { | ||||||||||||||||||||||||||||||||||||||||||||
return nil, err | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
d.SetId(id) | ||||||||||||||||||||||||||||||||||||||||||||
return []*schema.ResourceData{d}, nil | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
func parseImportFields(id string) (string, string, error) { | ||||||||||||||||||||||||||||||||||||||||||||
// having underscores in the query name is valid. The last occurrence of the underscore should separate the ID | ||||||||||||||||||||||||||||||||||||||||||||
// from the name of the query. | ||||||||||||||||||||||||||||||||||||||||||||
malformed := "resource ID did not contain correct number of fields for import" | ||||||||||||||||||||||||||||||||||||||||||||
lastUnd := strings.LastIndexByte(id, '_') | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
// if there isn't an underscore, the import is malformed. | ||||||||||||||||||||||||||||||||||||||||||||
if lastUnd < 0 { | ||||||||||||||||||||||||||||||||||||||||||||
return "", "", fmt.Errorf(malformed) | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
name, qId := id[0:lastUnd], id[lastUnd+1:] | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
// if either name or ID are the empty string, the import is malformed. | ||||||||||||||||||||||||||||||||||||||||||||
if name == "" || qId == "" { | ||||||||||||||||||||||||||||||||||||||||||||
return "", "", fmt.Errorf(malformed) | ||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
return name, qId, nil | ||||||||||||||||||||||||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SchemaVersion
should not be set for new resources