如何在Terraform验收测试中给terraform import步骤传递变量值
解决方法
方法1:仅针对导入步骤生效(推荐)
如果你只需要步骤2执行导入操作时用到变量,不影响其他测试步骤,可以直接在对应TestStep结构体中添加Env字段配置环境变量,和你手动export变量的效果完全一致:
func TestAccExampleThing_basic(t *testing.T) { /* ... 可能存在的验收测试原有逻辑 ... */ resource.ParallelTest(t, resource.TestCase{ /* ... 原有TestCase配置项 ... */ Steps: []resource.TestStep{ /* ... 原有测试步骤 ... */ // 步骤2 { ResourceName: "example_thing.test", ImportState: true, ImportStateVerify: true, // 新增Env字段,仅当前步骤生效 Env: []string{ "TF_VAR_foo_id=abc123", // 可添加多个变量 // "TF_VAR_other_var=test_val", }, }, }, }) }
方法2:整个测试用例所有步骤生效
如果该变量需要在所有测试步骤(包括前面的apply、后续的其他校验步骤)都生效,可以把变量配置在顶层TestCase的Env字段中:
func TestAccExampleThing_basic(t *testing.T) { /* ... 可能存在的验收测试原有逻辑 ... */ resource.ParallelTest(t, resource.TestCase{ /* ... 原有TestCase配置项 ... */ // 新增Env字段,全测试用例生效 Env: []string{ "TF_VAR_foo_id=abc123", }, Steps: []resource.TestStep{ /* ... 原有测试步骤 ... */ // 步骤2 { ResourceName: "example_thing.test", ImportState: true, ImportStateVerify: true, }, }, }) }
注意事项
- 传递Terraform变量的环境变量必须严格加
TF_VAR_前缀,和手动执行时export的变量名规则完全一致 - 如果变量值是动态生成的(比如从前置测试步骤的资源输出中获取),直接用字符串拼接生成对应
键=值格式的字符串传入即可
内容的提问来源于stack exchange,提问作者Alex Kuzmin
相关产品推荐
相关产品推荐

