Skip to content

Commit 9af6b72

Browse files
authored
Merge pull request #135 from SumoLogic/ssain-fix-ingest-budget
deprecate ingest budget assignment, new ingest budget tests
2 parents 3239aaf + fae8ea7 commit 9af6b72

6 files changed

+159
-115
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,8 @@ ENHANCEMENTS:
1212

1313
BUG FIXES:
1414

15-
* resource/sumologic_partition: Fixes decomissioning of partitions [GH-86]
15+
* resource/sumologic_partition: Fixes decomissioning of partitions [GH-86]
16+
17+
DEPRECATIONS:
18+
19+
* resource/sumologiccollector_ingest_budget_assignment: Deprecated in favor of assigning ingest budgets through the _budget field attribute of collectors [GH-135]

sumologic/resource_sumologic_collector_ingest_budget_assignment.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ import (
99

1010
func resourceSumologicCollectorIngestBudgetAssignment() *schema.Resource {
1111
return &schema.Resource{
12-
Create: resourceSumologicCollectorIngestBudgetAssignmentCreate,
13-
Read: resourceSumologicCollectorIngestBudgetAssignmentRead,
14-
Delete: resourceSumologicCollectorIngestBudgetAssignmentDelete,
12+
DeprecationMessage: "use fields attribute of collector resource instead to assign an ingest budget",
13+
Create: resourceSumologicCollectorIngestBudgetAssignmentCreate,
14+
Read: resourceSumologicCollectorIngestBudgetAssignmentRead,
15+
Delete: resourceSumologicCollectorIngestBudgetAssignmentDelete,
1516

1617
Schema: map[string]*schema.Schema{
1718
"collector_id": {

sumologic/resource_sumologic_collector_ingest_budget_assignment_test.go

Lines changed: 0 additions & 33 deletions
This file was deleted.

sumologic/resource_sumologic_ingest_budget_test.go

Lines changed: 129 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,160 @@
11
package sumologic
22

33
import (
4+
"fmt"
45
"testing"
56

7+
"github.com/hashicorp/terraform-plugin-sdk/helper/acctest"
68
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-sdk/terraform"
710
)
811

912
func TestAccSumologicIngestBudget_create(t *testing.T) {
13+
var ingestBudget IngestBudget
14+
name := fmt.Sprintf("tf-%s", acctest.RandString(5))
15+
fieldValue := fmt.Sprintf("tf-%s", acctest.RandString(5))
16+
description := fmt.Sprintf("tf-%s", acctest.RandString(10))
1017
resource.Test(t, resource.TestCase{
11-
Providers: testAccProviders,
18+
PreCheck: func() { testAccPreCheck(t) },
19+
Providers: testAccProviders,
20+
CheckDestroy: testAccCheckIngestBudgetDestroy,
1221
Steps: []resource.TestStep{
1322
{
14-
Config: testAccSumologicIngestBudgetConfig,
23+
Config: testAccSumologicIngestBudgetConfig(name, fieldValue, description),
1524
Check: resource.ComposeTestCheckFunc(
16-
resource.TestCheckResourceAttr("sumologic_ingest_budget.budget", "name", "test"),
17-
resource.TestCheckResourceAttr("sumologic_ingest_budget.budget", "field_value", "test"),
25+
testAccCheckIngestBudgetExists("sumologic_ingest_budget.budget", &ingestBudget),
26+
testAccCheckIngestBudgetValues(&ingestBudget, name, fieldValue, description, 30000000000),
27+
resource.TestCheckResourceAttr("sumologic_ingest_budget.budget", "name", name),
28+
resource.TestCheckResourceAttr("sumologic_ingest_budget.budget", "field_value", fieldValue),
1829
resource.TestCheckResourceAttr("sumologic_ingest_budget.budget", "capacity_bytes", "30000000000"),
19-
resource.TestCheckResourceAttr("sumologic_ingest_budget.budget", "description", "For testing purposes"),
30+
resource.TestCheckResourceAttr("sumologic_ingest_budget.budget", "description", description),
2031
resource.TestCheckResourceAttr("sumologic_ingest_budget.budget", "timezone", "Etc/UTC"),
2132
resource.TestCheckResourceAttr("sumologic_ingest_budget.budget", "reset_time", "00:00"),
2233
resource.TestCheckResourceAttr("sumologic_ingest_budget.budget", "action", "keepCollecting"),
2334
),
2435
},
36+
{
37+
ResourceName: "sumologic_ingest_budget.budget",
38+
ImportState: true,
39+
ImportStateVerify: true,
40+
ImportStateId: name,
41+
},
2542
}})
2643
}
2744

28-
func TestAccSumologicIngestBudget_basic(t *testing.T) {
45+
func TestAccSumologicIngestBudget_assign(t *testing.T) {
46+
var ingestBudget IngestBudget
47+
name := fmt.Sprintf("tf-%s", acctest.RandString(5))
48+
collectorName := fmt.Sprintf("tf-%s", acctest.RandString(5))
49+
fieldValue := fmt.Sprintf("tf-%s", acctest.RandString(5))
50+
description := fmt.Sprintf("tf-%s", acctest.RandString(10))
2951
resource.Test(t, resource.TestCase{
30-
Providers: testAccProviders,
52+
PreCheck: func() { testAccPreCheck(t) },
53+
Providers: testAccProviders,
54+
CheckDestroy: testAccCheckIngestBudgetDestroy,
3155
Steps: []resource.TestStep{
3256
{
33-
Config: testAccSumologicIngestBudgetConfig,
34-
},
35-
{
36-
ResourceName: "sumologic_ingest_budget.budget",
37-
ImportState: true,
38-
ImportStateVerify: true,
39-
ImportStateId: "test",
57+
Config: testAccSumologicIngestBudgetAssignmentConfig(collectorName, name, fieldValue, description),
58+
Check: resource.ComposeTestCheckFunc(
59+
testAccCheckIngestBudgetExists("sumologic_ingest_budget.testBudget", &ingestBudget),
60+
testAccCheckIngestBudgetValues(&ingestBudget, name, fieldValue, description, 2),
61+
resource.TestCheckResourceAttr("sumologic_ingest_budget.testBudget", "name", name),
62+
resource.TestCheckResourceAttr("sumologic_ingest_budget.testBudget", "field_value", fieldValue),
63+
resource.TestCheckResourceAttr("sumologic_ingest_budget.testBudget", "capacity_bytes", "2"),
64+
resource.TestCheckResourceAttr("sumologic_ingest_budget.testBudget", "timezone", "Etc/UTC"),
65+
resource.TestCheckResourceAttr("sumologic_ingest_budget.testBudget", "reset_time", "00:00"),
66+
resource.TestCheckResourceAttr("sumologic_ingest_budget.testBudget", "action", "keepCollecting"),
67+
resource.TestCheckResourceAttr("sumologic_collector.testCollector", "name", collectorName),
68+
resource.TestCheckResourceAttr("sumologic_collector.testCollector", "fields._budget", fieldValue),
69+
),
4070
},
4171
}})
4272
}
4373

44-
var testAccSumologicIngestBudgetConfig = `
74+
func testAccCheckIngestBudgetDestroy(s *terraform.State) error {
75+
client := testAccProvider.Meta().(*Client)
76+
for _, r := range s.RootModule().Resources {
77+
if r.Type != "sumologic_ingest_budget" {
78+
continue
79+
}
80+
id := r.Primary.ID
81+
u, err := client.GetIngestBudget(id)
82+
if err != nil {
83+
return fmt.Errorf("Encountered an error: " + err.Error())
84+
}
85+
if u != nil {
86+
return fmt.Errorf("Ingest Budget still exists")
87+
}
88+
}
89+
return nil
90+
91+
}
92+
93+
func testAccCheckIngestBudgetExists(n string, ingestBudget *IngestBudget) resource.TestCheckFunc {
94+
return func(s *terraform.State) error {
95+
// find the corresponding state object
96+
rs, ok := s.RootModule().Resources[n]
97+
if !ok {
98+
return fmt.Errorf("Not found: %s", n)
99+
}
100+
101+
// retrieve the configured client from the test setup
102+
c := testAccProvider.Meta().(*Client)
103+
ingestBudgetResp, err := c.GetIngestBudget(rs.Primary.ID)
104+
if err != nil {
105+
return err
106+
}
107+
108+
// If no error, assign the response ingest budget attribute to the ingest budget pointer
109+
*ingestBudget = *ingestBudgetResp
110+
111+
return nil
112+
}
113+
}
114+
115+
func testAccCheckIngestBudgetValues(ingestBudget *IngestBudget, name, fieldValue, description string, capacity int) resource.TestCheckFunc {
116+
return func(s *terraform.State) error {
117+
if ingestBudget.Name != name {
118+
return fmt.Errorf("bad name, expected \"%s\", got: %#v", name, ingestBudget.Name)
119+
}
120+
if ingestBudget.Capacity != capacity {
121+
return fmt.Errorf("bad name, expected \"%d\", got: %#v", capacity, ingestBudget.Capacity)
122+
}
123+
if ingestBudget.FieldValue != fieldValue {
124+
return fmt.Errorf("bad name, expected \"%s\", got: %#v", fieldValue, ingestBudget.FieldValue)
125+
}
126+
if ingestBudget.Description != description {
127+
return fmt.Errorf("bad name, expected \"%s\", got: %#v", description, ingestBudget.Description)
128+
}
129+
return nil
130+
}
131+
}
132+
133+
func testAccSumologicIngestBudgetConfig(name, fieldValue, description string) string {
134+
return fmt.Sprintf(`
45135
resource "sumologic_ingest_budget" "budget" {
46-
name = "test"
47-
field_value = "test"
48-
capacity_bytes = 30000000000
49-
description = "For testing purposes"
136+
name = "%s"
137+
field_value = "%s"
138+
capacity_bytes = 30000000000
139+
description = "%s"
140+
}
141+
`, name, fieldValue, description)
142+
}
143+
144+
func testAccSumologicIngestBudgetAssignmentConfig(collectorName, name, fieldValue, description string) string {
145+
return fmt.Sprintf(`
146+
resource "sumologic_collector" "testCollector" {
147+
name = "%s"
148+
fields = {
149+
"_budget" = "${sumologic_ingest_budget.testBudget.field_value}"
150+
}
151+
}
152+
153+
resource "sumologic_ingest_budget" "testBudget" {
154+
name = "%s"
155+
field_value = "%s"
156+
capacity_bytes = 2
157+
description = "%s"
158+
}
159+
`, collectorName, name, fieldValue, description)
50160
}
51-
`

website/docs/r/collector_ingest_budget_assignment.html.markdown

Lines changed: 0 additions & 44 deletions
This file was deleted.

website/docs/r/ingest_budget.html.markdown

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,40 +6,47 @@ description: |-
66
---
77

88
# sumologic_ingest_budget
9-
Provides a [Sumologic Ingest Budget][1].
9+
Provides a [Sumologic Ingest Budget][1]. To assign an Ingest Budget to the Collector use the field `_budget` with the Field Value of the Ingest Budget to assign.
1010

1111
## Example Usage
1212
```hcl
13+
resource "sumologic_collector" "collector" {
14+
name = "testCollector"
15+
fields = {
16+
"_budget" = "${sumologic_ingest_budget.budget.field_value}"
17+
}
18+
}
19+
1320
resource "sumologic_ingest_budget" "budget" {
14-
name = "test"
21+
name = "testBudget"
1522
field_value = "test"
1623
capacity_bytes = 30000000000
1724
description = "For testing purposes"
1825
}
1926
```
2027

21-
## Argument reference
28+
## Argument Reference
2229

2330
The following arguments are supported:
2431

25-
- `name` - (Required) Display name of the ingest budget. This must be unique across all of the ingest budgets
26-
- `field_value` - (Required) Custom field value that is used to assign Collectors to the ingest budget.
27-
- `capacity_bytes` - (Required) Capacity of the ingest budget, in bytes.
28-
- `description` - (Optional) The description of the collector.
29-
- `timezone` - (Optional) The time zone to use for this collector. The value follows the [tzdata][2] naming convention. Defaults to `Etc/UTC`
30-
- `reset_time` - (Optional) Reset time of the ingest budget in HH:MM format. Defaults to `00:00`
31-
- `reset_time` - (Optional) Reset time of the ingest budget in HH:MM format. Defaults to `00:00`
32-
- `description` - (Optional) Description of the ingest budget.
33-
- `action` - (Optional) Action to take when ingest budget's capacity is reached. All actions are audited. Supported values are `stopCollecting` and `keepCollecting`.
32+
* `name` - (Required) Display name of the ingest budget. This must be unique across all of the ingest budgets
33+
* `field_value` - (Required) Custom field value that is used to assign Collectors to the ingest budget.
34+
* `capacity_bytes` - (Required) Capacity of the ingest budget, in bytes.
35+
* `description` - (Optional) The description of the collector.
36+
* `timezone` - (Optional) The time zone to use for this collector. The value follows the [tzdata][2] naming convention. Defaults to `Etc/UTC`
37+
* `reset_time` - (Optional) Reset time of the ingest budget in HH:MM format. Defaults to `00:00`
38+
* `reset_time` - (Optional) Reset time of the ingest budget in HH:MM format. Defaults to `00:00`
39+
* `description` - (Optional) Description of the ingest budget.
40+
* `action` - (Optional) Action to take when ingest budget's capacity is reached. All actions are audited. Supported values are `stopCollecting` and `keepCollecting`.
3441

3542
The following attributes are exported:
3643

37-
- `id` - The internal ID of the ingest budget. This can be used to assign collectors to the ingest budget.
44+
* `id` - The internal ID of the ingest budget. This can be used to assign collectors to the ingest budget.
3845

3946
## Import
4047
Ingest budgets can be imported using the name, e.g.:
4148
```bash
42-
terraform import sumologic_collector.test test
49+
terraform import sumologic_collector.test budgetName
4350
```
4451

4552
[Back to Index][0]

0 commit comments

Comments
 (0)