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)
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)
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)
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)
def create_test_pool(): return objects.Pool( name='pool1', description='desc', )