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:
parent
cdf6e3e4bf
commit
5940d3d45b
5 changed files with 18 additions and 13 deletions
|
@ -194,5 +194,7 @@ class AdHocCLI(CLI):
|
||||||
finally:
|
finally:
|
||||||
if self._tqm:
|
if self._tqm:
|
||||||
self._tqm.cleanup()
|
self._tqm.cleanup()
|
||||||
|
if loader:
|
||||||
|
loader.cleanup_all_tmp_files()
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
|
@ -215,6 +215,8 @@ class ConsoleCLI(CLI, cmd.Cmd):
|
||||||
finally:
|
finally:
|
||||||
if self._tqm:
|
if self._tqm:
|
||||||
self._tqm.cleanup()
|
self._tqm.cleanup()
|
||||||
|
if self.loader:
|
||||||
|
self.loader.cleanup_all_tmp_files()
|
||||||
|
|
||||||
if result is None:
|
if result is None:
|
||||||
display.error("No hosts found")
|
display.error("No hosts found")
|
||||||
|
|
|
@ -194,6 +194,8 @@ class PlaybookExecutor:
|
||||||
finally:
|
finally:
|
||||||
if self._tqm is not None:
|
if self._tqm is not None:
|
||||||
self._tqm.cleanup()
|
self._tqm.cleanup()
|
||||||
|
if self._loader:
|
||||||
|
self._loader.cleanup_all_tmp_files()
|
||||||
|
|
||||||
if self._options.syntax:
|
if self._options.syntax:
|
||||||
display.display("No issues encountered")
|
display.display("No issues encountered")
|
||||||
|
|
|
@ -23,11 +23,9 @@ import copy
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import subprocess
|
import subprocess
|
||||||
from yaml import YAMLError
|
|
||||||
import tempfile
|
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.compat.six import text_type, string_types
|
||||||
|
|
||||||
from ansible.errors import AnsibleFileNotFound, AnsibleParserError, AnsibleError
|
from ansible.errors import AnsibleFileNotFound, AnsibleParserError, AnsibleError
|
||||||
|
@ -67,10 +65,6 @@ class DataLoader():
|
||||||
# initialize the vault stuff with an empty password
|
# initialize the vault stuff with an empty password
|
||||||
self.set_vault_password(None)
|
self.set_vault_password(None)
|
||||||
|
|
||||||
def __del__(self):
|
|
||||||
for f in self._tempfiles:
|
|
||||||
os.unlink(f)
|
|
||||||
|
|
||||||
def set_vault_password(self, vault_password):
|
def set_vault_password(self, vault_password):
|
||||||
self._vault_password = vault_password
|
self._vault_password = vault_password
|
||||||
self._vault = VaultLib(password=vault_password)
|
self._vault = VaultLib(password=vault_password)
|
||||||
|
@ -352,9 +346,9 @@ class DataLoader():
|
||||||
return real_path
|
return real_path
|
||||||
|
|
||||||
except (IOError, OSError) as e:
|
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
|
Removes any temporary files created from a previous call to
|
||||||
get_real_file. file_path must be the path returned from a
|
get_real_file. file_path must be the path returned from a
|
||||||
|
@ -363,3 +357,10 @@ class DataLoader():
|
||||||
if file_path in self._tempfiles:
|
if file_path in self._tempfiles:
|
||||||
os.unlink(file_path)
|
os.unlink(file_path)
|
||||||
self._tempfiles.remove(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
|
||||||
|
|
|
@ -220,8 +220,7 @@ class ActionModule(ActionBase):
|
||||||
|
|
||||||
# We have copied the file remotely and no longer require our content_tempfile
|
# We have copied the file remotely and no longer require our content_tempfile
|
||||||
self._remove_tempfile_if_content_defined(content, content_tempfile)
|
self._remove_tempfile_if_content_defined(content, content_tempfile)
|
||||||
|
self._loader.cleanup_tmp_file(source_full)
|
||||||
self._loader.cleanup_real_file(source_full)
|
|
||||||
|
|
||||||
# fix file permissions when the copy is done as a different user
|
# fix file permissions when the copy is done as a different user
|
||||||
self._fixup_perms(tmp, remote_user, recursive=True)
|
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
|
# no need to transfer the file, already correct hash, but still need to call
|
||||||
# the file module in case we want to change attributes
|
# the file module in case we want to change attributes
|
||||||
self._remove_tempfile_if_content_defined(content, content_tempfile)
|
self._remove_tempfile_if_content_defined(content, content_tempfile)
|
||||||
|
self._loader.cleanup_tmp_file(source_full)
|
||||||
self._loader.cleanup_real_file(source_full)
|
|
||||||
|
|
||||||
if raw:
|
if raw:
|
||||||
# Continue to next iteration if raw is defined.
|
# Continue to next iteration if raw is defined.
|
||||||
|
|
Loading…
Reference in a new issue