Browse Source
This change enforces the update of the zone masters
for all zones that belongs to a particular pool, using
the pool's defined target(s) masters and forcing a update_zone
call.
This change also, moves the backend base class update_zone
method as an abstract method, allowing to each backend
implementation to create its own update logic. For the
case of bind9 its extended to allow running a rndc modzone
with the new given masters for the zone fixing the behavior
exposed on LP: #1879798.
Fixes-Bug: #1879798
Change-Id: I9dddd4130a0cbb29311eeb52e077e216c8c03f3a
Signed-off-by: Jorge Niedbalski <jorge.niedbalski@canonical.com>
(cherry picked from commit 3756fc51e7
)
changes/10/743610/4
10.0.1
5 changed files with 147 additions and 0 deletions
@ -0,0 +1,5 @@
|
||||
from designate.tests import TestCase |
||||
|
||||
|
||||
class DesignateManageTestCase(TestCase): |
||||
pass |
@ -0,0 +1,65 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may |
||||
# not use this file except in compliance with the License. You may obtain |
||||
# a copy of the License at |
||||
# |
||||
# http://www.apache.org/licenses/LICENSE-2.0 |
||||
# |
||||
# Unless required by applicable law or agreed to in writing, software |
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
||||
# License for the specific language governing permissions and limitations |
||||
# under the License. |
||||
from oslo_log import log as logging |
||||
|
||||
import mock |
||||
from designate.tests.test_manage import DesignateManageTestCase |
||||
from designate.manage.pool import PoolCommands |
||||
from designate.tests import fixtures |
||||
from designate import objects |
||||
|
||||
LOG = logging.getLogger(__name__) |
||||
|
||||
|
||||
class UpdatePoolTestCase(DesignateManageTestCase): |
||||
def setUp(self): |
||||
super(DesignateManageTestCase, self).setUp() |
||||
self.stdlog = fixtures.StandardLogging() |
||||
self.useFixture(self.stdlog) |
||||
|
||||
def hydrate_pool_targets(self, targets): |
||||
pool_targets = objects.PoolTargetList() |
||||
masters = objects.PoolTargetMasterList() |
||||
for target in targets: |
||||
masters.append(target) |
||||
target = objects.PoolTarget(masters=masters) |
||||
target.masters = masters |
||||
pool_targets.append(target) |
||||
return pool_targets |
||||
|
||||
def test_update_pools_zones(self): |
||||
values = dict( |
||||
name='example.com.', |
||||
email='info@example.com', |
||||
type='PRIMARY' |
||||
) |
||||
|
||||
zone = self.central_service.create_zone( |
||||
self.admin_context, zone=objects.Zone.from_dict(values)) |
||||
|
||||
# Ensure the correct NS Records are in place |
||||
pool = self.central_service.get_pool( |
||||
self.admin_context, zone.pool_id) |
||||
|
||||
pool.targets = self.hydrate_pool_targets([objects.PoolTargetMaster( |
||||
pool_target_id=pool.id, |
||||
host="127.0.0.1", |
||||
port="53")]) |
||||
|
||||
command = PoolCommands() |
||||
command.context = self.admin_context |
||||
command.central_api = self.central_service |
||||
|
||||
with mock.patch.object(self.central_service, |
||||
"update_zone") as mock_update_zone: |
||||
command._update_zones(pool) |
||||
mock_update_zone.assert_called_once() |
Loading…
Reference in new issue