Cleanup kube_config temp files between test runs

In my local tests running tox the tmp files of each test case get
deleted after the run. However kube_config maintains a static list of
temporary files it knows about and tries to re-use them in subsequent
test runs which causes the test to fail [1]. Fix this by telling
kube_config to cleanup its temporary files in the cleanup phase.

[1] Trace
Traceback (most recent call last):
  File "/home/tobias/src/nodepool/nodepool/tests/unit/test_builder.py", line 239, in test_image_rotation_invalid_external_name
    build001, image001 = self._test_image_rebuild_age(expire=172800)
  File "/home/tobias/src/nodepool/nodepool/tests/unit/test_builder.py", line 186, in _test_image_rebuild_age
    self.useBuilder(configfile)
  File "/home/tobias/src/nodepool/nodepool/tests/__init__.py", line 539, in useBuilder
    BuilderFixture(configfile, cleanup_interval, securefile)
  File "/home/tobias/src/nodepool/.tox/py37/lib/python3.7/site-packages/testtools/testcase.py", line 756, in useFixture
    reraise(*exc_info)
  File "/home/tobias/src/nodepool/.tox/py37/lib/python3.7/site-packages/testtools/_compat3x.py", line 16, in reraise
    raise exc_obj.with_traceback(exc_tb)
  File "/home/tobias/src/nodepool/.tox/py37/lib/python3.7/site-packages/testtools/testcase.py", line 731, in useFixture
    fixture.setUp()
  File "/home/tobias/src/nodepool/nodepool/tests/__init__.py", line 318, in setUp
    self.builder.start()
  File "/home/tobias/src/nodepool/nodepool/builder.py", line 1304, in start
    self._config = self._getAndValidateConfig()
  File "/home/tobias/src/nodepool/nodepool/builder.py", line 1279, in _getAndValidateConfig
    config = nodepool_config.loadConfig(self._config_path)
  File "/home/tobias/src/nodepool/nodepool/config.py", line 246, in loadConfig
    driver.reset()
  File "/home/tobias/src/nodepool/nodepool/driver/openshift/__init__.py", line 29, in reset
    config.load_kube_config(persist_config=True)
  File "/home/tobias/src/nodepool/.tox/py37/lib/python3.7/site-packages/kubernetes/config/kube_config.py", line 540, in load_kube_config
    loader.load_and_set(config)
  File "/home/tobias/src/nodepool/.tox/py37/lib/python3.7/site-packages/kubernetes/config/kube_config.py", line 422, in load_and_set
    self._load_cluster_info()
  File "/home/tobias/src/nodepool/.tox/py37/lib/python3.7/site-packages/kubernetes/config/kube_config.py", line 385, in _load_cluster_info
    file_base_path=self._config_base_path).as_file()
  File "/home/tobias/src/nodepool/.tox/py37/lib/python3.7/site-packages/kubernetes/config/kube_config.py", line 112, in as_file
    raise ConfigException("File does not exists: %s" % self._file)
kubernetes.config.config_exception.ConfigException: File does not exists: /tmp/tmplafutg0j/tmpmiti10bn
Ran 2 tests in 4.524s (+0.175s)
FAILED (id=20, failures=1)

Change-Id: Idce8ca9bed49162874af24b224e573121e250385
This commit is contained in:
Tobias Henkel 2019-05-04 11:08:06 +02:00
parent 2e8f286c4f
commit 4131d7da59
No known key found for this signature in database
GPG Key ID: 03750DEC158E5FA2
1 changed files with 11 additions and 0 deletions

View File

@ -17,6 +17,7 @@
import glob
import itertools
import kubernetes.config.kube_config
import logging
import os
import random
@ -189,6 +190,16 @@ class BaseTestCase(testtools.TestCase):
LoggingPopenFactory))
self.setUpFakes()
self.addCleanup(self._cleanup)
def _cleanup(self):
# This is a hack to cleanup kubernetes temp files during test runs.
# The kube_config maintains a global dict of temporary files. During
# running the tests those can get deleted during the cleanup phase of
# the tests without kube_config knowing about this so forcefully tell
# kube_config to clean this up.
kubernetes.config.kube_config._cleanup_temp_files()
def setUpFakes(self):
clouds_path = os.path.join(os.path.dirname(__file__),
'fixtures', 'clouds.yaml')