mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
terraform: fix diff when state is absent (#7963)
This commit is contained in:
parent
980fa36fac
commit
0a35eb2dda
2 changed files with 20 additions and 3 deletions
2
changelogs/fragments/7963-fix-terraform-diff-absent.yml
Normal file
2
changelogs/fragments/7963-fix-terraform-diff-absent.yml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- terraform - fix ``diff_mode`` in state ``absent`` and when terraform ``resource_changes`` does not exist (https://github.com/ansible-collections/community.general/pull/7963).
|
|
@ -376,7 +376,7 @@ def remove_workspace(bin_path, project_path, workspace):
|
||||||
_workspace_cmd(bin_path, project_path, 'delete', workspace)
|
_workspace_cmd(bin_path, project_path, 'delete', workspace)
|
||||||
|
|
||||||
|
|
||||||
def build_plan(command, project_path, variables_args, state_file, targets, state, apply_args, plan_path=None):
|
def build_plan(command, project_path, variables_args, state_file, targets, state, args, plan_path=None):
|
||||||
if plan_path is None:
|
if plan_path is None:
|
||||||
f, plan_path = tempfile.mkstemp(suffix='.tfplan')
|
f, plan_path = tempfile.mkstemp(suffix='.tfplan')
|
||||||
|
|
||||||
|
@ -389,11 +389,15 @@ def build_plan(command, project_path, variables_args, state_file, targets, state
|
||||||
plan_command.append(c)
|
plan_command.append(c)
|
||||||
|
|
||||||
if state == "present":
|
if state == "present":
|
||||||
for a in apply_args:
|
for a in args:
|
||||||
local_command.remove(a)
|
local_command.remove(a)
|
||||||
for c in local_command[1:]:
|
for c in local_command[1:]:
|
||||||
plan_command.append(c)
|
plan_command.append(c)
|
||||||
|
|
||||||
|
if state == "absent":
|
||||||
|
for a in args:
|
||||||
|
plan_command.append(a)
|
||||||
|
|
||||||
plan_command.extend(['-input=false', '-no-color', '-detailed-exitcode', '-out', plan_path])
|
plan_command.extend(['-input=false', '-no-color', '-detailed-exitcode', '-out', plan_path])
|
||||||
|
|
||||||
for t in targets:
|
for t in targets:
|
||||||
|
@ -434,7 +438,14 @@ def get_diff(diff_output):
|
||||||
return e['resource']
|
return e['resource']
|
||||||
|
|
||||||
diff_json_output = json.loads(diff_output)
|
diff_json_output = json.loads(diff_output)
|
||||||
|
|
||||||
|
# Ignore diff if resource_changes does not exists in tfplan
|
||||||
|
if 'resource_changes' in diff_json_output:
|
||||||
tf_reosource_changes = diff_json_output['resource_changes']
|
tf_reosource_changes = diff_json_output['resource_changes']
|
||||||
|
else:
|
||||||
|
module.warn("Cannot find resource_changes in terraform plan, diff/check ignored")
|
||||||
|
return False, {}
|
||||||
|
|
||||||
diff_after = []
|
diff_after = []
|
||||||
diff_before = []
|
diff_before = []
|
||||||
changed = False
|
changed = False
|
||||||
|
@ -658,6 +669,10 @@ def main():
|
||||||
|
|
||||||
result_diff = dict()
|
result_diff = dict()
|
||||||
if module._diff or module.check_mode:
|
if module._diff or module.check_mode:
|
||||||
|
if state == 'absent':
|
||||||
|
plan_absent_args = ['-destroy']
|
||||||
|
plan_file, needs_application, out, err, command = build_plan(command, project_path, variables_args, state_file,
|
||||||
|
module.params.get('targets'), state, plan_absent_args, plan_file)
|
||||||
diff_command = [command[0], 'show', '-json', plan_file]
|
diff_command = [command[0], 'show', '-json', plan_file]
|
||||||
rc, diff_output, err = module.run_command(diff_command, check_rc=False, cwd=project_path)
|
rc, diff_output, err = module.run_command(diff_command, check_rc=False, cwd=project_path)
|
||||||
changed, result_diff = get_diff(diff_output)
|
changed, result_diff = get_diff(diff_output)
|
||||||
|
|
Loading…
Reference in a new issue