def filter(self, context, pools, zone):
     if len(pools) is 0:
         pools = objects.PoolList()
         pools.append(
             objects.Pool(id=cfg.CONF['service:central'].default_pool_id))
         return pools
     else:
         return pools
    def filter(self, context, pools, zone):
        if len(pools):
            default_pool_id = cfg.CONF['service:central'].default_pool_id
            default_pool = objects.Pool(id=default_pool_id)

            if default_pool in pools:
                pools = objects.PoolList()
                pools.append(default_pool)

        return pools
    def setUp(self):
        super(SchedulerFilterTest, self).setUp()
        self.context = self.get_context()
        self.zone = objects.Zone(name="example.com.",
                                 type="PRIMARY",
                                 email="*****@*****.**")

        attrs = {
            'get_pool.return_value':
            objects.Pool(id="6c346011-e581-429b-a7a2-6cdf0aba91c3")
        }

        mock_storage = Mock(**attrs)
        self.test_filter = self.FILTER(storage=mock_storage)
Example #4
0
    def test_yaml_parsing(self):
        file = os.path.join(resources.path, 'pools_yaml/pools.yaml')
        with open(file, 'r') as stream:
            xpools = yaml.safe_load(stream)

        for xpool in xpools:
            r_pool = adapters.DesignateAdapter.parse('YAML', xpool,
                                                     objects.Pool())
            self.assertEqual('default', r_pool.name)
            self.assertEqual('Default PowerDNS 4 Pool', r_pool.description)
            self.assertEqual(2, len(r_pool.ns_records))
            self.assertEqual(1, r_pool.ns_records[0].priority)
            self.assertEqual(2, r_pool.ns_records[1].priority)
            self.assertEqual('ns1-1.example.org.',
                             r_pool.ns_records[0].hostname)
            self.assertEqual('ns1-2.example.org.',
                             r_pool.ns_records[1].hostname)
            self.assertEqual(1, len(r_pool.targets))
            self.assertEqual('pdns4', r_pool.targets[0].type)
            self.assertEqual('PowerDNS 4 Server',
                             r_pool.targets[0].description)
            self.assertEqual(1, len(r_pool.targets[0].masters))
            self.assertEqual('192.0.2.1', r_pool.targets[0].masters[0].host)
            self.assertEqual(DEFAULT_MDNS_PORT,
                             r_pool.targets[0].masters[0].port)
            self.assertEqual(2, len(r_pool.targets[0].options))

            options = {}
            for option in r_pool.targets[0].options:
                options[option.key] = option.value

            self.assertEqual(options['api_endpoint'], 'http://192.0.2.1:8081')
            self.assertEqual(options['api_token'], 'api_key')

            self.assertEqual(1, len(r_pool.also_notifies))
            self.assertEqual('192.0.2.4', r_pool.also_notifies[0].host)
            self.assertEqual(53, r_pool.also_notifies[0].port)
            self.assertEqual(1, len(r_pool.attributes))
            self.assertEqual('type', r_pool.attributes[0].key)
            self.assertEqual('internal', r_pool.attributes[0].value)
    def test_yaml_parsing(self):

        file = os.path.join(resources.path, 'pools_yaml/pools.yaml')
        with open(file, 'r') as stream:
            xpools = yaml.safe_load(stream)

        for xpool in xpools:
            r_pool = adapters.DesignateAdapter.parse(
                'YAML', xpool, objects.Pool())
            self.assertEqual('default', r_pool.name)
            self.assertEqual('Default PowerDNS Pool', r_pool.description)
            self.assertEqual(2, len(r_pool.ns_records))
            self.assertEqual(1, r_pool.ns_records[0].priority)
            self.assertEqual(2, r_pool.ns_records[1].priority)
            self.assertEqual(
                'ns1-1.example.org.', r_pool.ns_records[0].hostname)
            self.assertEqual(
                'ns1-2.example.org.', r_pool.ns_records[1].hostname)
            self.assertEqual(1, len(r_pool.targets))
            self.assertEqual('powerdns', r_pool.targets[0].type)
            self.assertEqual(
                'PowerDNS Database Cluster', r_pool.targets[0].description)
            self.assertEqual(1, len(r_pool.targets[0].masters))
            self.assertEqual('192.0.2.1', r_pool.targets[0].masters[0].host)
            self.assertEqual(DEFAULT_MDNS_PORT,
                             r_pool.targets[0].masters[0].port)
            self.assertEqual(1, len(r_pool.targets[0].options))
            self.assertEqual('connection', r_pool.targets[0].options[0].key)
            self.assertEqual(
                'mysql+pymysql://designate:[email protected]/designate_pdns?charset=utf8',  # noqa
                r_pool.targets[0].options[0].value)
            self.assertEqual(1, len(r_pool.also_notifies))
            self.assertEqual('192.0.2.4', r_pool.also_notifies[0].host)
            self.assertEqual(53, r_pool.also_notifies[0].port)
            self.assertEqual(1, len(r_pool.attributes))
            self.assertEqual('type', r_pool.attributes[0].key)
            self.assertEqual('internal', r_pool.attributes[0].value)
