package provider import ( "context" "errors" "fmt" "testing" elastic7 "github.com/olivere/elastic/v7" elastic6 "gopkg.in/olivere/elastic.v6" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) func TestAccOpensearchIngestPipeline(t *testing.T) { provider := Provider() diags := provider.Configure(context.Background(), &terraform.ResourceConfig{}) if diags.HasError() { t.Skipf("err: %#v", diags) } meta := provider.Meta() esClient, err := getClient(meta.(*ProviderConf)) if err != nil { t.Skipf("err: %s", err) } var config string switch esClient.(type) { case *elastic7.Client: config = testAccOpensearchIngestPipelineV7 case *elastic6.Client: config = testAccOpensearchIngestPipelineV6 default: config = testAccOpensearchIngestPipelineV5 } resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, CheckDestroy: testCheckOpensearchIngestPipelineDestroy, Steps: []resource.TestStep{ { Config: config, Check: resource.ComposeTestCheckFunc( testCheckOpensearchIngestPipelineExists("opensearch_ingest_pipeline.test"), ), }, }, }) } func TestAccOpensearchIngestPipeline_importBasic(t *testing.T) { provider := Provider() diags := provider.Configure(context.Background(), &terraform.ResourceConfig{}) if diags.HasError() { t.Skipf("err: %#v", diags) } meta := provider.Meta() esClient, err := getClient(meta.(*ProviderConf)) if err != nil { t.Skipf("err: %s", err) } var config string switch esClient.(type) { case *elastic7.Client: config = testAccOpensearchIngestPipelineV7 case *elastic6.Client: config = testAccOpensearchIngestPipelineV6 default: config = testAccOpensearchIngestPipelineV5 } resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, CheckDestroy: testCheckOpensearchIngestPipelineDestroy, Steps: []resource.TestStep{ { Config: config, }, { ResourceName: "opensearch_ingest_pipeline.test", ImportState: true, ImportStateVerify: true, }, }, }) } func testCheckOpensearchIngestPipelineExists(name string) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[name] if !ok { return fmt.Errorf("Not found: %s", name) } if rs.Primary.ID == "" { return fmt.Errorf("No index template ID is set") } meta := testAccProvider.Meta() var err error esClient, err := getClient(meta.(*ProviderConf)) if err != nil { return err } switch client := esClient.(type) { case *elastic7.Client: _, err = client.IngestGetPipeline(rs.Primary.ID).Do(context.TODO()) case *elastic6.Client: _, err = client.IngestGetPipeline(rs.Primary.ID).Do(context.TODO()) default: return errors.New("opensearch version not supported") } if err != nil { return err } return nil } } func testCheckOpensearchIngestPipelineDestroy(s *terraform.State) error { for _, rs := range s.RootModule().Resources { if rs.Type != "opensearch_ingest_pipeline" { continue } meta := testAccProvider.Meta() var err error esClient, err := getClient(meta.(*ProviderConf)) if err != nil { return err } switch client := esClient.(type) { case *elastic7.Client: _, err = client.IngestGetPipeline(rs.Primary.ID).Do(context.TODO()) case *elastic6.Client: _, err = client.IngestGetPipeline(rs.Primary.ID).Do(context.TODO()) default: return errors.New("opensearch version not supported") } if err != nil { return nil // should be not found error } return fmt.Errorf("Index template %q still exists", rs.Primary.ID) } return nil } var testAccOpensearchIngestPipelineV5 = ` resource "opensearch_ingest_pipeline" "test" { name = "terraform-test" body = <<EOF { "description" : "describe pipeline", "processors" : [ { "set" : { "field": "foo", "value": "bar" } } ] } EOF } ` var testAccOpensearchIngestPipelineV6 = ` resource "opensearch_ingest_pipeline" "test" { name = "terraform-test" body = <<EOF { "description" : "describe pipeline", "version": 123, "processors" : [ { "set" : { "field": "foo", "value": "bar" } } ] } EOF } ` var testAccOpensearchIngestPipelineV7 = ` resource "opensearch_ingest_pipeline" "test" { name = "terraform-test" body = <<EOF { "description" : "describe pipeline", "version": 123, "processors" : [ { "set" : { "field": "foo", "value": "bar" } } ] } EOF } `