2016-10-10 53 views
1

我试图使用kitchen-terraform来验证我正在构建的terraform模块。这个特定的模块是大型基础设施中的一小部分。这取决于一些可用的网络部分,稍后将用于启动额外的服务器和其他服务器。设置与厨房 - terraform的额外上下文

我很好奇,如果有一种方式与厨房 - terraform创建一些基础设施之前被测试的模块运行,并且还添加一些额外的部分不是模块本身的一部分。

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

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

回答

3

我很好奇,如果有一个与厨房terraform的方式下运行测试模块之前创造一些 件的基础设施,也 添加一些额外的作品不属于模块特有的一部分。

你可以做所有这些。你.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" { 
... 
}