我尝试使用kitchen-terraform来验证我正在构建的terraform模块。这个特定的模块在较大的基础设施中是一小部分。这取决于可用网络的某些部分,然后将用于启动其他服务器等等。
我很好奇是否有一种使用厨房台面的方法在测试模块运行之前创建一些基础设施,并添加一些不属于模块的额外部分适当的。
在这种特殊情况下,模块正在创建一个新的VPC,其中包含与现有VPC,安全组和子网的一些对等连接。我想验证对等连接是否已正确建立,以及启动一些ec2实例以验证网络状态。
有没有人有这样做的例子?
答案 0 :(得分:4)
我很好奇是否有办法用厨房台面创造一些 在被测模块运行之前的基础设施 添加一些不属于模块的额外部分。
你可以做到这一切。您的.kitchen.yml
将指定在此处执行的terraform代码的位置:
provisioner:
name: terraform
directory: path/to/terraform/code
variable_files:
- path/to/terraform/variables.tfvars
更重要的是,在测试位置创建一个main.tf
,构建所需的所有基础架构,包括模块。执行顺序将由资源本身的依赖性控制。
假设您正在使用与模块相同的仓库进行测试,可以安排以下内容:
├── .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" {
...
}