Skip to content
Snippets Groups Projects
Commit ce122cbd authored by nimrod's avatar nimrod
Browse files

Terraform stuff.

- Remove the tf wrapper, use the version from PyPI.
- Move all of the Terraform stuff to ~/.bashrc.d/ .
- Use OpenTofu instead of Terraform with tf.
- Refresh the outputs after an apply.
parent 8d7c8a0c
No related branches found
No related tags found
No related merge requests found
......@@ -82,7 +82,6 @@ export PS1='\u@\h:\w\$ '
export PYTHONSTARTUP=~/.config/pythonrc.py
export PYTHON_GITLAB_CFG=~/.config/python-gitlab.cfg
export REDISCLI_HISTFILE="$HOME/Documents/.rediscli_history"
export TF_DEBUG=1
export VAGRANT_DEFAULT_PROVIDER="virtualbox"
alias 0-day-cleanup='ssh kodi.shore.co.il "sudo -u debian-transmission find /srv/library/Comics -name *.part -path *0-Day\ Week\ of* -delete"'
......@@ -177,10 +176,6 @@ alias screenshot-cleanup='find "$HOME/Pictures" -name "Screenshot from *.png" -d
alias smtp-server='python3 -m smtpd -ndc DebuggingServer'
alias sudo="sudo "
alias sudome="sudome "
alias tfa='tf apply tfplan'
alias tfaa='tf apply -auto-approve'
alias tfp='tf init -backend=false && tf plan -out tfplan'
alias tfvf='tf init -backend=false && tf validate && tf fmt -diff'
alias todo="vim \$HOME/Documents/TODO.yml"
# shellcheck disable=SC2142
alias tolower='awk "{print tolower(\$0)}"'
......
# shellcheck shell=bash
# vim: ft=sh
export TF_CLI=tofu
export TF_DEBUG=1
alias tfa='tf apply tfplan && tf -auto-approve -refresh-only'
alias tfaa='tf apply -auto-approve'
alias tfp='tf init -backend=false && tf plan -out tfplan'
alias tfvf='tf init -backend=false && tf validate && tf fmt -diff'
#!/usr/bin/env python3
"""Terraform wrapper to include variable files if they match the workspace
name."""
import glob
import os
import pathlib
import subprocess # nosec
import sys
TF_COMMANDS_TO_MODIFY = ["plan", "console", "import", "refresh"]
def get_workspace():
"""Return the Terraform workspace."""
proc = subprocess.run( # nosec
["terraform", "workspace", "show"],
capture_output=True,
check=True,
text=True,
)
return proc.stdout.strip()
def is_debug_set():
"""Check if the debug environment variable is set."""
debug = os.getenv("TF_DEBUG", "").lower()
return debug in ["1", "true"]
if __name__ == "__main__":
# In case tf was run with no arguments.
if len(sys.argv) == 1:
os.execlp("terraform", "terraform") # nosec
# Build a new argument list.
args = sys.argv[:]
args[0] = "terraform"
# Check if the Terraform command is one that we need to modify (include
# tfvars files). If not, execute Terraform with the same arguments.
for command in TF_COMMANDS_TO_MODIFY:
if command in sys.argv:
break
else:
os.execvp("terraform", args) # nosec
# We need to add the var files after the Terraform command (if we add it
# before Terraform doesn't accept them) but not at the end (not to modify
# other argument that accept optional values). So we add them right after
# the Terraform command.
command_index = args.index(command)
workspace = get_workspace()
var_file = pathlib.Path(f"{workspace}.tfvars")
var_dir = pathlib.Path(workspace)
if var_file.exists() and var_file.is_file():
args.insert(command_index + 1, f"-var-file={var_file}")
elif var_dir.exists() and var_dir.is_dir():
for var_file in glob.glob(f"{var_dir}/*.tfvars"):
args.insert(command_index + 1, f"-var-file={var_file}")
# Print the new argument list to stderr if debugging is enabled.
if is_debug_set():
print(args, file=sys.stderr)
os.execvp("terraform", args) # nosec
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment