我正在为一个项目使用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
only来实现这一点吗?或者我被迫为这两个任务编写完全相同的前置任务?
发布于 2017-05-06 20:26:40
我通常是这样的:
"scripts": {
"tf:get": "terraform get",
"tf:apply": "npm run tf:get && terraform apply",
"tf:plan": "npm run tf:get && terraform plan"
}
这是另一种选择,它伪装成一种"tf:*"
预钩。仅适用于晦涩神秘的npm
忍者,不推荐使用:
"scripts": {
"pretf": "terraform get",
"tf": "terraform",
"tf:apply": "npm run tf -- apply",
"tf:plan": "npm run tf -- plan"
}
(与npm run tf:plan
一起使用或直接与任何参数npm run tf -- whathever
一起使用)
发布于 2017-05-05 06:30:55
您是否尝试过使用node直接管理它?
您可以将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"
}
然后在node内部,你可以这样访问你的参数:
console.log(process.argv.param);
https://stackoverflow.com/questions/43679545
复制相似问题