Skip to content
This repository was archived by the owner on Feb 15, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions poppy/distributed_task/taskflow/task/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@


def create_log_delivery_container(project_id, auth_token):
"""If log delivery is enabled create a container in the object storage.

:param unicode project_id: project id of the user
:param unicode auth_token: auth token generated by keystone

:return: log responders
:rtype: list
"""
# log delivery enabled, create log delivery container for the user
conf.register_opts(LOG_DELIVERY_OPTIONS, group=LOG_DELIVERY_GROUP)
conf.register_opts(DEFAULT_OPTIONS, group=DEFAULT_GROUP)
Expand Down Expand Up @@ -148,13 +156,34 @@ def create_log_delivery_container(project_id, auth_token):
class ContextUpdateTask(task.Task):

def execute(self, context_dict):
"""Stores the context of each flow.

The following are all made available by executing this task:
- request_id
- user_identity
- auth_token
- user
- tenant
- service_id

:param dict context_dict: dict of context
"""
context = context_utils.RequestContext.from_dict(context_dict)
context.update_store()


class UpdateProviderDetailTask(task.Task):

def execute(self, provider_details_dict, project_id, service_id):
"""Update service details to storage

Storage gets updated with the service deatils and if log delivery
is enabled logs get pushed to the object storage container.

:param dict provider_details_dict: dict of the provider detail
:param unicode project_id: project id of the user
:param unicode service_id: uuid of the service
"""
provider_details_dict = dict([
(k, provider_details.ProviderDetail.init_from_dict(detail))
for k, detail
Expand Down Expand Up @@ -201,6 +230,12 @@ class UpdateProviderDetailIfNotEmptyTask(task.Task):
default_provides = "provider_details_updated"

def execute(self, changed_provider_details_dict, project_id, service_id):
"""Update the provider details in service details.

:param dict changed_provider_details_dict: dict of odict of provider details
:param unicode project_id: project id of the user
:param unicode service_id: uuid of service
"""
if changed_provider_details_dict != {}:
provider_details_dict = dict([
(k, provider_details.ProviderDetail.init_from_dict(detail))
Expand All @@ -224,6 +259,7 @@ def execute(self, changed_provider_details_dict, project_id, service_id):
'{0}'.format(changed_provider_details_dict))

def revert(self, *args, **kwargs):

try:
if getattr(self, 'storage_controller') \
and self.storage_controller._driver.session:
Expand All @@ -237,6 +273,19 @@ class UpdateProviderDetailErrorTask(task.Task):
default_provides = "changed_provider_details_dict"

def execute(self, responders, service_id, provider_details, hard):
"""Update the provider details of service.

Updates the provider details for a service
and includes any error information.

:param list[dict] responders: list of responder
:param unicode service_id: uuid of service
:param unicode provider_details: json object of provider
:param unicode hard: parameter passed to force delete

:return: dict of changed_provider_details_dict
:rtype: dict
"""
provider_details = json.loads(provider_details)
for provider in provider_details:
# NOTE(tonytan4ever): if the purge_url is None, it means to purge
Expand Down
45 changes: 45 additions & 0 deletions poppy/distributed_task/taskflow/task/create_service_tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,15 @@ class CreateProviderServicesTask(task.Task):
default_provides = "responders"

def execute(self, providers_list_json, project_id, service_id):
"""Create the responders from provider list.

:param unicode providers_list_json: json provided by the user/opium
:param unicode project_id: project id of the user
:param unicode service_id: service id is the uuid generated

:return: returns responders
:rtype: list[dict]
"""
service_controller, self.storage_controller = \
memoized_controllers.task_controllers('poppy', 'storage')

Expand Down Expand Up @@ -104,6 +113,19 @@ class CreateServiceDNSMappingTask(task.Task):
default_provides = "dns_responder"

def execute(self, responders, retry_sleep_time, project_id, service_id):
"""Creates the mapping between dns service and provider url.

The resulting domain is the cname created at rackspace dns which
used by customer for their by vanity domain.

:param list[dict] responders: list of responder
:param int retry_sleep_time: sleep time
:param unicode project_id: project id of the user
:param unicode service_id: uuid

:return: dict of dns_responder
:rtype: dict
"""
service_controller, dns = \
memoized_controllers.task_controllers('poppy', 'dns')

Expand Down Expand Up @@ -134,6 +156,13 @@ def execute(self, responders, retry_sleep_time, project_id, service_id):

def revert(self, responders, retry_sleep_time,
project_id, service_id, **kwargs):
"""Reverts the create dnsmapping task is failed.

:param list responders: list of responder
:param int retry_sleep_time: sleep time
:param unicode project_id: project id of user
:param unicode service_id: service id of the service(generated uuid)
"""

if self.name in kwargs['flow_failures'].keys():
retries = conf[DNS_GROUP].retries
Expand Down Expand Up @@ -208,6 +237,14 @@ class CreateLogDeliveryContainerTask(task.Task):
default_provides = "log_responders"

def execute(self, project_id, auth_token, service_id):
"""If enabled it creates a object storage container to store logs.

:param unicode project_id: project id of user
:param unicode auth_token: auth_token from keystone
:param unicode service_id: the uuid generated
:return: Log responders
:rtype: list or list[dict]
"""
service_controller, self.storage_controller = \
memoized_controllers.task_controllers('poppy', 'storage')

Expand Down Expand Up @@ -246,6 +283,14 @@ class GatherProviderDetailsTask(task.Task):
default_provides = "provider_details_dict"

def execute(self, responders, dns_responder, log_responders):
"""Gathers the status of create service, create dns and log delivery.

:param list[dict] responders:
:param dict dns_responder:
:param list[dict] log_responders: list of log_responder
:return: dict of provider_details_dict
:rtype: dict[str, collections.OrderedDict]
"""
provider_details_dict = {}
for responder in responders:
for provider_name in responder:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,16 @@ class CreateProviderSSLCertificateTask(task.Task):

def execute(self, providers_list_json, cert_obj_json, enqueue=True,
https_upgrade=False):
"""Create responder from provider list of certificate creation.

:param unicode providers_list_json: list of providers(list converted to json)
:param unicode cert_obj_json: dict of certificate(dict converted to json)
:param bool enqueue: allows to push the queue directly to zookeeper
:param bool https_upgrade: upgrade from http to https

:return: list of responders
:rtype: list[dict]
"""
service_controller = memoized_controllers.task_controllers('poppy')

# call provider create_ssl_certificate function
Expand All @@ -58,6 +68,12 @@ def execute(self, providers_list_json, cert_obj_json, enqueue=True,
class SendNotificationTask(task.Task):

def execute(self, project_id, responders, upgrade=False):
"""Send mail to users.

:param unicode project_id: project id of the user
:param list[dict] responders: list of responder
:param bool upgrade: upgrade from http to https
"""
service_controller = memoized_controllers.task_controllers('poppy')

notification_content = ""
Expand Down Expand Up @@ -86,6 +102,12 @@ def execute(self, project_id, responders, upgrade=False):
class UpdateCertInfoTask(task.Task):

def execute(self, project_id, cert_obj_json, responders):
"""Update certificate information to cassandra.

:param unicode project_id: project id of the user
:param unicode cert_obj_json: dict of certificate(dict converted to json)
:param list[dict] responders: list of responder
"""
service_controller, self.ssl_certificate_manager = \
memoized_controllers.task_controllers('poppy', 'ssl_certificate')
self.storage_controller = self.ssl_certificate_manager.storage
Expand All @@ -110,6 +132,13 @@ class CreateStorageSSLCertificateTask(task.Task):
"""This task is meant to be used in san rerun flow."""

def execute(self, project_id, cert_obj_json):
"""Create certificate if san rerun executed.

When san rerun executed, create the certificate information at cassandra.

:param unicode project_id: project id of the user
:param unicode cert_obj_json: dict of certificate(dict converted to json)
"""
cert_obj = ssl_certificate.load_from_json(json.loads(cert_obj_json))

service_controller, self.ssl_certificate_manager = \
Expand Down
63 changes: 63 additions & 0 deletions poppy/distributed_task/taskflow/task/delete_service_tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,16 @@ class DeleteProviderServicesTask(task.Task):
default_provides = "responders"

def execute(self, provider_details, project_id):
"""Create responder from provider details.

Initiated request to akamai to remove associated service.

:param unicode provider_details: details of the provider
:param unicode project_id: project_id os the user

:return: list of responder
:rtype: list[dict]
"""
service_controller = memoized_controllers.task_controllers('poppy')
provider_details = json.loads(provider_details)

Expand All @@ -76,6 +86,20 @@ class DeleteServiceDNSMappingTask(task.Task):

def execute(self, provider_details, retry_sleep_time,
responders, project_id, service_id):
"""Deletes the mapping between dns service and provider url.

The result is assiciation of cname created at rackspace dns
which used by customer for their by vanity domain will be removed.

:param unicode provider_details: json of providers
:param int retry_sleep_time: sleep time
:param list[dict] responders: list of responder
:param unicode project_id: project id of the user
:param unicode service_id: uuid of the service

:return: dict of dns_responder
:rtype: dict
"""
service_controller, dns = \
memoized_controllers.task_controllers('poppy', 'dns')

Expand Down Expand Up @@ -115,6 +139,19 @@ def execute(self, provider_details, retry_sleep_time,

def revert(self, provider_details, retry_sleep_time,
responders, project_id, service_id, **kwargs):
"""If failed to delete association dns mapping
failed revert the reestablish dns mapping task.

CNAME created at rackspace dns which used by customer for
their by vanity domain failed to delete. Will reestablish
the dns mapping.

:param dict provider_details: dict of providers
:param int retry_sleep_time: sleep time
:param list[dict] responders: list of responder
:param unicode project_id: project id of the user
:param unicode service_id: uuid of the service
"""
if self.name in kwargs['flow_failures'].keys():
retries = conf[DNS_GROUP].retries
current_progress = (1.0 / retries)
Expand Down Expand Up @@ -167,6 +204,15 @@ class GatherProviderDetailsTask(task.Task):
default_provides = "provider_details_dict"

def execute(self, responders, dns_responder, provider_details):
"""Gathers the status of service, dns.

:param list[dict] responders: list of responder
:param dict dns_responder: dict of dns_responder
:param unicode provider_details: json of providers

:return: dict of provider details
:rtype: dict
"""
provider_details = json.loads(provider_details)
for provider in provider_details:
provider_details[provider] = (
Expand Down Expand Up @@ -204,11 +250,20 @@ def execute(self, responders, dns_responder, provider_details):
class DeleteStorageServiceTask(task.Task):

def execute(self, project_id, service_id):
"""Delete service details from cassandra.

Delete the service details from cassandra and remove all entries
about the service

:param unicode project_id: project id of the user
:param unicode service_id: uuid of service
"""
service_controller, self.storage_controller = \
memoized_controllers.task_controllers('poppy', 'storage')
self.storage_controller.delete_service(project_id, service_id)

def revert(self, *args, **kwargs):
"""If failed to delete service from cassandra restore back."""
try:
if getattr(self, 'storage_controller') \
and self.storage_controller._driver.session:
Expand All @@ -222,6 +277,14 @@ class DeleteCertificatesForService(task.Task):
"""Delete SAN and SNI certificates for a service."""

def execute(self, project_id, service_id):
"""Submit the task to delete the certificate.

Delete the details of certificate from cassandra and remove
the entry of the certificate.

:param unicode project_id: project id of the user
:param unicode service_id: uuid of service
"""
service_controller, self.storage_controller = \
memoized_controllers.task_controllers('poppy', 'storage')

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,17 @@ class DeleteProviderSSLCertificateTask(task.Task):

def execute(self, providers_list, domain_name, cert_type,
project_id, flavor_id):
"""Build responder from provider list of certificate details.

:param list providers_list: list of providers
:param unicode domain_name: domain name of the user
:param unicode cert_type: type of the certificate
:param unicode project_id: project id of the user
:param unicode flavor_id: flavor of the service

:return: list of responder
:rtype: list[dict]
"""
service_controller = memoized_controllers.task_controllers('poppy')

cert_obj = ssl_certificate.SSLCertificate(flavor_id, domain_name,
Expand All @@ -54,6 +65,13 @@ def execute(self, providers_list, domain_name, cert_type,
class SendNotificationTask(task.Task):

def execute(self, project_id, responders, domain_name, cert_type):
"""Send mail to user for certificate deletion.

:param unicode project_id: project id of the user
:param list[dict] responders: list of responder
:param unicode domain_name: domain name of the user
:param unicode cert_type: certificate type of the user
"""
service_controller = memoized_controllers.task_controllers('poppy')

notification_content = (
Expand Down Expand Up @@ -85,6 +103,12 @@ def execute(self, project_id, responders, domain_name, cert_type):
class DeleteStorageSSLCertificateTask(task.Task):

def execute(self, project_id, domain_name, cert_type):
"""Delete certificate details from cassandra.

:param unicode project_id: project id of the user
:param unicode domain_name: domain name of the user
:param unicode cert_type: certificate type of the user
"""
service_controller, self.ssl_certificate_manager = \
memoized_controllers.task_controllers('poppy', 'ssl_certificate')
self.storage_controller = self.ssl_certificate_manager.storage
Expand Down
Loading