Manage temp dirs from git clone.

- In some cases armada was not cleaning up temp dirs properly

Change-Id: I567989d9ac4363fff49c95802b61a3c459074d36
This commit is contained in:
Marshall Margenau 2018-06-25 19:03:31 -05:00
parent 3d855544b4
commit 1062aaf1bf
3 changed files with 9 additions and 11 deletions

View File

@ -106,6 +106,7 @@ class Armada(object):
self.k8s_wait_attempt_sleep = k8s_wait_attempt_sleep
self.manifest = Manifest(
self.documents, target_manifest=target_manifest).get_manifest()
self.cloned_dirs = set()
def find_release_chart(self, known_releases, release_name):
'''
@ -193,8 +194,9 @@ class Armada(object):
*repo_branch,
proxy_server=proxy_server,
auth_method=auth_method)
repos[repo_branch] = repo_dir
self.cloned_dirs.add(repo_dir)
repos[repo_branch] = repo_dir
chart['source_dir'] = (repo_dir, subpath)
else:
chart['source_dir'] = (repos.get(repo_branch), subpath)
@ -506,14 +508,9 @@ class Armada(object):
LOG.info("Performing post-flight operations.")
# Delete temp dirs used for deployment
for group in self.manifest.get(const.KEYWORD_ARMADA, {}).get(
const.KEYWORD_GROUPS, []):
for ch in group.get(const.KEYWORD_CHARTS, []):
chart = ch.get('chart', {})
if chart.get('source', {}).get('type') == 'git':
source_dir = chart.get('source_dir')
if isinstance(source_dir, tuple) and source_dir:
source.source_cleanup(source_dir[0])
for cloned_dir in self.cloned_dirs:
LOG.debug('Removing cloned temp directory: %s', cloned_dir)
source.source_cleanup(cloned_dir)
def _wait_until_ready(self, release_name, wait_labels, namespace, timeout):
if self.dry_run:

View File

@ -52,7 +52,7 @@ class GitTestCase(base.ArmadaTestCase):
url = 'https://github.com/openstack/airship-armada'
commit = 'cba78d1d03e4910f6ab1691bae633c5bddce893d'
git_dir = source.git_clone(url, commit)
self._validate_git_clone(git_dir)
self._validate_git_clone(git_dir, commit)
@testtools.skipUnless(base.is_connected(),
'git clone requires network connectivity.')

View File

@ -57,7 +57,6 @@ def git_clone(repo_url, ref='master', proxy_server=None, auth_method=None):
raise source_exceptions.GitException(repo_url)
env_vars = {'GIT_TERMINAL_PROMPT': '0'}
temp_dir = tempfile.mkdtemp(prefix='armada')
ssh_cmd = None
if auth_method and auth_method.lower() == 'ssh':
@ -79,6 +78,8 @@ def git_clone(repo_url, ref='master', proxy_server=None, auth_method=None):
'with no authentication.', repo_url, ref)
try:
temp_dir = tempfile.mkdtemp(prefix='armada')
if proxy_server:
LOG.debug('Cloning [%s] with proxy [%s]', repo_url, proxy_server)
repo = Repo.clone_from(