1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

fixes to vault/copy

rm _del_ as it might leak memory
renamed to tmp file cleanup
added exception handling when traversing file list, even if one fails try rest
added cleanup to finally to ensure removal in most cases
This commit is contained in:
Brian Coca 2016-04-14 10:31:39 -04:00
parent cdf6e3e4bf
commit 5940d3d45b
5 changed files with 18 additions and 13 deletions

View file

@ -194,5 +194,7 @@ class AdHocCLI(CLI):
finally:
if self._tqm:
self._tqm.cleanup()
if loader:
loader.cleanup_all_tmp_files()
return result

View file

@ -215,6 +215,8 @@ class ConsoleCLI(CLI, cmd.Cmd):
finally:
if self._tqm:
self._tqm.cleanup()
if self.loader:
self.loader.cleanup_all_tmp_files()
if result is None:
display.error("No hosts found")

View file

@ -194,6 +194,8 @@ class PlaybookExecutor:
finally:
if self._tqm is not None:
self._tqm.cleanup()
if self._loader:
self._loader.cleanup_all_tmp_files()
if self._options.syntax:
display.display("No issues encountered")

View file

@ -23,11 +23,9 @@ import copy
import os
import json
import subprocess
from yaml import YAMLError
import tempfile
from yaml import YAMLError
from yaml import load, YAMLError
>>>>>>> feature/copy-vault-dataloader: Add method get_real_file(file_path) to dataloader
from ansible.compat.six import text_type, string_types
from ansible.errors import AnsibleFileNotFound, AnsibleParserError, AnsibleError
@ -67,10 +65,6 @@ class DataLoader():
# initialize the vault stuff with an empty password
self.set_vault_password(None)
def __del__(self):
for f in self._tempfiles:
os.unlink(f)
def set_vault_password(self, vault_password):
self._vault_password = vault_password
self._vault = VaultLib(password=vault_password)
@ -352,9 +346,9 @@ class DataLoader():
return real_path
except (IOError, OSError) as e:
raise AnsibleParserError("an error occurred while trying to read the file '%s': %s" % (file_name, str(e)))
raise AnsibleParserError("an error occurred while trying to read the file '%s': %s" % (real_path, str(e)))
def cleanup_real_file(self, file_path):
def cleanup_tmp_file(self, file_path):
"""
Removes any temporary files created from a previous call to
get_real_file. file_path must be the path returned from a
@ -363,3 +357,10 @@ class DataLoader():
if file_path in self._tempfiles:
os.unlink(file_path)
self._tempfiles.remove(file_path);
def cleanup_all_tmp_files(self):
for f in self._tempfiles:
try:
self.cleanup_tmp_file(f)
except:
pass #TODO: this should at least warn

View file

@ -220,8 +220,7 @@ class ActionModule(ActionBase):
# We have copied the file remotely and no longer require our content_tempfile
self._remove_tempfile_if_content_defined(content, content_tempfile)
self._loader.cleanup_real_file(source_full)
self._loader.cleanup_tmp_file(source_full)
# fix file permissions when the copy is done as a different user
self._fixup_perms(tmp, remote_user, recursive=True)
@ -250,8 +249,7 @@ class ActionModule(ActionBase):
# no need to transfer the file, already correct hash, but still need to call
# the file module in case we want to change attributes
self._remove_tempfile_if_content_defined(content, content_tempfile)
self._loader.cleanup_real_file(source_full)
self._loader.cleanup_tmp_file(source_full)
if raw:
# Continue to next iteration if raw is defined.