Die Verwendung des terraform-Moduls wird bevorzugt, aber wenn Sie terraform apply wirklich für eine einzelne Datei ausführen müssen, habe ich dieses Bash-Skript erstellt, um den terraform apply-Befehl für alle Ziele und Module in einer Datei zu generieren:
#!/usr/bin/env bash
if [[ -z "$@" ]]; then
echo "Missing file input arguments"
exit 1
fi
echo "terraform apply \\"
for FILE in "$@"
do
RESOURCE=$(sed -n 's/resource "\([^"]*\)" "\([^"]*\)".*/-target=\1.\2 \\/gp' $FILE)
MODULE=$(sed -n 's/module "\([^"]*\)".*/-target=module.\1 \\/gp' $FILE)
if [[ -z "$RESOURCE" ]] && [[ -z "$MODULE" ]]; then
echo "Cannot detect terraform resource and module in $FILE"
exit 1
fi
if [[ ! -z "$RESOURCE" ]]; then
echo -e $"$RESOURCE"
fi
if [[ ! -z "$MODULE" ]]; then
echo -e $"$MODULE"
fi
done
echo "-refresh=true"
Ich bin kein wirklicher Bash-Experte, aber es wurde getestet, um auf einem Mac zu funktionieren.
BEARBEITEN: Der sed-Befehl setzt voraus, dass die Ressourcen und Module folgendermaßen formatiert sind terraform fmt
:
resource "aws_eip" "my_public_ip" {
}
resource "aws_instance" "my_server" {
}
module "my_module" {
}