Terraform中Rundeck Job如何用Option块获取输入并在Command块中使用?
解决Terraform配置Rundeck Job时调用Option输入的报错问题
问题背景
我是Terraform和Rundeck的新手,尝试用Option块捕获用户输入并在Command块中调用,但执行terraform plan时持续报错。
我的配置代码:
resource "rundeck_job" "my_first_rundeck" { name = var.job_name project_name = var.project_name description = var.job_description schedule = var.job_schedule # 提供昵称下拉选择列表 option { name = var.nickname label = var.nickname required = true value_choices = var.nickname_choices } # 提供脚本下拉选择列表,减少用户输入错误 option { name = var.scripts label = var.scripts required = true value_choices_url = "" } command { description = "Testing for ${option.scripts}" } }
报错信息:
╷ │ Error: Reference to undeclared resource │ │ on main.tf line 38, in resource "rundeck_job" "my_first_rundeck": │ 38: description = "Testing for ${option.scripts}" │ │ A managed resource "option" "scripts" has not been declared in the root module.
variables.tf中已定义相关变量,请问如何实现需求?
问题原因
Terraform将${option.scripts}识别为自身的资源引用,但option是rundeck_job内部的嵌套块,并非Terraform的独立资源类型,因此报错找不到该资源。实际上${option.scripts}是Rundeck运行时的变量语法,需要让Terraform将其原封不动传递给Rundeck,而不是在部署阶段解析。
修正方法
通过转义$符号,或者使用Terraform的原始字符串语法,避免Terraform解析该插值表达式:
修正后的配置代码
resource "rundeck_job" "my_first_rundeck" { name = var.job_name project_name = var.project_name description = var.job_description schedule = var.job_schedule # 昵称下拉选项 option { name = var.nickname label = var.nickname required = true value_choices = var.nickname_choices } # 脚本下拉选项 option { name = var.scripts label = var.scripts required = true value_choices_url = "" } command { # 方法1:转义$符号,让Terraform直接传递表达式给Rundeck description = "Testing for \${option.scripts}" # 方法2:使用Terraform原始字符串(0.12及以上版本支持) # description = """Testing for ${option.scripts}""" } }
扩展:在执行命令中引用选项
如果需要在Command的执行命令中引用选项值,同样遵循Rundeck的语法,转义后传递:
command { description = "执行选中的脚本:\${option.scripts}" command = "/usr/local/scripts/\${option.scripts}.sh" }
这样配置后,Terraform部署时不会解析${option.scripts},而是将其作为Rundeck Job的一部分保存,当Rundeck执行该Job时,会自动替换为用户选择的选项值。
内容的提问来源于stack exchange,提问作者xerac
相关产品推荐
相关产品推荐

