Skip to content
This repository was archived by the owner on Mar 13, 2022. It is now read-only.

Commit 11da619

Browse files
authored
Merge pull request #47 from roycaihw/config_dup
Raise exception on duplicated name in kubeconfig
2 parents 9aed5ad + 1c6be33 commit 11da619

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

config/kube_config.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -298,14 +298,23 @@ def get_with_name(self, name, safe=False):
298298
raise ConfigException(
299299
'Invalid kube-config file. Expected %s to be a list'
300300
% self.name)
301+
result = None
301302
for v in self.value:
302303
if 'name' not in v:
303304
raise ConfigException(
304305
'Invalid kube-config file. '
305306
'Expected all values in %s list to have \'name\' key'
306307
% self.name)
307308
if v['name'] == name:
308-
return ConfigNode('%s[name=%s]' % (self.name, name), v)
309+
if result is None:
310+
result = v
311+
else:
312+
raise ConfigException(
313+
'Invalid kube-config file. '
314+
'Expected only one object with name %s in %s list'
315+
% (name, self.name))
316+
if result is not None:
317+
return ConfigNode('%s[name=%s]' % (self.name, name), result)
309318
if safe:
310319
return None
311320
raise ConfigException(

config/kube_config_test.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -180,15 +180,19 @@ class TestConfigNode(BaseTestCase):
180180
"with_names": [{"name": "test_name", "value": "test_value"},
181181
{"name": "test_name2",
182182
"value": {"key1", "test"}},
183-
{"name": "test_name3", "value": [1, 2, 3]}]}
183+
{"name": "test_name3", "value": [1, 2, 3]}],
184+
"with_names_dup": [{"name": "test_name", "value": "test_value"},
185+
{"name": "test_name",
186+
"value": {"key1", "test"}},
187+
{"name": "test_name3", "value": [1, 2, 3]}]}
184188

185189
def setUp(self):
186190
super(TestConfigNode, self).setUp()
187191
self.node = ConfigNode("test_obj", self.test_obj)
188192

189193
def test_normal_map_array_operations(self):
190194
self.assertEqual("test", self.node['key1'])
191-
self.assertEqual(4, len(self.node))
195+
self.assertEqual(5, len(self.node))
192196

193197
self.assertEqual("test_obj/key2", self.node['key2'].name)
194198
self.assertEqual(["a", "b", "c"], self.node['key2'].value)
@@ -235,6 +239,11 @@ def test_get_with_name_on_name_does_not_exists(self):
235239
lambda: self.node['with_names'].get_with_name('no-name'),
236240
"Expected object with name no-name in test_obj/with_names list")
237241

242+
def test_get_with_name_on_duplicate_name(self):
243+
self.expect_exception(
244+
lambda: self.node['with_names_dup'].get_with_name('test_name'),
245+
"Expected only one object with name test_name in test_obj/with_names_dup list")
246+
238247

239248
class FakeConfig:
240249

0 commit comments

Comments
 (0)