Esempio n. 1
0
 def _example_collection(self):
     collection = cloud_models.Collection()
     webappsg = cloud_models.SecurityGroup(name='webapp')
     collection.nodes.add(cloud_models.Node(name='webapp',
                                            image='trusty',
                                            flavor='n1-standard-2',
                                            disk=37,
                                            networks=[],
                                            security_groups=set([webappsg]),
                                            private=mock.sentinel.webapp1priv))
     collection.nodes.add(cloud_models.Node(name='webapp2',
                                            image='trusty',
                                            flavor='n1-standard-2',
                                            disk=37,
                                            networks=[],
                                            security_groups=set([webappsg]),
                                            script='#!/bin/bash\necho hello\n',
                                            private=mock.sentinel.webapp2priv))
     collection.security_groups.add(webappsg)
     collection.security_group_rules.add(cloud_models.SecurityGroupRule(security_group=webappsg,
                                                                        source_ip='0.0.0.0/0',
                                                                        from_port=443,
                                                                        to_port=443,
                                                                        protocol='tcp'))
     collection.security_group_rules.add(cloud_models.SecurityGroupRule(security_group=webappsg,
                                                                        source_ip='212.10.10.10/32',
                                                                        from_port=8000,
                                                                        to_port=8080,
                                                                        protocol='tcp'))
     return collection
Esempio n. 2
0
    def test_cluster_data(self):
        collection = cloud_models.Collection()

        collection.urls.append(
            cloud_models.URLConfStatic(hostname='example.com',
                                       path='/foo/bar',
                                       local_path='/data'))
        collection.urls.append(
            cloud_models.URLConfBackend(hostname='example.com',
                                        path='/foo/bar',
                                        destination='somebackend/somepath'))
        self.assertEqual(
            self.cloud_driver.cluster_data(collection), {
                'containers': [],
                'tasks': [],
                'proxyconf': {
                    'backends': ['somebackend'],
                    'domains': {
                        'example.com': {
                            '/foo/bar': {
                                'destination': 'somebackend/somepath',
                                'type': 'backend'
                            }
                        }
                    }
                }
            })
 def test_init_with_args(self):
     c = models.Collection(
         nodes=mock.sentinel.nodes,
         security_groups=mock.sentinel.security_groups,
         security_group_rules=mock.sentinel.security_group_rules)
     self.assertEqual(mock.sentinel.nodes, c.nodes)
     self.assertEqual(mock.sentinel.security_groups, c.security_groups)
     self.assertEqual(mock.sentinel.security_group_rules,
                      c.security_group_rules)
Esempio n. 4
0
 def setUp(self):
     self.sg1 = cloud_models.SecurityGroup(name='sg1')
     self.sgr1 = cloud_models.SecurityGroupRule(security_group=self.sg1,
                                                from_port=443,
                                                to_port=443,
                                                source_ip='0.0.0.0/0',
                                                protocol='tcp')
     self.sgr2 = cloud_models.SecurityGroupRule(security_group=self.sg1,
                                                from_port=80,
                                                to_port=80,
                                                source_ip='0.0.0.0/0',
                                                protocol='tcp')
     self.node1 = cloud_models.Node(name='node1',
                                    image='image',
                                    flavor='image',
                                    networks=[],
                                    disk=10,
                                    security_groups=set([self.sg1]))
     self.current = cloud_models.Collection()
     self.desired = cloud_models.Collection()
