You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform创建DigitalOcean Droplet后触发RKE模块运行报错咨询

报错根本原因

file() 是Terraform规划阶段(plan)就会执行的内置函数,仅支持读取随配置代码一起提前存在的静态文件,你用到的rkeip.txt是apply阶段才会由local_file资源动态生成的,规划阶段不存在。depends_on只能控制资源的执行顺序,无法修改file()函数的执行时机,因此加依赖也解决不了问题。


解决方案

完全不需要通过本地文件中转传参,直接用Terraform原生的模块输入变量传递Droplet IP即可,操作步骤如下:

1. 修改RKE模块配置(modules/rke/rke.tf)

  • 新增输入变量接收外部传递的Droplet IP
  • 删除无用的data "template_file" "rkeip"块,直接用变量给rke_cluster赋值

修改后的完整代码:

terraform {
  required_providers {
    rke = {
      source  = "rancher/rke"
      version = "1.2.4"
    }
  }
}

# 新增变量接收Droplet IP
variable "droplet_ip" {
  type        = string
  description = "DigitalOcean Droplet的公网IPv4地址"
}

provider "rke" {
  log_file = "rke_debug.log"
}

resource "rke_cluster" "test" {
   nodes {
     address = var.droplet_ip # 直接用变量值
     user    = "root"
     role    = ["controlplane", "etcd", "worker"]
     ssh_key = file("~/.ssh/id_rsa")
    }
}

2. 修改根目录Terraform配置

  • 删除无用的local_file "rkeip"资源
  • 调用RKE模块时传入Droplet的IP属性

修改后的模块调用代码:

# 省略其他原有配置(terraform块、provider、digitalocean_droplet等保持不变)

# 删掉原来的local_file "rkeip" 块,不需要了

module "RKE" {
    source = "./modules/rke/"
    # 传入Droplet的IP属性
    droplet_ip = digitalocean_droplet.terra.ipv4_address
}

修改完成后重新执行terraform plan即可正常通过,Terraform会自动识别资源依赖关系,先创建Droplet获取IP,再调用RKE模块创建集群。

内容的提问来源于stack exchange,提问作者outzhu-ac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:09:03