我正在为项目使用Terraform,我在package.json
中有两个任务要启动terraform plan
和terraform apply
。
"scripts": {
"tf:apply": "terraform apply",
"tf:plan": "terraform plan"
}
对于这两个命令,我需要先执行terraform get
。我希望他们两个只有一个pretask
。
我试图使用:
"scripts": {
"pretf:*": "terraform get",
"tf:apply": "terraform apply",
"tf:plan": "terraform plan"
}
但它没有用。
有没有办法通过NPM
或Yarn
实现这一目标?或者我是否被迫为这两项任务编写完全相同的预处理?
答案 0 :(得分:4)
您是否尝试使用节点直接管理它?
您可以将package.json中的事件直接绑定到节点脚本,在节点脚本中,您可以通过这种方式执行terraform命令和公共代码:
var exec = require('child_process').exec;
var cmd = 'terraform apply';
// common code
exec(cmd, function(error, stdout, stderr) {
// command output is in stdout
});
您也可以使用一个接受参数的单节点脚本来指定要执行的terraform任务,在脚本中定义公共代码,然后根据参数执行正确的命令:
"scripts": {
"tf:apply": "node myscript.js --param=apply",
"tf:plan": "node myscript.js --param=plan"
}
然后在节点内部,您可以通过以下方式访问您的参数:
console.log(process.argv.param);