Esempio n. 5
0
    def test_update_cluster(self):
        self.collection = models.Collection()

        class TestDriver(base.CloudDriver):
            def cluster_json(selff, collection):
                self.assertEquals(collection, self.collection)
                return '"thejson"'

        driver = TestDriver()
        driver.cluster = mock.MagicMock()
        driver.update_cluster(self.collection)
        driver.cluster.update.assert_called_with(json='"thejson"')
    def test_sub(self):
        c1 = models.Collection()
        c2 = models.Collection()

        n1 = NamedItem('node1')
        n2 = NamedItem('node2')
        n3 = NamedItem('node3')
        sg1 = NamedItem('securitygroup1')
        sg2 = NamedItem('securitygroup2')
        sg3 = NamedItem('securitygroup3')
        sgr1 = NamedItem('securitygrouprule1')
        sgr2 = NamedItem('securitygrouprule2')
        sgr3 = NamedItem('securitygrouprule3')

        c1.nodes.add(n1)
        c2.nodes.add(n1)
        c2.nodes.add(n2)
        c2.nodes.add(n3)

        c1.security_groups.add(sg1)
        c2.security_groups.add(sg1)
        c2.security_groups.add(sg2)
        c2.security_groups.add(sg3)

        c1.security_group_rules.add(sgr1)
        c2.security_group_rules.add(sgr1)
        c2.security_group_rules.add(sgr2)
        c2.security_group_rules.add(sgr3)

        c_diff = c2 - c1

        c_expected = models.Collection()
        c_expected.nodes.add(n2)
        c_expected.nodes.add(n3)
        c_expected.security_groups.add(sg2)
        c_expected.security_groups.add(sg3)
        c_expected.security_group_rules.add(sgr2)
        c_expected.security_group_rules.add(sgr3)

        self.assertEqual(c_expected, c_diff)
Esempio n. 7
0
    def test_cluster_json(self):
        self.collection = models.Collection()

        class TestDriver(base.CloudDriver):
            def cluster_data(selff, collection):
                self.assertEqual(collection, self.collection)

                return {'foo': ['bar', 'baz']}

        driver = TestDriver()

        self.assertEqual(json.loads(driver.cluster_json(self.collection)),
                         {'foo': ['bar', 'baz']})
    def test_format_collection(self):
        collection = cloud_models.Collection()

        class GCENode(object):
            def __init__(self, ip):
                self.public_ips = [ip]

        collection.nodes.add(
            cloud_models.Node(name='testnode',
                              flavor='n1-standard-1',
                              image='someimage',
                              networks=[],
                              disk=10,
                              private=GCENode('10.0.0.1')))
        self.assertEquals(
            aasemble.deployment.cli.format_collection(collection),
            "Nodes:\n  testnode: 10.0.0.1\n")
Esempio n. 9
0
    def detect_resources(self):
        collection = cloud_models.Collection()

        LOG.info('Detecting nodes')
        for node in self.detect_nodes():
            collection.nodes.add(node)

        LOG.info('Detecting security groups and security group rules')

        security_groups, security_group_rules = self.detect_firewalls()

        for security_group in security_groups:
            collection.security_groups.add(security_group)

        for security_group_rule in security_group_rules:
            collection.security_group_rules.add(security_group_rule)

        collection.connect()

        return collection
