diff --git a/os_collect_config/ec2.py b/os_collect_config/ec2.py index 1fee674..d174eec 100644 --- a/os_collect_config/ec2.py +++ b/os_collect_config/ec2.py @@ -68,7 +68,11 @@ class Collector(object): cache_path = cache.get_path('ec2') if os.path.exists(cache_path): with open(cache_path) as f: - metadata = json.load(f) + try: + metadata = json.load(f) + except ValueError as e: + log.getLogger(__name__).warn(e) + metadata = None if metadata: return [('ec2', metadata)] diff --git a/os_collect_config/tests/test_ec2.py b/os_collect_config/tests/test_ec2.py index a3d1fd8..8ff7c58 100644 --- a/os_collect_config/tests/test_ec2.py +++ b/os_collect_config/tests/test_ec2.py @@ -133,6 +133,20 @@ class TestEc2(testtools.TestCase): self.assertRaises(exc.Ec2MetadataNotAvailable, collect_ec2.collect) self.assertIn('Forbidden', self.log.output) + @mock.patch.object(config_drive, 'config_drive') + def test_collect_ec2_invalid_cache(self, cd): + cd.return_value = None + collect.setup_conf() + cache_dir = self.useFixture(fixtures.TempDir()) + self.addCleanup(cfg.CONF.reset) + cfg.CONF.set_override('cachedir', cache_dir.path) + ec2_path = os.path.join(cache_dir.path, 'ec2.json') + with open(ec2_path, 'w') as f: + f.write('') + + ec2_md = ec2.Collector(requests_impl=FakeRequests).collect() + self.assertEqual([('ec2', META_DATA_RESOLVED)], ec2_md) + @mock.patch.object(config_drive, 'config_drive') def test_collect_ec2_collected(self, cd): cd.return_value = None