def test_no_template(self): # Nodes without a template still work environments = { NeckbeardLoader.VERSION_OPTION: '0.1', 'test1': { 'name': 'test1', 'aws_nodes': { 'ec2': { 'web0': { "name": "web0", "unique_id": "web0-{{ node.scaling_index }}", }, }, }, }, } node_templates = { NeckbeardLoader.VERSION_OPTION: '0.1', 'ec2': {}, } configuration = ConfigurationManager( environments=environments, node_templates=node_templates, scaling_backend=MaxScalingBackend(), ) expanded_conf = configuration._apply_node_template( 'ec2', environments['test1']['aws_nodes']['ec2']['web0'], ) self.assertEqual(expanded_conf['name'], 'web0')
def test_deep_merge(self): # Dictionaries are deep merged environments = { NeckbeardLoader.VERSION_OPTION: '0.1', 'test1': { 'name': 'test1', 'aws_nodes': { 'ec2': { 'web0': { "name": "web0", "node_template_name": "web", "unique_id": "web-{{ node.scaling_index }}", "service_addons": { "redis": { "foo": "original", }, }, }, }, }, }, } node_templates = { 'ec2': { "web": { NeckbeardLoader.VERSION_OPTION: '0.1', "resource_type": "ec2", "node_template_name": "web", "defaults": { "service_addons": { "redis": { "foo": "overridden", "from_template": "v_from_template", }, "celery": { "celerybeat": True, }, }, }, "required_overrides": {}, }, }, } configuration = ConfigurationManager( environments=environments, node_templates=node_templates, scaling_backend=MaxScalingBackend(), ) expanded_conf = configuration._apply_node_template( 'ec2', environments['test1']['aws_nodes']['ec2']['web0'], ) service_addons = expanded_conf.get("service_addons", {}) celery = service_addons.get('celery', {}) self.assertEqual(celery.get('celerybeat'), True) redis = service_addons.get('redis', {}) self.assertEqual(redis.get('foo'), "original") self.assertEqual(redis.get('from_template'), "v_from_template")
def test_resource_preference(self): # Things in the config take preference over things in the template environments = { NeckbeardLoader.VERSION_OPTION: '0.1', 'test1': { 'name': 'test1', 'aws_nodes': { 'ec2': { 'web0': { "name": "web0", "node_template_name": "web", "unique_id": "web-{{ node.scaling_index }}", "foo": "original", }, }, }, }, } node_templates = { 'ec2': { "web": { NeckbeardLoader.VERSION_OPTION: '0.1', "resource_type": "ec2", "node_template_name": "web", "defaults": { "foo": "template", }, "required_overrides": {}, }, }, } configuration = ConfigurationManager( environments=environments, node_templates=node_templates, scaling_backend=MaxScalingBackend(), ) expanded_conf = configuration._apply_node_template( 'ec2', environments['test1']['aws_nodes']['ec2']['web0'], ) self.assertEqual(expanded_conf['foo'], 'original')
def test_variables_added(self): environments = { NeckbeardLoader.VERSION_OPTION: '0.1', 'test1': { 'name': 'test1', 'aws_nodes': { 'ec2': { 'web0': { "name": "web0", "node_template_name": "web", "unique_id": "web-{{ node.scaling_index }}", }, }, }, }, } node_templates = { 'ec2': { "web": { NeckbeardLoader.VERSION_OPTION: '0.1', "resource_type": "ec2", "node_template_name": "web", "defaults": { "foo1": "v_foo1", }, "required_overrides": {}, }, }, } configuration = ConfigurationManager( environments=environments, node_templates=node_templates, scaling_backend=MaxScalingBackend(), ) expanded_conf = configuration._apply_node_template( 'ec2', environments['test1']['aws_nodes']['ec2']['web0'], ) self.assertEqual(expanded_conf.get('foo1'), 'v_foo1')