Example #6
0
    def update(self, file, delete, dry_run):
        print('Updating Pools Configuration')
        print('****************************')

        output_msg = ['']

        with open(file, 'r') as stream:
            xpools = yaml.safe_load(stream)

        if dry_run:
            output_msg.append("The following changes will occur:")
            output_msg.append("*********************************")

        for xpool in xpools:
            try:
                if 'id' in xpool:
                    try:
                        pool = self.central_api.get_pool(
                            self.context, xpool['id'])
                    except Exception:
                        LOG.critical(_LC("Bad ID Supplied for pool %s"),
                                     xpool['name'])
                        continue
                else:
                    pool = self.central_api.find_pool(self.context,
                                                      {"name": xpool['name']})

                LOG.info(_LI('Updating existing pool: %s'), pool)

                # TODO(kiall): Move the below into the pool object

                pool = DesignateAdapter.parse('YAML', xpool, pool)

                if dry_run:
                    output_msg.append("Update Pool: %s" % pool)
                else:
                    pool = self.central_api.update_pool(self.context, pool)

            except exceptions.PoolNotFound:
                pool = DesignateAdapter.parse('YAML', xpool, objects.Pool())
                # pool = objects.Pool.from_dict(xpool)
                if dry_run:
                    output_msg.append("Create Pool: %s" % pool)
                else:
                    LOG.info(_LI('Creating new pool: %s'), pool)
                    self.central_api.create_pool(self.context, pool)
            except messaging.exceptions.MessagingTimeout:
                LOG.critical(
                    _LC("No response recieved from designate-central."
                        " Check it is running, and retry"))

        if delete:
            pools = self.central_api.find_pools(self.context)
            pools_in_db = {pool.name for pool in pools}
            pools_in_yaml = {xpool['name'] for xpool in xpools}

            pools_to_delete = pools_in_db - pools_in_yaml

            for pool in pools_to_delete:
                try:
                    p = self.central_api.find_pool(self.context,
                                                   criterion={'name': pool})

                    if dry_run:
                        output_msg.append("Delete Pool: %s" % p)

                    else:
                        LOG.info(_LI('Deleting %s'), p)
                        self.central_api.delete_pool(self.context, p.id)

                except messaging.exceptions.MessagingTimeout:
                    LOG.critical(
                        _LC("No response recieved from "
                            "designate-central. "
                            "Check it is running, and retry"))

        for line in output_msg:
            print(line)
Example #7
0
    def update(self, file, delete, dry_run):
        self._startup()
        print('Updating Pools Configuration')
        print('****************************')
        output_msg = ['']

        with open(file, 'r') as stream:
            xpools = yaml.safe_load(stream)

        if dry_run:
            output_msg.append("The following changes will occur:")
            output_msg.append("*********************************")

        for xpool in xpools:
            try:
                if 'id' in xpool:
                    try:
                        pool = self.central_api.get_pool(
                            self.context, xpool['id'])
                    except Exception:
                        LOG.critical("Bad ID Supplied for pool %s",
                                     xpool['name'])
                        continue
                else:
                    pool = self.central_api.find_pool(self.context,
                                                      {"name": xpool['name']})

                LOG.info('Updating existing pool: %s', pool)

                # TODO(kiall): Move the below into the pool object

                pool = DesignateAdapter.parse('YAML', xpool, pool)

                # TODO(graham): We should be doing a full validation, but right
                # now there is quirks validating through nested objects.

                for ns_record in pool.ns_records:
                    try:
                        ns_record.validate()
                    except exceptions.InvalidObject as e:
                        LOG.error(e.errors.to_list()[0]['message'])
                        sys.exit(1)

                if dry_run:
                    output_msg.append("Update Pool: %s" % pool)
                else:
                    pool = self.central_api.update_pool(self.context, pool)

            except exceptions.PoolNotFound:
                pool = DesignateAdapter.parse('YAML', xpool, objects.Pool())
                for ns_record in pool.ns_records:
                    try:
                        ns_record.validate()
                    except exceptions.InvalidObject as e:
                        LOG.error(e.errors.to_list()[0]['message'])
                        sys.exit(1)
                if dry_run:
                    output_msg.append("Create Pool: %s" % pool)
                else:
                    LOG.info('Creating new pool: %s', pool)
                    self.central_api.create_pool(self.context, pool)
            except messaging.exceptions.MessagingTimeout:
                LOG.critical("No response received from designate-central. "
                             "Check it is running, and retry")
                sys.exit(1)

        if delete:
            pools = self.central_api.find_pools(self.context)
            pools_in_db = {pool.name for pool in pools}
            pools_in_yaml = {xpool['name'] for xpool in xpools}

            pools_to_delete = pools_in_db - pools_in_yaml

            for pool in pools_to_delete:
                try:
                    p = self.central_api.find_pool(self.context,
                                                   criterion={'name': pool})

                    if dry_run:
                        output_msg.append("Delete Pool: %s" % p)

                    else:
                        LOG.info('Deleting %s', p)
                        self.central_api.delete_pool(self.context, p.id)

                except messaging.exceptions.MessagingTimeout:
                    LOG.critical(
                        "No response received from designate-central. "
                        "Check it is running, and retry")
                    sys.exit(1)

        for line in output_msg:
            print(line)
Example #8
0
def create_test_pool():
    return objects.Pool(
        name='pool1',
        description='desc',
    )