Ich benutze Terraform für ein Projekt und ich habe zwei Aufgaben in meinem package.json
starten terraform plan
und terraform apply
.
"scripts": {
"tf:apply": "terraform apply",
"tf:plan": "terraform plan"
}
Für beide Befehle muss ich a ausführen terraform get
zuerst. Ich möchte nur einen haben pretask
Für beide.
Ich habe versucht zu verwenden:
"scripts": {
"pretf:*": "terraform get",
"tf:apply": "terraform apply",
"tf:plan": "terraform plan"
}
Aber es funktioniert nicht.
Gibt es einen Weg dies zu erreichen? NPM
oder Yarn
nur ? Oder bin ich gezwungen, für beide Aufgaben die exakt gleiche Vorbesprechung zu schreiben?
Ich gehe normalerweise so:
"scripts": {
"tf:get": "terraform get",
"tf:apply": "npm run tf:get && terraform apply",
"tf:plan": "npm run tf:get && terraform plan"
}
Dies ist eine weitere Option, die eine Art von Fälschungen vortäuscht "tf:*"
vorhaken. Nur für obskure kryptische npm
Ninjas und nicht empfohlen:
"scripts": {
"pretf": "terraform get",
"tf": "terraform",
"tf:apply": "npm run tf -- apply",
"tf:plan": "npm run tf -- plan"
}
(Verwenden Sie es mit npm run tf:plan
oder direkt mit irgendeinem Argument npm run tf -- whathever
)
Haben Sie versucht, es direkt mit Knoten zu verwalten?
Sie können die Ereignisse innerhalb Ihrer package.json direkt an Knotenskripte binden und innerhalb der Knotenskripte können Sie Ihre terraform-Befehle und Ihren gemeinsamen Code auf diese Weise ausführen:
var exec = require('child_process').exec;
var cmd = 'terraform apply';
// common code
exec(cmd, function(error, stdout, stderr) {
// command output is in stdout
});
Sie können auch ein einzelnes Knotenscript verwenden, das einen Parameter akzeptiert, um festzulegen, welche Terraform-Aufgabe ausgeführt werden soll, Ihren gemeinsamen Code im Skript definieren und dann den richtigen Befehl abhängig vom Parameter ausführen:
"scripts": {
"tf:apply": "node myscript.js --param=apply",
"tf:plan": "node myscript.js --param=plan"
}
Dann innerhalb des Knotens können Sie auf folgende Weise auf Ihren Parameter zugreifen:
console.log(process.argv.param);