terraform/builtin/providers/logentries/resource_logentries_logset.go

93 lines
2.0 KiB
Go
Raw Normal View History

package logentries
import (
provider/logentries: Refresh from state when resources not found (#13810) Fixes: #13805 Before the fix: ``` Error refreshing state: 1 error(s) occurred: * logentries_logset.logset: logentries_logset.logset: No such log set with key 278e7344-1201-43ba-9804-77b9a72fe7d6 ``` After the fix: ``` % terraform plan ✚ ✭ [WARN] /Users/stacko/Code/go/bin/terraform-provider-logentries overrides an internal plugin for logentries-provider. If you did not expect to see this message you will need to remove the old plugin. See https://www.terraform.io/docs/internals/internal-plugins.html Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. logentries_logset.logset: Refreshing state... (ID: 278e7344-...a72fe7d6) logentries_log.log: Refreshing state... (ID: 2ae1e8ae-...e932d25c) The Terraform execution plan has been generated and is shown below. Resources are shown in alphabetical order for quick scanning. Green resources will be created (or destroyed and then created if an existing resource exists), yellow resources are being changed in-place, and red resources will be destroyed. Cyan entries are data sources to be read. Note: You didn't specify an "-out" parameter to save this plan, so when "apply" is called, Terraform can't guarantee this is what will execute. + logentries_log.log logset_id: "${logentries_logset.logset.id}" name: "test-log" retention_period: "ACCOUNT_DEFAULT" source: "token" token: "<computed>" + logentries_logset.logset location: "nonlocation" name: "testing-terraform-destroy" Plan: 2 to add, 0 to change, 0 to destroy. ``` Test Run: ``` % make testacc TEST=./builtin/providers/logentries ✚ ✭ ==> Checking that code complies with gofmt requirements... go generate $(go list ./... | grep -v /terraform/vendor/) 2017/04/20 20:36:20 Generated command/internal_plugin_list.go TF_ACC=1 go test ./builtin/providers/logentries -v -timeout 120m === RUN TestProvider --- PASS: TestProvider (0.00s) === RUN TestProvider_impl --- PASS: TestProvider_impl (0.00s) === RUN TestAccLogentriesLog_Token --- PASS: TestAccLogentriesLog_Token (39.03s) === RUN TestAccLogentriesLog_SourceApi --- PASS: TestAccLogentriesLog_SourceApi (28.46s) === RUN TestAccLogentriesLog_SourceAgent --- PASS: TestAccLogentriesLog_SourceAgent (6.19s) === RUN TestAccLogentriesLog_RetentionPeriod1M --- PASS: TestAccLogentriesLog_RetentionPeriod1M (3.04s) === RUN TestAccLogentriesLog_RetentionPeriodAccountDefault --- PASS: TestAccLogentriesLog_RetentionPeriodAccountDefault (2.71s) === RUN TestAccLogentriesLog_RetentionPeriodAccountUnlimited --- PASS: TestAccLogentriesLog_RetentionPeriodAccountUnlimited (2.65s) === RUN TestAccLogentriesLogSet_Basic --- PASS: TestAccLogentriesLogSet_Basic (1.54s) === RUN TestAccLogentriesLogSet_NoLocation --- PASS: TestAccLogentriesLogSet_NoLocation (1.54s) PASS ok github.com/hashicorp/terraform/builtin/providers/logentries 85.177s ```
2017-04-20 20:38:37 +02:00
"log"
"strings"
"github.com/hashicorp/terraform/helper/schema"
provider/logentries: Refresh from state when resources not found (#13810) Fixes: #13805 Before the fix: ``` Error refreshing state: 1 error(s) occurred: * logentries_logset.logset: logentries_logset.logset: No such log set with key 278e7344-1201-43ba-9804-77b9a72fe7d6 ``` After the fix: ``` % terraform plan ✚ ✭ [WARN] /Users/stacko/Code/go/bin/terraform-provider-logentries overrides an internal plugin for logentries-provider. If you did not expect to see this message you will need to remove the old plugin. See https://www.terraform.io/docs/internals/internal-plugins.html Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. logentries_logset.logset: Refreshing state... (ID: 278e7344-...a72fe7d6) logentries_log.log: Refreshing state... (ID: 2ae1e8ae-...e932d25c) The Terraform execution plan has been generated and is shown below. Resources are shown in alphabetical order for quick scanning. Green resources will be created (or destroyed and then created if an existing resource exists), yellow resources are being changed in-place, and red resources will be destroyed. Cyan entries are data sources to be read. Note: You didn't specify an "-out" parameter to save this plan, so when "apply" is called, Terraform can't guarantee this is what will execute. + logentries_log.log logset_id: "${logentries_logset.logset.id}" name: "test-log" retention_period: "ACCOUNT_DEFAULT" source: "token" token: "<computed>" + logentries_logset.logset location: "nonlocation" name: "testing-terraform-destroy" Plan: 2 to add, 0 to change, 0 to destroy. ``` Test Run: ``` % make testacc TEST=./builtin/providers/logentries ✚ ✭ ==> Checking that code complies with gofmt requirements... go generate $(go list ./... | grep -v /terraform/vendor/) 2017/04/20 20:36:20 Generated command/internal_plugin_list.go TF_ACC=1 go test ./builtin/providers/logentries -v -timeout 120m === RUN TestProvider --- PASS: TestProvider (0.00s) === RUN TestProvider_impl --- PASS: TestProvider_impl (0.00s) === RUN TestAccLogentriesLog_Token --- PASS: TestAccLogentriesLog_Token (39.03s) === RUN TestAccLogentriesLog_SourceApi --- PASS: TestAccLogentriesLog_SourceApi (28.46s) === RUN TestAccLogentriesLog_SourceAgent --- PASS: TestAccLogentriesLog_SourceAgent (6.19s) === RUN TestAccLogentriesLog_RetentionPeriod1M --- PASS: TestAccLogentriesLog_RetentionPeriod1M (3.04s) === RUN TestAccLogentriesLog_RetentionPeriodAccountDefault --- PASS: TestAccLogentriesLog_RetentionPeriodAccountDefault (2.71s) === RUN TestAccLogentriesLog_RetentionPeriodAccountUnlimited --- PASS: TestAccLogentriesLog_RetentionPeriodAccountUnlimited (2.65s) === RUN TestAccLogentriesLogSet_Basic --- PASS: TestAccLogentriesLogSet_Basic (1.54s) === RUN TestAccLogentriesLogSet_NoLocation --- PASS: TestAccLogentriesLogSet_NoLocation (1.54s) PASS ok github.com/hashicorp/terraform/builtin/providers/logentries 85.177s ```
2017-04-20 20:38:37 +02:00
logentries "github.com/logentries/le_goclient"
)
func resourceLogentriesLogSet() *schema.Resource {
return &schema.Resource{
Create: resourceLogentriesLogSetCreate,
Read: resourceLogentriesLogSetRead,
Update: resourceLogentriesLogSetUpdate,
Delete: resourceLogentriesLogSetDelete,
Schema: map[string]*schema.Schema{
"name": &schema.Schema{
Type: schema.TypeString,
Required: true,
},
"location": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Default: "nonlocation",
},
},
}
}
func resourceLogentriesLogSetCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*logentries.Client)
res, err := client.LogSet.Create(logentries.LogSetCreateRequest{
Name: d.Get("name").(string),
Location: d.Get("location").(string),
})
if err != nil {
return err
}
d.SetId(res.Key)
return resourceLogentriesLogSetRead(d, meta)
}
func resourceLogentriesLogSetRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*logentries.Client)
res, err := client.LogSet.Read(logentries.LogSetReadRequest{
Key: d.Id(),
})
if err != nil {
provider/logentries: Refresh from state when resources not found (#13810) Fixes: #13805 Before the fix: ``` Error refreshing state: 1 error(s) occurred: * logentries_logset.logset: logentries_logset.logset: No such log set with key 278e7344-1201-43ba-9804-77b9a72fe7d6 ``` After the fix: ``` % terraform plan ✚ ✭ [WARN] /Users/stacko/Code/go/bin/terraform-provider-logentries overrides an internal plugin for logentries-provider. If you did not expect to see this message you will need to remove the old plugin. See https://www.terraform.io/docs/internals/internal-plugins.html Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. logentries_logset.logset: Refreshing state... (ID: 278e7344-...a72fe7d6) logentries_log.log: Refreshing state... (ID: 2ae1e8ae-...e932d25c) The Terraform execution plan has been generated and is shown below. Resources are shown in alphabetical order for quick scanning. Green resources will be created (or destroyed and then created if an existing resource exists), yellow resources are being changed in-place, and red resources will be destroyed. Cyan entries are data sources to be read. Note: You didn't specify an "-out" parameter to save this plan, so when "apply" is called, Terraform can't guarantee this is what will execute. + logentries_log.log logset_id: "${logentries_logset.logset.id}" name: "test-log" retention_period: "ACCOUNT_DEFAULT" source: "token" token: "<computed>" + logentries_logset.logset location: "nonlocation" name: "testing-terraform-destroy" Plan: 2 to add, 0 to change, 0 to destroy. ``` Test Run: ``` % make testacc TEST=./builtin/providers/logentries ✚ ✭ ==> Checking that code complies with gofmt requirements... go generate $(go list ./... | grep -v /terraform/vendor/) 2017/04/20 20:36:20 Generated command/internal_plugin_list.go TF_ACC=1 go test ./builtin/providers/logentries -v -timeout 120m === RUN TestProvider --- PASS: TestProvider (0.00s) === RUN TestProvider_impl --- PASS: TestProvider_impl (0.00s) === RUN TestAccLogentriesLog_Token --- PASS: TestAccLogentriesLog_Token (39.03s) === RUN TestAccLogentriesLog_SourceApi --- PASS: TestAccLogentriesLog_SourceApi (28.46s) === RUN TestAccLogentriesLog_SourceAgent --- PASS: TestAccLogentriesLog_SourceAgent (6.19s) === RUN TestAccLogentriesLog_RetentionPeriod1M --- PASS: TestAccLogentriesLog_RetentionPeriod1M (3.04s) === RUN TestAccLogentriesLog_RetentionPeriodAccountDefault --- PASS: TestAccLogentriesLog_RetentionPeriodAccountDefault (2.71s) === RUN TestAccLogentriesLog_RetentionPeriodAccountUnlimited --- PASS: TestAccLogentriesLog_RetentionPeriodAccountUnlimited (2.65s) === RUN TestAccLogentriesLogSet_Basic --- PASS: TestAccLogentriesLogSet_Basic (1.54s) === RUN TestAccLogentriesLogSet_NoLocation --- PASS: TestAccLogentriesLogSet_NoLocation (1.54s) PASS ok github.com/hashicorp/terraform/builtin/providers/logentries 85.177s ```
2017-04-20 20:38:37 +02:00
if strings.Contains(err.Error(), "No such log set") {
log.Printf("Logentries LogSet Not Found - Refreshing from State")
d.SetId("")
return nil
}
return err
}
if res == nil {
d.SetId("")
return nil
}
d.Set("location", res.Location)
return nil
}
func resourceLogentriesLogSetUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*logentries.Client)
_, err := client.LogSet.Update(logentries.LogSetUpdateRequest{
Key: d.Id(),
Name: d.Get("name").(string),
Location: d.Get("location").(string),
})
if err != nil {
return err
}
return resourceLogentriesLogRead(d, meta)
}
func resourceLogentriesLogSetDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*logentries.Client)
err := client.LogSet.Delete(logentries.LogSetDeleteRequest{
Key: d.Id(),
})
return err
}