在测试厨房中加载模块时出错

Error while loading modules in test-kitchen

我是测试厨房的新手,我正在尝试使用我之前使用 terraform 创建的现有 vpc 模块。我在加载模块以测试厨房时遇到问题。

我的文件夹结构看起来像

tf_aws_cluster
├── .kitchen.yml
├── Gemfile
├── Gemfile.lock
├── README.md
│  ├── modules
|    |── vpc
│       ├── main.tf
│       └── variables.tf
├── main.tf
|── variables.tf

~/tf_aws_cluster/.kitchen.yml 文件

---
driver:
  name: terraform

provisioner:
  name: terraform
  directory: ~/tf_aws_cluster/modules/vpc
  variable_files:
    - variables.tf

我的 ~/tf_aws_cluster/main.tf 文件看起来像

module "vpc" {
  source         = "../modules/vpc"
  env            = "prod"
  aws_account_id = "************"
}

当我尝试 运行

bundle exec kitchen verify

我在加载模块时遇到错误。

-----> Creating <default-ubuntu>...
       Copying configuration from "/home/ubuntu/tf_aws_cluster"...
       Upgrading modules...
       Error downloading modules: Error loading modules: module vpc: failed to get download URL for "../module/vpc": 200 OK resp:<!DOCTYPE html>

我应该为模块提供什么值?

我已经尝试为源参数提供完整路径 ~/tf_aws_cluster/main.tf

source         = "~/tf_aws_cluster/modules/vpc/"

这给了我一个错误

Error downloading modules: Error loading modules: module vpc: invalid source string: ~/tf_aws_cluster/modules/vpc/

目录应该是 directory 属性中的相对路径。像这样:

directory: modules/vpc

同样在新发布的 kitchen-terraform v3.0.0 中你应该使用 root_module_directory 而不是 directory


关于相关主题,我建议您阅读 getting started 指南以帮助理解如何进行测试装置,因为我认为您正试图通过 main.tfmodules directory.

我会这样组织代码:

tf_aws_cluster
├── .kitchen.yml
├── Gemfile
├── Gemfile.lock
├── README.md
│  ├── test
|    |── fixtures
|       |── my_module
│          ├── main.tf
│          └── variables.tf
├── main.tf
|── variables.tf

.kitchen.yml

---
driver:
  name: terraform
  directory: test/fixtures/my_module
  variable_files:
    - variables.tf

provisioner:
  name: terraform

根main.tf:

# this should have your actual Terraform code
resource ... {
  ...
}

测试夹具main.tf (test/fixtures/my_module/main.tf)

# this should have a module reference to your root's main.tf such as:
module "vpc" {
  source         = "source = "../../.."
  env            = "prod"
  aws_account_id = "************"
}