def create(label, plugin_name, options, description=None): """ Creates a new destination, that can then be used as a destination for certificates. :param label: Destination common name :param description: :rtype : Destination :return: New destination """ # remove any sub-plugin objects before try to save the json options for option in options: if 'plugin' in option['type']: del option['value']['plugin_object'] destination = Destination(label=label, options=options, plugin_name=plugin_name, description=description) current_app.logger.info("Destination: %s created", label) # add the destination as source, to avoid new destinations that are not in source, as long as an AWS destination if add_aws_destination_to_sources(destination): current_app.logger.info("Source: %s created", label) return database.create(destination)
def update(destination_id, label, plugin_name, options, description): """ Updates an existing destination. :param destination_id: Lemur assigned ID :param label: Destination common name :param plugin_name: :param options: :param description: :rtype: Destination :return: """ destination = get(destination_id) destination.label = label destination.plugin_name = plugin_name # remove any sub-plugin objects before try to save the json options for option in options: if "plugin" in option["type"]: del option["value"]["plugin_object"] destination.options = options destination.description = description log_service.audit_log("update_destination", destination.label, "Updating destination") updated = database.update(destination) # add the destination as source, to avoid new destinations that are not in source, as long as an AWS destination if add_aws_destination_to_sources(updated): current_app.logger.info("Source: %s created", label) return updated
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 reveals the name of the suitable source-plugin. We rely on account numbers to avoid duplicates. """ function = f"{__name__}.{sys._getframe().f_code.co_name}" task_id = None if celery.current_task: task_id = celery.current_task.request.id log_data = { "function": function, "message": "syncing AWS destinations and sources", "task_id": task_id, } if task_id and is_task_active(function, task_id, None): log_data["message"] = "Skipping task: Task is already active" current_app.logger.debug(log_data) return current_app.logger.debug(log_data) for dst in destinations_service.get_all(): if add_aws_destination_to_sources(dst): log_data["message"] = "new source added" log_data["source"] = dst.label current_app.logger.debug(log_data) log_data["message"] = "completed Syncing AWS destinations and sources" current_app.logger.debug(log_data) metrics.send(f"{function}.success", "counter", 1) return log_data
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 reveals the name of the suitable source-plugin. We rely on account numbers to avoid duplicates. """ current_app.logger.debug("Syncing AWS destinations and sources") for dst in destinations_service.get_all(): if add_aws_destination_to_sources(dst): current_app.logger.debug("Source: %s added", dst.label) current_app.logger.debug("Completed Syncing AWS destinations and sources")
def sync_source_destination(labels): """ This command will sync destination and source, to make sure eligible destinations are also present as source. Destination eligibility is determined on the sync_as_source attribute of the plugin. The destination sync_as_source_name provides the name of the suitable source-plugin. We use (account number, IAM path) tuple uniqueness to avoid duplicate sources. Lemur now does this automatically during destination create and update, so this command is primarily useful for migrating legacy destinations. Set "-d all" to sync all destinations. """ destinations = validate_destinations(labels) for destination in destinations: if source_service.add_aws_destination_to_sources(destination): info_text = f"[+] New source added: {destination.label}.\n" print(info_text) current_app.logger.warning(info_text)
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 reveals the name of the suitable source-plugin. We rely on account numbers to avoid duplicates. """ current_app.logger.debug("Syncing AWS destinations and sources") function = f"{__name__}.{sys._getframe().f_code.co_name}" for dst in destinations_service.get_all(): if add_aws_destination_to_sources(dst): current_app.logger.debug("Source: %s added", dst.label) current_app.logger.debug("Completed Syncing AWS destinations and sources") red.set(f'{function}.last_success', int(time.time())) metrics.send(f"{function}.success", 'counter', 1)