Пример #1
0
    def reserve_route_advertisement(self, vpc_region, vpc_id, network):
        ra_id = '%s_%s_%s' % (self.server.id, vpc_id, network)
        timestamp_spec = utils.now() - datetime.timedelta(
            seconds=settings.vpn.route_ping_ttl)

        try:
            self.routes_collection.update_one({
                '_id': ra_id,
                'timestamp': {'$lt': timestamp_spec},
            }, {'$set': {
                'instance_id': self.id,
                'server_id': self.server.id,
                'vpc_region': vpc_region,
                'vpc_id': vpc_id,
                'network': network,
                'timestamp': utils.now(),
            }}, upsert=True)

            utils.add_vpc_route(vpc_region, vpc_id, network,
                settings.local.host.aws_id)

            self.route_advertisements.add(ra_id)
        except pymongo.errors.DuplicateKeyError:
            return
        except:
            logger.exception('Failed to add vpc route', 'server',
                server_id=self.server.id,
                instance_id=self.id,
                vpc_region=vpc_region,
                vpc_id=vpc_id,
                network=network,
            )
Пример #2
0
    def reserve_route_advertisement(self, vpc_region, vpc_id, network):
        cloud_provider = settings.app.cloud_provider
        if not cloud_provider:
            return

        ra_id = '%s_%s_%s' % (self.server.id, vpc_id, network)
        timestamp_spec = utils.now() - datetime.timedelta(
            seconds=settings.vpn.route_ping_ttl)

        try:
            self.routes_collection.update_one(
                {
                    '_id': ra_id,
                    'timestamp': {
                        '$lt': timestamp_spec
                    },
                }, {
                    '$set': {
                        'instance_id': self.id,
                        'server_id': self.server.id,
                        'vpc_region': vpc_region,
                        'vpc_id': vpc_id,
                        'network': network,
                        'timestamp': utils.now(),
                    }
                },
                upsert=True)

            if cloud_provider == 'aws':
                utils.add_vpc_route(network)
            elif cloud_provider == 'oracle':
                utils.oracle_add_route(network)
            else:
                logger.error(
                    'Unknown cloud provider type',
                    'server',
                    cloud_provider=settings.app.cloud_provider,
                    network=network,
                )

            self.route_advertisements.add(ra_id)
        except pymongo.errors.DuplicateKeyError:
            return
        except:
            logger.exception(
                'Failed to add vpc route',
                'server',
                server_id=self.server.id,
                instance_id=self.id,
                vpc_region=vpc_region,
                vpc_id=vpc_id,
                network=network,
            )
Пример #3
0
    def reserve_route_advertisement(self, vpc_region, vpc_id, network):
        cloud_provider = settings.app.cloud_provider
        if not cloud_provider:
            return

        ra_id = '%s_%s_%s' % (self.server.id, vpc_id, network)
        timestamp_spec = utils.now() - datetime.timedelta(
            seconds=settings.vpn.route_ping_ttl)

        try:
            self.routes_collection.update_one({
                '_id': ra_id,
                'timestamp': {'$lt': timestamp_spec},
            }, {'$set': {
                'instance_id': self.id,
                'server_id': self.server.id,
                'vpc_region': vpc_region,
                'vpc_id': vpc_id,
                'network': network,
                'timestamp': utils.now(),
            }}, upsert=True)

            if cloud_provider == 'aws':
                utils.add_vpc_route(network)
            elif cloud_provider == 'oracle':
                utils.oracle_add_route(network)
            else:
                logger.error('Unknown cloud provider type', 'server',
                    cloud_provider=settings.app.cloud_provider,
                    network=network,
                )

            if self.vxlan:
                if network == self.server.network:
                    vxlan_net = self.vxlan.vxlan_net
                    if cloud_provider == 'aws':
                        utils.add_vpc_route(vxlan_net)
                    elif cloud_provider == 'oracle':
                        utils.oracle_add_route(vxlan_net)

                elif network == self.server.network6:
                    vxlan_net6 = utils.net4to6x64(
                        settings.vpn.ipv6_prefix,
                        self.vxlan.vxlan_net,
                    )
                    if cloud_provider == 'aws':
                        utils.add_vpc_route(vxlan_net6)
                    elif cloud_provider == 'oracle':
                        utils.oracle_add_route(vxlan_net6)

            self.route_advertisements.add(ra_id)
        except pymongo.errors.DuplicateKeyError:
            return
        except:
            logger.exception('Failed to add vpc route', 'server',
                server_id=self.server.id,
                instance_id=self.id,
                vpc_region=vpc_region,
                vpc_id=vpc_id,
                network=network,
            )