【发布时间】:2020-10-22 10:25:36
【问题描述】:
我无法让 terraform 中的模块之间的依赖关系正常工作。问题似乎是由于没有正确评估提供者的依赖关系。
我有:
- 在 docker 中设置 rabbitmq 的 docker 容器资源
- 一个依赖于rabbitmq容器的定时器资源,以确保它启动
- 一些用于设置交换、队列、用户等的 rabbitmq 资源。
当一切都在同一个模块中时,这一切都很好。我只需将计时器作为依赖项添加到将配置 rabbitmq 的 everything。
我现在想将 docker 容器的配置和rabbitmq 配置到不同的模块中,以便配置块可以在其他地方重用。我似乎无法让一个模块等待另一个模块。刷新时似乎总是失败。
我已尝试根据睡眠计时器生成(部署容器的模块的)输出:
output "remote_host" {
value = "localhost"
depends_on = [time_sleep.rabbitmq_ready]
}
然后我将该输出用作模块的参数:
module "rabbitmq" {
source = "./modules/rabbitmq"
api_url = "http://${module.container.remote_host}:15672"
username = "admin"
password = module.container.admin_password
}
理论上这应该意味着rabbitmq提供者在容器完全启动并运行之前不知道如何连接(直到睡眠完成)。
但我明白了,容器根本没有启动:
module.rabbitmq.rabbitmq_queue.data_export: Refreshing state... [id=sites.data_export@/]
Error: Get "http://127.0.0.1:15672/api/queues/%2F/sites.data_export": dial tcp 127.0.0.1:15672: connect: connection refused
这表明depends_on = [time_sleep.rabbitmq_ready] 在刷新步骤期间已被忽略,并且值 (localhost) 正在返回而无需等待依赖项。
有什么想法吗?
【问题讨论】:
标签: terraform