def configure(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group( BootProperties) if auto_config.progress_event_log.service_enabled is True: logger.debug('Bootstrapping Progress Event Log Writer Service') validate_no_service_with_capability_exists( service_register, ProgressEventLogWriterCapability, 'ProgressEventLogWriter', 'bootstrap.progress_event_log.service_enabled') service_register.add_service( ServiceRegistration( ProgressEventLogWriterService, serializer_service=ProgressEventLogSerializerCapability)) else: logger.debug( 'Disabled: bootstrapped Progress Event Log Writer Service') if auto_config.progress_event_log.serializer_service_enabled is True: logger.debug('Bootstrapping Progress Event Log Serializer Service') validate_no_service_with_capability_exists( service_register, ProgressEventLogSerializerCapability, 'ProgressEventLogSerializer', 'bootstrap.progress_event_log.serializer_service_enabled') service_register.add_service( ServiceRegistration(YAMLProgressEventLogSerializer)) else: logger.debug( 'Disabled: bootstrapped Progress Event Log Serializer Service')
def test_validate_no_service_with_capability_exists(self): mock_service_register = MagicMock() mock_service_register.get_service_offering_capability.return_value = None validate_no_service_with_capability_exists(mock_service_register, DummyCapability, 'Dummy', 'a.b.c') mock_service_register.get_service_offering_capability.assert_called_once_with( DummyCapability)
def __configure_scripts_file_manager(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group(BootProperties) if auto_config.resource_driver.driver_files_manager_service_enabled is True: logger.debug('Bootstrapping Driver File Manager Service') validate_no_service_with_capability_exists(service_register, DriverFilesManagerCapability, 'Driver File Manager Service', 'bootstrap.resource_driver.driver_files_manager_service_enabled') service_register.add_service(ServiceRegistration(DriverFilesManagerService, resource_driver_config=ResourceDriverProperties)) else: logger.debug('Disabled: bootstrapped Driver File Manager Service')
def __configure_api_service(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group(BootProperties) if auto_config.resource_driver.api_service_enabled is True: logger.debug('Bootstrapping Resource Driver API Service') # Check if a user has enabled the auto configuration of the Lifecycle API service but has also added their own validate_no_service_with_capability_exists(service_register, ResourceDriverApiCapability, 'Resource Driver API', 'bootstrap.resource_driver.api_service_enabled') service_register.add_service(ServiceRegistration(ResourceDriverApiService, service=ResourceDriverServiceCapability)) else: logger.debug('Disabled: bootstrapped Resource Driver API Service')
def __configure_health_service(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group(BootProperties) if auto_config.management.health.service_enabled is True: logger.debug('Bootstrapping Health Checker Service') # Check if a user has enabled the auto configuration of the HealthChecker service but has also added their own validate_no_service_with_capability_exists(service_register, HealthChecker, 'HealthChecker', 'bootstrap.management.health.service_enabled') service_register.add_service(ServiceRegistration(HealthCheckerService)) else: logger.debug('Disabled: bootstrapped Health Checker Service')
def __configure_api_service(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group(BootProperties) if auto_config.management.api_service_enabled is True: logger.debug('Bootstrapping Management API Service') # Check if a user has enabled the auto configuration of the Management API service but has also added their own validate_no_service_with_capability_exists(service_register, ManagementApi, 'Management API (ManagementApi)', 'bootstrap.management.api_service_enabled') service_register.add_service(ServiceRegistration(ManagementApiService, service=Management)) else: logger.debug('Disabled: bootstrapped Management API Service')
def __configure_monitoring(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group(BootProperties) if auto_config.resource_driver.lifecycle_monitoring_service_enabled is True: logger.debug('Bootstrapping Resource Driver Lifecycle Monitoring Service') validate_no_service_with_capability_exists(service_register, LifecycleExecutionMonitoringCapability, 'Resource Driver Lifecycle Execution Monitoring Service', 'bootstrap.resource_driver.lifecycle_monitoring_service_enabled') service_register.add_service(ServiceRegistration(LifecycleExecutionMonitoringService, job_queue_service=JobQueueCapability, lifecycle_messaging_service=LifecycleMessagingCapability, handler=ResourceDriverHandlerCapability)) else: logger.debug('Disabled: bootstrapped Resource Driver Lifecycle Monitoring Service')
def __configure_service(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group(BootProperties) if auto_config.management.service_enabled is True: logger.debug('Bootstrapping Management Service') # Check if a user has enabled the auto configuration of the Management service but has also added their own validate_no_service_with_capability_exists(service_register, Management, 'Management', 'bootstrap.management.service_enabled') required_capabilities = { 'health_checker': HealthChecker } service_register.add_service(ServiceRegistration(ManagementService, **required_capabilities)) else: logger.debug('Disabled: bootstrapped Management Service')
def test_validate_no_service_with_capability_exists_throws_error_when_exists( self): mock_service_register = MagicMock() mock_service_register.get_service_offering_capability.return_value = MagicMock( ) with self.assertRaises(ValueError) as context: validate_no_service_with_capability_exists(mock_service_register, DummyCapability, 'Dummy', 'a.b.c') self.assertEqual( str(context.exception), 'An existing service has been registered to serve the Dummy capability but a.b.c has not been disabled' )
def __configure_postal(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group( BootProperties) if auto_config.messaging.postal_enabled is True: logger.debug('Bootstrapping Messaging Postal Service') validate_no_service_with_capability_exists( service_register, PostalCapability, 'Postal Service', 'bootstrap.messaging.postal_enabled') service_register.add_service( ServiceRegistration(PostalService, delivery_service=DeliveryCapability)) else: logger.debug('Disabled: bootstrapped Messaging Postal Service')
def configure(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group(BootProperties) if auto_config.templating.service_enabled is True: logger.debug('Bootstrapping Templating Service') validate_no_service_with_capability_exists(service_register, TemplatingCapability, 'Templating', 'bootstrap.templating.service_enabled') service_register.add_service(ServiceRegistration(Jinja2TemplatingService)) else: logger.debug('Disabled: bootstrapped Templating Service') if auto_config.templating.resource_context_service_enabled is True: logger.debug('Bootstrapping Resource Template Context Service') validate_no_service_with_capability_exists(service_register, ResourceTemplateContextCapability, 'Resource Template Context', 'bootstrap.templating.resource_context_service_enabled') service_register.add_service(ServiceRegistration(ResourceTemplateContextService)) else: logger.debug('Disabled: bootstrapped Resource Template Context Service')
def __configure_messaging(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group(BootProperties) if auto_config.resource_driver.lifecycle_messaging_service_enabled is True: logger.debug('Bootstrapping Resource Driver Lifecycle Messaging Service') validate_no_service_with_capability_exists(service_register, LifecycleMessagingCapability, 'Resource Driver Lifecycle Messaging Service', 'bootstrap.resource_driver.lifecycle_messaging_service_enabled') messaging_config = configuration.property_groups.get_property_group(MessagingProperties) if messaging_config.connection_address is None: raise ValueError('messaging.connection_address must be set when bootstrap.resource_driver.lifecycle_messaging_service_enabled') if messaging_config.topics.lifecycle_execution_events is None: raise ValueError('messaging.topics.lifecycle_execution_events must be set when bootstrap.resource_driver.lifecycle_messaging_service_enabled') TopicCreator().create_topic_if_needed(messaging_config, messaging_config.topics.lifecycle_execution_events) service_register.add_service(ServiceRegistration(LifecycleMessagingService, postal_service=PostalCapability, topics_configuration=TopicsProperties)) else: logger.debug('Disabled: bootstrapped Resource Driver Lifecycle Messaging Service')
def __configure_inbox(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group( BootProperties) if auto_config.messaging.inbox_enabled is True: logger.debug('Bootstrapping Messaging Inbox Service') messaging_config = configuration.property_groups.get_property_group( MessagingProperties) if messaging_config.connection_address is None: raise ValueError( 'messaging.connection_address must be set when bootstrap.messaging.inbox_enabled is True' ) validate_no_service_with_capability_exists( service_register, InboxCapability, 'Inbox Service', 'bootstrap.messaging.inbox_enabled') service_register.add_service( ServiceRegistration(KafkaInboxService, messaging_properties=MessagingProperties)) else: logger.debug('Disabled: bootstrapped Messaging Inbox Service')
def __configure_service(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group(BootProperties) if auto_config.resource_driver.service_enabled is True: logger.debug('Bootstrapping Resource Driver Service') # Check if a user has enabled the auto configuration of the Resource Driver service but has also added their own validate_no_service_with_capability_exists(service_register, ResourceDriverServiceCapability, 'Resource Driver Service', 'bootstrap.resource_driver.service_enabled') resource_driver_config = configuration.property_groups.get_property_group(ResourceDriverProperties) required_capabilities = {} if resource_driver_config.async_messaging_enabled is True: required_capabilities['lifecycle_monitor_service'] = LifecycleExecutionMonitoringCapability required_capabilities['handler'] = ResourceDriverHandlerCapability required_capabilities['resource_driver_config'] = ResourceDriverProperties required_capabilities['driver_files_manager'] = DriverFilesManagerCapability if resource_driver_config.lifecycle_request_queue.enabled is True: required_capabilities['lifecycle_request_queue'] = LifecycleRequestQueueCapability service_register.add_service(ServiceRegistration(ResourceDriverService, **required_capabilities)) else: logger.debug('Disabled: bootstrapped Resource Driver Service')
def configure(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group(BootProperties) if auto_config.job_queue.service_enabled is True: logger.debug('Bootstrapping Job Queue Service') validate_no_service_with_capability_exists(service_register, JobQueueCapability, 'Job Queue', 'bootstrap.job_queue.service_enabled') messaging_config = configuration.property_groups.get_property_group(MessagingProperties) if messaging_config.connection_address is None: raise ValueError('messaging.connection_address must be set when bootstrap.job_queue.service_enabled is True') if messaging_config.topics.job_queue is None: raise ValueError('messaging.topics.job_queue must be set when bootstrap.job_queue.service_enabled is True') if messaging_config.topics.job_queue.name is None: # Job Queue topic should be unique per VIM/Lifecycle driver cluster (not per instance) so we default the value at runtime to include the app name safe_topic_name = re.sub('[^A-Za-z0-9-_ ]+', '', configuration.app_name) # Remove any concurrent spaces safe_topic_name = ' '.join(safe_topic_name.split()) # Replace spaces with underscore safe_topic_name = safe_topic_name.replace(' ', '_') messaging_config.topics.job_queue.name = '{0}_job_queue'.format(safe_topic_name) TopicCreator().create_topic_if_needed(messaging_config, messaging_config.topics.job_queue) service_register.add_service(ServiceRegistration(MessagingJobQueueService, job_queue_config=JobQueueProperties, postal_service=PostalCapability, inbox_service=InboxCapability, topics_config=TopicsProperties, messaging_config=MessagingProperties)) else: logger.debug('Disabled: bootstrapped Job Queue Service')
def configure(self, configuration, service_register): auto_config = configuration.property_groups.get_property_group( BootProperties) if auto_config.request_queue.enabled is True: logger.debug('Bootstrapping Request Queue Service') messaging_config = configuration.property_groups.get_property_group( MessagingProperties) resource_driver_config = configuration.property_groups.get_property_group( ResourceDriverProperties) self.configure_topics( configuration, messaging_config, resource_driver_config.lifecycle_request_queue) if auto_config.resource_driver.api_enabled is True: validate_no_service_with_capability_exists( service_register, LifecycleRequestQueueCapability, 'Lifecycle Request Queue', 'bootstrap.request_queue.enabled') service_register.add_service( ServiceRegistration( KafkaLifecycleConsumerFactory, resource_driver_config.lifecycle_request_queue, messaging_properties=MessagingProperties)) service_register.add_service( ServiceRegistration( KafkaLifecycleRequestQueueService, lifecycle_messaging_service= LifecycleMessagingCapability, messaging_properties=MessagingProperties, resource_driver_config=ResourceDriverProperties, postal_service=PostalCapability, driver_files_manager=DriverFilesManagerCapability, lifecycle_consumer_factory= LifecycleConsumerFactoryCapability)) else: logger.debug('Disabled: bootstrapped Request Queue Service')