Adjust logic for plan files (version > 1.0.0)
We will no longer try to chdir into files and instead add them as subcommands. Includes regression test Resolves #3 (https://gitlab.com/domaindrivenarchitecture/dda-python-terraform/-/issues/3)
This commit is contained in:
parent
0fb8218dbf
commit
3fd4a72d3d
2 changed files with 29 additions and 1 deletions
|
@ -464,12 +464,20 @@ class Terraform:
|
||||||
def _generate_default_args(self, dir_or_plan: Optional[str]) -> Sequence[str]:
|
def _generate_default_args(self, dir_or_plan: Optional[str]) -> Sequence[str]:
|
||||||
if (version.parse(self.terraform_semantic_version) < version.parse("1.0.0") and dir_or_plan):
|
if (version.parse(self.terraform_semantic_version) < version.parse("1.0.0") and dir_or_plan):
|
||||||
return [dir_or_plan]
|
return [dir_or_plan]
|
||||||
|
elif (version.parse(self.terraform_semantic_version) >= version.parse("1.0.0") and dir_or_plan and os.path.isfile(f'{self.working_dir}/{dir_or_plan}')):
|
||||||
|
plan = dir_or_plan.split('/')[-1]
|
||||||
|
return [plan]
|
||||||
else:
|
else:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def _generate_default_general_options(self, dir_or_plan: Optional[str]) -> Dict[str, Any]:
|
def _generate_default_general_options(self, dir_or_plan: Optional[str]) -> Dict[str, Any]:
|
||||||
if (version.parse(self.terraform_semantic_version) >= version.parse("1.0.0") and dir_or_plan):
|
if (version.parse(self.terraform_semantic_version) >= version.parse("1.0.0") and dir_or_plan):
|
||||||
|
if os.path.isdir(self.working_dir + '/' + dir_or_plan):
|
||||||
return {"chdir": dir_or_plan}
|
return {"chdir": dir_or_plan}
|
||||||
|
else:
|
||||||
|
plan_path = dir_or_plan.split('/')
|
||||||
|
dir_to_plan_path = "/".join(plan_path[:-1])
|
||||||
|
return {"chdir": dir_to_plan_path}
|
||||||
else:
|
else:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
|
@ -316,6 +316,26 @@ class TestTerraform:
|
||||||
assert expected_output in out.replace("\n", "").replace(" ", "")
|
assert expected_output in out.replace("\n", "").replace(" ", "")
|
||||||
assert err == ""
|
assert err == ""
|
||||||
|
|
||||||
|
def test_apply_plan(self):
|
||||||
|
# test is only applicable to version > 1.0.0
|
||||||
|
if version.parse(semantic_version) < version.parse("1.0.0"):
|
||||||
|
return
|
||||||
|
|
||||||
|
tf = Terraform(
|
||||||
|
working_dir=current_path, terraform_semantic_version=semantic_version
|
||||||
|
)
|
||||||
|
out_folder = 'var_to_output'
|
||||||
|
out_file_name = 'test.out'
|
||||||
|
out_file_path = f'{out_folder}/{out_file_name}'
|
||||||
|
tf.init(out_folder)
|
||||||
|
ret, _, err = tf.plan(out_folder, detailed_exitcode=IsNotFlagged, out=out_file_name)
|
||||||
|
assert ret == 0
|
||||||
|
assert err == ""
|
||||||
|
|
||||||
|
ret, _, err = tf.apply(out_file_path, skip_plan=True)
|
||||||
|
assert ret == 0
|
||||||
|
assert err == ""
|
||||||
|
|
||||||
def test_apply_with_var_file(self, caplog: LogCaptureFixture):
|
def test_apply_with_var_file(self, caplog: LogCaptureFixture):
|
||||||
with caplog.at_level(logging.INFO):
|
with caplog.at_level(logging.INFO):
|
||||||
tf = Terraform(working_dir=current_path, terraform_semantic_version=semantic_version)
|
tf = Terraform(working_dir=current_path, terraform_semantic_version=semantic_version)
|
||||||
|
|
Loading…
Reference in a new issue