如何在验收测试中测试 terraform 导入?

Ale*_*min 1 go terraform

我发现这篇关于验收测试中的测试的文章tf import

func TestAccExampleThing_basic(t *testing.T) {
  /* ... potentially existing acceptance testing logic ... */

  resource.ParallelTest(t, resource.TestCase{
    /* ... existing TestCase functions ... */
    Steps: []resource.TestStep{
      /* ... existing TestStep ... */
      {
        ResourceName:      "example_thing.test",
        ImportState:       true,
        ImportStateVerify: true,
      },
    },
  })
}
Run Code Online (Sandbox Code Playgroud)

但这对我来说仍然很困惑。假设existing TestCase function将初始化一些小配置并运行,tf plan & tf apply以便 tf 状态文件不会为空,那么在步骤(测试用例)#2 期间到底会发生什么?我的想法是,如果我们尝试导入本地已经处于 tf 状态的资源(在第 1 步之后),应该会出现错误或其他问题,对吗?

或者更令人困惑的是,这个组合测试其中步骤 #2 和 #4 都是导入的terraform-provider-aws(据我所知,步骤 #3 更新了我们在步骤 #1 中创建的状态中的属性之一,但步骤到底是什么#2 和步骤#4 一样)?

小智 5

您的测试导入设置是正确的。使用ImportState和添加步骤ImportStateVerify就足够了。

测试导入是在terraform-provider-sdk testStepNewImportState 函数中实现的。怎么运行的:

  1. 上一步使用测试用例工作目录和状态应用 terraform 配置。
  2. 如果下一步设置ImportState为 true,则使用从测试用例状态ResourceName获取资源(或者使用或如果为此步骤设置了它们)。idImportStateIdFuncImportStateId
  3. 创建空工作目录,初始化新的空状态,并根据上一步中给定的资源名称和 ID 导入资源。不会有冲突,因为这是一个单独的空状态。
  4. 如果ImportStateVerify为 true,则比较上一步和导入步骤的资源状态,它们应该相同。
  5. 如果ImportStateCheck设置了函数,则使用此函数进行自定义状态验证。这可以在直接状态比较无效的情况下使用。
  6. 丢弃临时工作目录。