diff --git a/admin_run.go b/admin_run.go index 4dc391326..adfac0378 100644 --- a/admin_run.go +++ b/admin_run.go @@ -61,8 +61,10 @@ const ( type AdminRunsListOptions struct { ListOptions - RunStatus string `url:"filter[status],omitempty"` - Query string `url:"q,omitempty"` + RunStatus string `url:"filter[status],omitempty"` + CreatedBefore string `url:"filter[to],omitempty"` + CreatedAfter string `url:"filter[from],omitempty"` + Query string `url:"q,omitempty"` // Optional: A list of relations to include. See available resources // https://developer.hashicorp.com/terraform/enterprise/api-docs/admin/runs#available-related-resources Include []AdminRunIncludeOpt `url:"include,omitempty"` @@ -123,6 +125,10 @@ func (o *AdminRunsListOptions) valid() error { return nil } + if err := validateAdminRunDateRanges(o.CreatedBefore, o.CreatedAfter); err != nil { + return err + } + if err := validateAdminRunFilterParams(o.RunStatus); err != nil { return err } @@ -130,6 +136,24 @@ func (o *AdminRunsListOptions) valid() error { return nil } +func validateAdminRunDateRanges(before, after string) error { + if validString(&before) { + _, err := time.Parse(time.RFC3339, before) + if err != nil { + return fmt.Errorf("invalid date format for CreatedBefore: '%s', must be in RFC3339 format", before) + } + } + + if validString(&after) { + _, err := time.Parse(time.RFC3339, after) + if err != nil { + return fmt.Errorf("invalid date format for CreatedAfter: '%s', must be in RFC3339 format", after) + } + } + + return nil +} + func validateAdminRunFilterParams(runStatus string) error { // For the platform, an invalid filter value is a semantically understood query that returns an empty set, no error, no warning. But for go-tfe, an invalid value is good enough reason to error prior to a network call to the platform: if validString(&runStatus) {