fix: adding domain causes loss of log_delivery

When adding a new domain to a service that already has
log delivery, the log delivery access url was lost.

Change-Id: Ie75f52465d6db3d7a9b8013f4973dbc38ceb24f3
This commit is contained in:
Isaac Mungai 2016-08-17 12:54:13 -04:00
parent 9e5b4000fa
commit 00f40d9837
2 changed files with 91 additions and 6 deletions

View File

@ -662,6 +662,7 @@ class ServicesController(base.ServicesBase):
elif link['domain'] in common_domains:
# iterate through old access urls and get access url
operator_url = None
old_access_url = None
for old_access_url in old_access_urls:
if old_access_url['domain'] == link['domain']:
operator_url = old_access_url['operator_url']
@ -705,6 +706,16 @@ class ServicesController(base.ServicesBase):
]
})
# keep log_delivery urls intact when both old and new
# services have log_delivery enabled
if (
service_old.log_delivery.enabled is True and
service_updates.log_delivery.enabled is True
):
for old_access_url in old_access_urls:
if 'log_delivery' in old_access_url:
access_urls.append(old_access_url)
dns_details[provider_name] = {'access_urls': access_urls}
return self.responder.updated(dns_details)

View File

@ -22,6 +22,7 @@ import pyrax.exceptions as exc
from poppy.dns.rackspace import driver
from poppy.model.helpers import domain
from poppy.model import log_delivery
from poppy.model import service
from tests.unit import base
@ -558,6 +559,14 @@ class TestServicesUpdate(base.TestCase):
u'provider_url': u'blog.domain.com.global.prod.fastly.net',
u'domain': u'blog.domain.com',
u'operator_url': u'blog.domain.com.cdn80.mycdn.com'
},
{
"log_delivery": [
{
"internalURL": "https://internal.storage.com",
"publicURL": "https://external.storage.com"
}
]
}
]
@ -703,8 +712,9 @@ class TestServicesUpdate(base.TestCase):
access_urls_map[provider_name] = {}
access_urls_list = dns_details[provider_name]['access_urls']
for access_urls in access_urls_list:
access_urls_map[provider_name][access_urls['domain']] = (
access_urls['operator_url'])
if 'operator_url' in access_urls:
access_urls_map[provider_name][access_urls['domain']] = (
access_urls['operator_url'])
for responder in responders:
for provider_name in responder:
@ -756,8 +766,9 @@ class TestServicesUpdate(base.TestCase):
access_urls_map[provider_name] = {}
access_urls_list = dns_details[provider_name]['access_urls']
for access_urls in access_urls_list:
access_urls_map[provider_name][access_urls['domain']] = (
access_urls['operator_url'])
if 'operator_url' in access_urls:
access_urls_map[provider_name][access_urls['domain']] = (
access_urls['operator_url'])
for responder in responders:
for provider_name in responder:
@ -836,8 +847,9 @@ class TestServicesUpdate(base.TestCase):
access_urls_map[provider_name] = {}
access_urls_list = dns_details[provider_name]['access_urls']
for access_urls in access_urls_list:
access_urls_map[provider_name][access_urls['domain']] = (
access_urls['operator_url'])
if 'operator_url' in access_urls:
access_urls_map[provider_name][access_urls['domain']] = (
access_urls['operator_url'])
for responder in responders:
for provider_name in responder:
@ -959,6 +971,68 @@ class TestServicesUpdate(base.TestCase):
self.assertIsNotNone(
access_urls_map[provider_name][domain_new.domain])
def test_update_add_domains_keeps_log_delivery(self):
subdomain = mock.Mock()
subdomain.add_records = mock.Mock()
self.client.find = mock.Mock(return_value=subdomain)
domains_new = [domain.Domain('test.domain.com'),
domain.Domain('blog.domain.com'),
domain.Domain('pictures.domain.com')]
service_new = service.Service(
service_id=self.service_old.service_id,
name='myservice',
domains=domains_new,
origins=[],
flavor_id='standard',
log_delivery=log_delivery.LogDelivery(enabled=True)
)
self.service_old.log_delivery = log_delivery.LogDelivery(enabled=True)
responders = [{
'Fastly': {
'id': str(uuid.uuid4()),
'links': [
{
'domain': u'test.domain.com',
'href': u'test.domain.com.global.prod.fastly.net',
'rel': 'access_url'
},
{
'domain': u'blog.domain.com',
'href': u'blog.domain.com.global.prod.fastly.net',
'rel': 'access_url'
},
{
'domain': u'pictures.domain.com',
'href': u'pictures.domain.com.global.prod.fastly.net',
'rel': 'access_url'
}
]}
}]
dns_details = self.controller.update(self.service_old,
service_new,
responders)
access_urls_map = {}
for provider_name in dns_details:
access_urls_map[provider_name] = {}
access_urls_list = dns_details[provider_name]['access_urls']
for access_urls in access_urls_list:
if 'operator_url' in access_urls:
access_urls_map[provider_name][access_urls['domain']] = (
access_urls['operator_url'])
if 'log_delivery' in access_urls:
for ld_url in access_urls['log_delivery']:
self.assertIsNotNone(ld_url['internalURL'])
self.assertIsNotNone(ld_url['publicURL'])
for responder in responders:
for provider_name in responder:
for domain_new in domains_new:
self.assertIsNotNone(
access_urls_map[provider_name][domain_new.domain])
def test_gather_cname_links_positive(self):
cname_links = self.controller.gather_cname_links(self.service_old)
# TODO(isaacm): Add assertions on the returned object