使用Terraform null_resource执行liquibase时无法打开lb.sql文件
解决"unable to open file 'lb.sql'"问题
以下是针对该错误的排查和解决步骤:
确认文件位置
你的local-exec指定了working_dir = path.module,意味着执行命令时的工作目录是当前Terraform模块的根目录(即当前.tf文件所在目录)。请确保lb.sql文件确实存在于这个目录下。如果文件在其他路径,需要在命令中使用相对该目录的路径或绝对路径,比如./scripts/lb.sql(若文件在子目录scripts中)。添加文件存在依赖
如果lb.sql是通过其他Terraform资源生成(比如local_file)或外部步骤生成的,必须在depends_on中添加对应的资源依赖,确保文件完全生成后再执行SQLcl命令。示例:depends_on = [ local_file.autonomous_database_wallet_file, local_file.lb_sql_file # 假设这是生成lb.sql的资源 ]检查文件权限
在OCI DevOps环境中,执行命令的运行用户可能没有lb.sql的读取权限。可以在命令中添加权限设置步骤:command = <<-EOT chmod +r lb.sql ./sqlcl/bin/sql -cloudconfig wallet.zip admin/${random_string.password.result}@sandboxProd_high @lb.sql EOT添加文件存在校验
可以在命令开头加入文件存在检查,提前定位问题:command = <<-EOT if [ ! -f "lb.sql" ]; then echo "ERROR: lb.sql not found in working directory: $(pwd)" exit 1 fi ./sqlcl/bin/sql -cloudconfig wallet.zip admin/${random_string.password.result}@sandboxProd_high @lb.sql EOTOCI DevOps流水线上下文检查
如果是在DevOps流水线中执行该Terraform脚本,需确保lb.sql被包含在流水线的构建工件中,或者在执行Terraform步骤前,通过流水线任务(如Shell脚本)将lb.sql下载/复制到Terraform模块目录下。
内容的提问来源于stack exchange,提问作者AvrahamTaga
相关产品推荐
相关产品推荐

