问题标签 [terratest]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
855 浏览

go - Terratest 多个目标

我正在使用 terrates 来测试我的 terraform 代码。我的代码有 2 个模块,所以我设法配置 terratest 以在配置 terraformOptions 时使用目标选项,它创建了两个模块。

但是,在清理所有内容时,它只清理使用 Defer 的最后一个模块。这是我的代码。

有什么方法可以像我申请时那样定位吗?

谢谢;

0 投票
1 回答
317 浏览

terraform - Terratest:更改 InitAndApply 中传递变量的顺序

问题:https ://github.com/gruntwork-io/terratest

这个电话:terraform.InitAndApply(t, terraformOptions)

解析vars并且var-file确实适用,我想看看是否有办法更改顺序,我想-var-file先走,然后-var再走,据我所知,最后一个会覆盖以前的值。

原因:文件中可能有公共变量,用户希望在测试中根据需要覆盖它们。

当前订单:

预期顺序:

我在 terratest GitHub 上问过这个问题,想看看有没有人遇到过这个问题。

0 投票
1 回答
296 浏览

go - 将 go 命令作为 gradle 任务运行

我正在使用 gradle 作为 terraform 项目的构建工具。我确实在 ..test/... 文件夹下为项目编写了单元测试。我在本地运行测试的方式只是在命令行上go test ..test/..,它将tests在 test 文件夹下运行。我想把这个集成到构建中,这样每次构建都会运行这个命令'go test ..test/..',我如何在 gradle 中实现这个。可以使用自定义任务来运行go命令吗?

我正在尝试执行以下操作

但我得到了错误

对于它的价值,我尝试了其他命令并为 ex 得到相同的错误

给出类似的错误

0 投票
0 回答
817 浏览

go - Go get all dependencies 返回 Terratest 无法识别的导入路径

配置

  • go1.15.2 达尔文/amd64
  • macOS Catalina v10.15.7

.zshrc文件

我正在尝试做的事情

我是 Go 新手,正在尝试使用 Terratest 为 Packer 构建编写测试。

尝试运行时,go test my_test.go我不断收到错误消息,提示我需要安装丢失的软件包。

../../../../../go/src/github.com/gruntwork-io/terratest/modules/aws/sqs.go:10:2:找不到包“github.com/google /uuid”在以下任何一个中:
/usr/local/opt/go/libexec/src/github.com/google/uuid(来自 $GOROOT)/Users/username/go/src/github.com/google/uuid(来自$GOPATH)。
FAIL 命令行参数 [设置失败]
FAIL

谷歌搜索我发现go get -u ./...从我的测试文件所在的目录运行应该安装这些包

问题

当我运行时,go get -u ./...我收到以下错误:

包_/Users/username/github.com/my-org/my-repo/packer/tests:无法识别的导入路径“_/Users/username/github.com/my-org/my-repo/packer/tests”:导入路径不以主机名开头

对于其他上下文,这是我正在使用的目录结构:

这是我使用这个 terratest 示例作为参考创建的测试文件:

0 投票
0 回答
434 浏览

terraform - terratest assert.Equal 不匹配,你能让它们匹配吗?

我是编写 terratest go 测试的新手。我有一个简单的测试,我想检查 VMSize,以确保它具有正确的大小。

函数 azure.GetSizeOfVirtualMachine() 获取值并将其存储在变量“testVMSize”中,然后我设置了另一个变量 expectedVMSize :=“Standard_B2ms”来比较它。

最后,我使用 testify/assert 来比较这两个值,如果我将它们打印到屏幕上,它们会显示为相同的“Standard_B2ms”,但是当我运行 assert.Equal 时,它会说它们不同。输出如下。

我可以看到类型不同,我认为这就是它们失败的原因。我希望有人能告诉我如何更改 testVMSize 使其与预期的 VMSize 匹配相同的类型,或者告诉我如何从 testVMSize 中获取值以便我可以将其存储为字符串类型。

谢谢R

这是错误消息

0 投票
1 回答
615 浏览

terraform - 如何从 Terratest Go 脚本调用 Terragrunt HCL 文件?

我有一个 terragrunt 脚本,它在运行 terragrunt apply-all 命令行后运行良好,但同样的事情我无法执行/调用表单 Go 脚本。使用TgApplyAll函数

下面是我的 Go 脚本 工作 terragrunt 脚本保存在 D:\vertica-terragrunt-US-286094-Modules\with-infra 位置,并且可以使用手动terragrunt apply-all命令正常工作,但是从 Go 脚本我收到错误

在此处输入图像描述

得到如下错误

''' github.com/gruntwork-io/terratest/modules/terraform.TgInvalidBinary.Error(...) c:/go/pkg/mod/github.com/gruntwork-io/terratest@v0.30.15/modules/ terraform/errors.go:12

详细错误 func (err TgInvalidBinary) Error() string { return fmt.Sprintf("terragrunt 必须设置为 TerraformBinary 才能使用此函数。[ TerraformBinary : %s ]", err) } '''

我使用了与从 terratest Go 脚本调用 terraform 代码相同的代码来调用 terragrunt 代码,但它不起作用

任何人都可以帮助我/指导我到某个位置,例如如何从 terratest Go 脚本调用工作 terragrunt 代码?

0 投票
1 回答
170 浏览

go - 如何将我的 AWS EC2 密钥对 PEM 文件加载到我的 terratest 脚本以执行 AWS EC2 SSH 连接验证

我正在编写 Go terratest 脚本来验证 AWS EC2 实例的 SSH 连接

我的本地已经有 AWS EC2 密钥对 PEM 文件

我能够使用 terraform.TgApplyAll() 和 terraform.TgDestroyAll() 方法启动和销毁 EC2 实例,并使用 terraform.Output() 方法获取输出变量

我的本地 AWS EC2 密钥对 PEM 文件用于在 AWS 中创建 EC2 实例

现在我正在尝试从 terratest Go 脚本以编程方式验证 SSH 连接。

无法将本地 AWS EC2 密钥对加载 到 Go terratest 脚本中的sshKeyPair变量

我使用了下面的代码片段但没有用

https://github.com/gruntwork-io/module-asg/blob/067647b3aaeb24151badbc5a2d9a6b5381dd2041/test/server_group_test.go#L78

我还尝试了 https://github.com/gruntwork-io/terratest/blob/907c09f0696083a5ada580debb66bb5c00c19c32/modules/test-structure/save_test_data.go#L66中的脚本 来使用 LoadEc2KeyPair 加载我的本地 EC2 密钥对并使用测试 EC2 SSH fmt.Sprintf("SSH to public host %s", publicIP)但是在json.Unmarshal(bytes, value)的LoadTestData(t testing.TestingT, path string, value interface{})方法中 从本地读取 EC2 密钥对时出错内置调用

错误消息:无法为值 D:\AWS\KeyPair\pandukeypair.pem 解析 JSON:数字文字中的无效字符 '-' 当我尝试读取 .pem 文件并且代码尝试执行 json 时,我收到此错误。 .pem 文件上的元帅

github/terratest 模块中可用的所有代码片段都讨论了创建新的密钥对和加载 AWS EC2 JSON密钥对,但我没有得到任何方法/逻辑,因为我的场景已经存在现有的密钥对 JSON,我只想加载和使用它。

完整代码在下面的链接中

https://www.dropbox.com/sh/dl2mpesidsxitdu/AAAOi4Nmp41CHMSPcyU7a2qva?dl=0

0 投票
1 回答
264 浏览

go - Terratest 断言字符串因 GitHub 操作而失败

版本

  • Terraform v0.13.5
  • 转到 v1.15.2
  • Terratest v0.30.23

问题

我根据Terratest Docs创建了一个测试。测试代码可以在下面的标题下找到:iam_role_standard_test.go

当我在本地运行测试时,一切都按预期工作。

但是,我使用 GitHub Actions 作为我的 CI/CD 工具。当工作流作业执行时,它会失败并出现以下错误(工作流文件位于以下标题workflow.yaml下):

错误跟踪:iam_role_standard_test.go:63
错误:不等于:
预期:“TestIamRole_dRGsKn”
实际:“[command]/home/runner/work/_temp/e5c5b8d2-62c5-4e73-b99f-d2e79eaa9765/terraform-b​​in 输出 -no-颜色名称\nTestIamRole_dRGsKn\n::debug::Terraform 以代码 0 退出。\n::debug::stdout: TestIamRole_dRGsKn%0A\n::debug::stderr: \n::debug::exitcode: 0\n ::set-output name=stdout::TestIamRole_dRGsKn%0A\n::set-output name=stderr::\n::set-output name=exitcode::0"
Diff:
--- 预期
+++ 实际
@ @ -1 +1,9 @@
+[command]/home/runner/work/_temp/e5c5b8d2-62c5-4e73-b99f-d2e79eaa9765/terraform-b​​in output -no-color name
TestIamRole_dRGsKn
+::debug::Terraform exited代码为 0。
+::debug::stdout: TestIamRole_dRGsKn%0A
+::debug::stderr:
+::debug::exitcode: 0
+::set-output name=stdout::TestIamRole_dRGsKn%0A
+::set-output name= stderr::
+::set-output name=exitcode::0
测试:TestIamRole

据我所知,哪个是失败的,因为与之"TestIamRole_dRGsKn"相比TestIamRole_dRGsKn是不一样的。

问题

如何格式化 terraform 的输出,以便将字符串断言为相等?

iam_role_standard_test.go

工作流.yaml

0 投票
1 回答
46 浏览

terratest - 跳过 InitAndApply 和销毁

有没有办法跳过测试的InitAndApplyDestroy阶段?

我想terraform output建立我的测试断言testify/assert

0 投票
2 回答
83 浏览

arrays - 将字符串转换为数组

我正在使用 Go 编写 terratest 并且我有 string "[[IFN_EYE_HUBW_DEV_AUTO_01] [IFN_EW_HUBW_DEV_AUTO_02]]"。如何将其拆分为数组以获取"IFN_EYE_HUBW_DEV_AUTO_01""IFN_EW_HUBW_DEV_AUTO_02"作为数组的第一个和第二个元素?