使用 kitchen-terraform 设置额外的上下文

Setting up extra context with kitchen-terraform

我正在尝试使用 kitchen-terraform 来验证我正在构建的 Terraform 模块。这个特定的模块是更大的基础设施中的一小部分。这取决于网络的某些部分是否可用,稍后将用于启动其他服务器等等。

我很好奇 kitchen-terraform 是否有办法在被测模块运行之前创建一些基础设施,并添加一些不属于模块本身的额外部分。

在这种特殊情况下,该模块正在创建一个新的 VPC,其中包含与现有 VPC、安全组和子网的一些对等连接。我想验证对等连接是否已正确建立,并启动一些 ec2 实例来验证网络状态。

有没有人有这样做的例子?

I'm curious if there's a way with kitchen-terraform to create some pieces of infrastructure before the module under test runs and to also add in some extra pieces that aren't part of the module proper.

你可以做到这一切。您的 .kitchen.yml 将指定要在此处执行的 terraform 代码所在的位置:

provisioner:
  name: terraform
  directory: path/to/terraform/code
  variable_files:
   - path/to/terraform/variables.tfvars

更重要的是,在构建您想要的所有基础结构(包括模块)的测试位置创建一个 main.tf。执行顺序将由资源本身的依赖关系控制。

假设您在与您的模块相同的 repo 中进行测试,也许可以这样安排:

├── .kitchen.yml
├── Gemfile
├── Gemfile.lock
├── README.md
├── terraform
│   ├── my_module
│       ├── main.tf
│       └── variables.tf
├── test
    ├── main.tf
    └── terraform.tfvars

实际的.kitchen.yml会包括这个:

provisioner:
  name: terraform
  directory: test
  variable_files:
   - test/variables.tfvars
  variables:
    access_key: <%= ENV['AWS_ACCESS_KEY_ID'] %>
    secret_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>

并且您的 test/main.tf 将实例化该模块以及任何其他被测代码。

provider "aws" {
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
  region = "${var.region}"
}

...

module "my_module" {
  name = "foo"
  source = "../terraform/my_module"
...
}

resource "aws_instance" "test_instance_1" {
...
}