in rostran/providers/terraform/template.py [0:0]
def _get_plan_data(cls, tf_dir, tf_plan_path=None) -> (dict, dict):
# Using "terraform plan/show" to parse configuration
typer.secho("Parsing terraform config...")
tf_plan = None
cwd = os.getcwd()
if not os.path.isabs(tf_dir):
tf_dir = os.path.join(cwd, tf_dir)
tf = TerraformCommand(tf_dir)
if tf_plan_path is None:
plan_filename = f"{str(uuid4())[:8]}.tfplan"
tf_plan_path = os.path.join(cwd, plan_filename)
try:
tf.init(check=True)
tf.plan(out=tf_plan_path, check=True)
r = tf.show(tf_plan_path, check=True)
tf_plan = r.value
except TerraformCommandError as e:
raise RunCommandFailed(cmd=e.cmd, reason=e.stderr or e.stdout)
finally:
if os.path.exists(tf_plan_path):
os.remove(tf_plan_path)
else:
try:
r = tf.show(tf_plan_path, check=True)
tf_plan = r.value
except TerraformCommandError as e:
raise RunCommandFailed(cmd=e.cmd, reason=e.stderr or e.stdout)
if tf_plan is None:
raise RosTranException()
version = tf_plan[cls.P_FORMAT_VERSION]
if version not in cls.SUPPORTED_PLAN_FORMAT_VERSIONS:
raise TerraformPlanFormatVersionNotSupported(version=version)
tf_data, _ = TerraformConfig.load_config_dir(tf_dir)
typer.secho("Parse terraform config done.")
return tf_plan, tf_data