Skip to content

Commit

Permalink
Support specifying default provider in Nulecule spec file. Fixes proj…
Browse files Browse the repository at this point in the history
  • Loading branch information
rtnpro authored and cdrage committed Jan 20, 2016
1 parent 7d270b6 commit d671f0e
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 5 deletions.
1 change: 0 additions & 1 deletion atomicapp/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@
DEFAULT_NAMESPACE = "default"
DEFAULT_ANSWERS = {
"general": {
"provider": DEFAULT_PROVIDER,
"namespace": DEFAULT_NAMESPACE
}
}
Expand Down
5 changes: 4 additions & 1 deletion atomicapp/nulecule/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
NAME_KEY,
INHERIT_KEY,
ARTIFACTS_KEY,
REQUIREMENTS_KEY)
REQUIREMENTS_KEY,
DEFAULT_PROVIDER)
from atomicapp.utils import Utils
from atomicapp.requirements import Requirements
from atomicapp.nulecule.lib import NuleculeBase
Expand Down Expand Up @@ -197,6 +198,8 @@ def load_config(self, config=None, ask=False, skip_asking=False):
"""
super(Nulecule, self).load_config(
config=config, ask=ask, skip_asking=skip_asking)
if self.namespace == GLOBAL_CONF and self.config[GLOBAL_CONF].get('provider') is None:
self.config[GLOBAL_CONF]['provider'] = DEFAULT_PROVIDER
for component in self.components:
# FIXME: Find a better way to expose config data to components.
# A component should not get access to all the variables,
Expand Down
59 changes: 56 additions & 3 deletions tests/units/nulecule/test_nulecule.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,19 +43,72 @@ class TestNuleculeLoadConfig(unittest.TestCase):

"""Test Nulecule load_config"""

def test_load_config(self):
config = {'group1': {'a': 'b'}}
def test_load_config_without_specified_provider(self):
"""
Test Nulecule load_config without specifying a provider.
"""
config = {'general': {}, 'group1': {'a': 'b'}}
mock_component_1 = mock.Mock()
mock_component_1.config = {
'group1': {'a': 'c', 'k': 'v'},
'group2': {'1': '2'}
}

n = Nulecule('some-id', '0.0.2', {}, [], 'some/path')
n = Nulecule(id='some-id', specversion='0.0.2', metadata={}, graph=[], basepath='some/path')
n.components = [mock_component_1]
n.load_config(config)

self.assertEqual(n.config, {
'general': {'provider': 'kubernetes'},
'group1': {'a': 'b', 'k': 'v'},
'group2': {'1': '2'}
})

def test_load_config_with_defaultprovider(self):
"""
Test Nulecule load_config with default provider specified
in global params in Nulecule spec.
"""
config = {'general': {}, 'group1': {'a': 'b'}}
mock_component_1 = mock.Mock()
mock_component_1.config = {
'group1': {'a': 'c', 'k': 'v'},
'group2': {'1': '2'}
}

n = Nulecule(id='some-id', specversion='0.0.2', metadata={}, graph=[],
basepath='some/path',
params=[{'name': 'provider', 'default': 'some-provider'}])
n.components = [mock_component_1]
n.load_config(config)

self.assertEqual(n.config, {
'general': {'provider': 'some-provider'},
'group1': {'a': 'b', 'k': 'v'},
'group2': {'1': '2'}
})

def test_load_config_with_defaultprovider_overridden_by_provider_in_answers(self):
"""
Test Nulecule load_config with default provider specified
in global params in Nulecule spec, but overridden in answers config.
"""
config = {'general': {'provider': 'new-provider'},
'group1': {'a': 'b'}}
mock_component_1 = mock.Mock()
mock_component_1.config = {
'group1': {'a': 'c', 'k': 'v'},
'group2': {'1': '2'}
}

n = Nulecule(id='some-id', specversion='0.0.2', metadata={}, graph=[],
basepath='some/path',
params=[{'name': 'provider', 'default': 'some-provider'}])
n.components = [mock_component_1]
n.load_config(config)

self.assertEqual(n.config, {
'general': {'provider': 'new-provider'},
'group1': {'a': 'b', 'k': 'v'},
'group2': {'1': '2'}
})
Expand Down

0 comments on commit d671f0e

Please sign in to comment.