avoiding hard-coded plugin names

This commit is contained in:
Hossein Shafagh 2019-04-11 13:29:37 -07:00
parent f185df4f1e
commit 266c83367d
1 changed files with 21 additions and 3 deletions

View File

@ -18,7 +18,7 @@ from lemur.authorities.service import get as get_authority
from lemur.factory import create_app
from lemur.notifications.messaging import send_pending_failure_notification
from lemur.pending_certificates import service as pending_certificate_service
from lemur.plugins.base import plugins
from lemur.plugins.base import plugins, IPlugin
from lemur.sources.cli import clean, sync, validate_sources
from lemur.destinations import service as destinations_service
from lemur.sources import service as sources_service
@ -265,13 +265,31 @@ def sync_source_destination():
"""
This celery task will sync destination and source, to make sure all new destinations are also present as source.
Some destinations do not qualify as sources, and hence should be excluded from being added as sources
We identify qualified destinations based on the sync_as_source attributed of the plugin.
The destination sync_as_source_name reviels the name of the suitable source-plugin.
We rely on account numbers to avoid duplicates.
"""
current_app.logger.debug("Syncing source and destination")
# a set of all accounts numbers available as sources
src_accounts = set()
sources = validate_sources("all")
for src in sources:
src_accounts.add(IPlugin.get_option('accountNumber' ,src.options))
for dst in destinations_service.get_all():
destination_plugin = plugins.get(dst.plugin_name)
if destination_plugin.sync_as_source and not sources_service.get_by_label(dst.label):
account_number = IPlugin.get_option('accountNumber', src.options)
if destination_plugin.sync_as_source and (account_number not in src_accounts):
src_options = copy.deepcopy(plugins.get(destination_plugin.sync_as_source_name).options)
for o in src_options:
if o.get('name') == 'accountNumber':
o.update({'value': account_number})
sources_service.create(label=dst.label,
plugin_name=destination_plugin.sync_as_source_name,
options=dst.options,
options=src_options,
description=dst.description)
current_app.logger.info("Source: %s added", dst.label)