Example #1
0
    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')
Example #2
0
    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")
Example #3
0
    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')
Example #4
0
    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')