Esempio n. 10
0
def load(fpath, substitutions=None):
    data = load_yaml(fpath)[0]
    collection = cloud_models.Collection()

    for urlconf in build_urls(data, substitutions):
        collection.urls.append(urlconf)

    for node in build_nodes(data, substitutions):
        collection.nodes.add(node)

    collection.containers = data.get('containers', [])

    security_groups, security_group_rules = build_security_groups_and_rules(data)

    for security_group in security_groups:
        collection.security_groups.add(security_group)

    for security_group_rule in security_group_rules:
        collection.security_group_rules.add(security_group_rule)

    collection.connect()
    return collection
    def test_connect(self):
        c = models.Collection()

        n = models.Node(name='node1',
                        flavor='flavor',
                        image='image',
                        networks=[],
                        disk=10)
        n.security_group_names = ['securitygroup1', 'securitygroup2']
        sg1 = NamedItem('securitygroup1')
        sg2 = NamedItem('securitygroup2')
        sg3 = NamedItem('securitygroup3')

        c.nodes.add(n)
        c.security_groups.add(sg1)
        c.security_groups.add(sg2)
        c.security_groups.add(sg3)

        c.connect()

        self.assertIn(sg1, n.security_groups)
        self.assertIn(sg2, n.security_groups)
    def test_cluster_data(self):
        collection = cloud_models.Collection()

        lb = cloud_models.Node(name='lb',
                               image='trusty',
                               flavor='512mb',
                               disk=27,
                               networks=[])
        web1 = cloud_models.Node(name='web1',
                                 image='trusty',
                                 flavor='512mb',
                                 disk=27,
                                 networks=[])
        web2 = cloud_models.Node(name='web2',
                                 image='trusty',
                                 flavor='512mb',
                                 disk=27,
                                 networks=[])
        db = cloud_models.Node(name='db',
                               image='trusty',
                               flavor='512mb',
                               disk=27,
                               networks=[])

        frontend_sg = cloud_models.SecurityGroup(name='frontend')
        frontend_http_sgr = cloud_models.SecurityGroupRule(
            security_group=frontend_sg,
            source_ip='0.0.0.0/0',
            from_port=80,
            to_port=80,
            protocol='tcp')
        frontend_https_sgr = cloud_models.SecurityGroupRule(
            security_group=frontend_sg,
            source_ip='0.0.0.0/0',
            from_port=443,
            to_port=443,
            protocol='tcp')
        lb.security_groups.add(frontend_sg)

        backend_sg = cloud_models.SecurityGroup(name='backend')
        backend_http_sgr = cloud_models.SecurityGroupRule(
            security_group=backend_sg,
            source_group='frontend',
            from_port=80,
            to_port=80,
            protocol='tcp')
        web1.security_groups.add(backend_sg)
        web2.security_groups.add(backend_sg)

        db_sg = cloud_models.SecurityGroup(name='mysql')
        mysql_sgr = cloud_models.SecurityGroupRule(security_group=db_sg,
                                                   source_group='backend',
                                                   from_port=3306,
                                                   to_port=3306,
                                                   protocol='tcp')
        db.security_groups.add(db_sg)

        collection.nodes.add(lb)
        collection.nodes.add(web1)
        collection.nodes.add(web2)
        collection.nodes.add(db)
        collection.nodes.add(db)
        collection.security_groups.add(frontend_sg)
        collection.security_groups.add(backend_sg)
        collection.security_groups.add(db_sg)
        collection.security_group_rules.add(frontend_http_sgr)
        collection.security_group_rules.add(frontend_https_sgr)
        collection.security_group_rules.add(backend_http_sgr)
        collection.security_group_rules.add(mysql_sgr)

        collection.urls.append(
            cloud_models.URLConfStatic(hostname='example.com',
                                       path='/foo/bar',
                                       local_path='/data'))
        collection.urls.append(
            cloud_models.URLConfBackend(hostname='example.com',
                                        path='/foo/bar',
                                        destination='somebackend/somepath'))
        self.maxDiff = None
        self.assertEqual(
            self.cloud_driver.cluster_data(collection), {
                'containers': [{
                    'host_network': True,
                    'image': 'aasemble/fwmanager',
                    'name': 'fwmanager',
                    'nodes': '.*',
                    'privileged': True
                }],
                'tasks': [],
                'proxyconf': {
                    'backends': ['somebackend'],
                    'domains': {
                        'example.com': {
                            '/foo/bar': {
                                'destination': 'somebackend/somepath',
                                'type': 'backend'
                            }
                        }
                    }
                },
                'fwconf': {
                    'security_groups': {
                        'backend': {
                            'nodes': ['web1', 'web2'],
                            'rules': [{
                                'from_port': 80,
                                'protocol': 'tcp',
                                'source_group': 'frontend',
                                'to_port': 80
                            }]
                        },
                        'frontend': {
                            'nodes': ['lb'],
                            'rules': [{
                                'from_port': 443,
                                'protocol': 'tcp',
                                'source_ip': '0.0.0.0/0',
                                'to_port': 443
                            }, {
                                'from_port': 80,
                                'protocol': 'tcp',
                                'source_ip': '0.0.0.0/0',
                                'to_port': 80
                            }]
                        },
                        'mysql': {
                            'nodes': ['db'],
                            'rules': [{
                                'from_port': 3306,
                                'protocol': 'tcp',
                                'source_group': 'backend',
                                'to_port': 3306
                            }]
                        }
                    }
                }
            })
 def test_init(self):
     c = models.Collection()
     self.assertEqual(models.NamedSet(), c.nodes)
     self.assertEqual(models.NamedSet(), c.security_groups)
     self.assertEqual(models.NamedSet(), c.security_group_rules)