def test_0001_create_extension(self): extension = APIExtension(self.client) extension.add_extension(self.config['vcd']['extension_name'], self.config['vcd']['extension_namespace'], self.config['vcd']['routing_key'], self.config['vcd']['exchange'], self.config['vcd']['patterns'].split(','))
def test_0001_create_extension(self): extension = APIExtension(self.client) extension.add_extension(self.config['vcd']['extension_name'], self.config['vcd']['extension_namespace'], self.config['vcd']['routing_key'], self.config['vcd']['exchange'], self.config['vcd']['patterns'].split(','))
def create(ctx, name, namespace, routing_key, exchange, patterns): try: restore_session(ctx) ext = APIExtension(ctx.obj['client']) ext.add_extension(name, namespace, routing_key, exchange, patterns.split(',')) stdout('Extension registered.', ctx) except Exception as e: import traceback traceback.print_exc() stderr(e, ctx)
def initialize_on_vcloud(self): """Check and/register the extension on vCloud. """ self.log('info', 'Checking the initialization status of extension in vCloud.') if not ( self.conf('vcloud.api_extension.namespace') and self.conf('vcloud.api_extension.exchange') and self.conf('vcloud.api_extension.routing_key') ): self.log('warning', 'Missing items in configuration to make the initialization check-up. Ignoring.') return client = login_as_system_admin() ext_manager = APIExtension(client) try: current_ext_on_vcd = ext_manager.get_extension_info( self.name, namespace=self.conf('vcloud.api_extension.namespace')) self.log('info', 'Extension is already registered on vCloud') except MissingRecordException: self.log('warning', "This extension is not (yet) declared on vCloud.") current_ext_on_vcd = None except MultipleRecordsException: self.log('error', "Multiple extensions found with same name and namespace") sys.exit(-1) # Force a fresh redeploy of the full extension (Warning: be carrefull, ID will change !) if current_ext_on_vcd and self.conf('vcloud.api_extension.force_redeploy', False): ext_manager.delete_extension( self.name, namespace=self.conf('vcloud.api_extension.namespace')) self.log('info', 'Extension is unregistered on vCloud') current_ext_on_vcd = None # Only update an existing extension (Warning: does not update the API filters/patterns!) if current_ext_on_vcd and self.conf('vcloud.api_extension.auto_update', False): current_ext_on_vcd = ext_manager.update_extension( self.name, namespace=self.conf('vcloud.api_extension.namespace'), routing_key=self.conf('vcloud.api_extension.routing_key'), exchange=self.conf('vcloud.api_extension.exchange')) self.log('info', 'Extension is updated on vCloud') # Register a new extension if not current_ext_on_vcd: ext_manager.add_extension( self.name, namespace=self.conf('vcloud.api_extension.namespace'), routing_key=self.conf('vcloud.api_extension.routing_key'), exchange=self.conf('vcloud.api_extension.exchange'), patterns=self.conf('vcloud.api_extension.api_filters')) self.log('info', 'Extension is registered on vCloud') # Ensure to enable it ext_manager.enable_extension(self.name, namespace=self.conf('vcloud.api_extension.namespace'), enabled=True) self.log('info', 'Extension is enabled on vCloud')
def _register_cse(client, routing_key, exchange, msg_update_callback=utils.NullPrinter()): """Register or update CSE on vCD. :param pyvcloud.vcd.client.Client client: :param pyvcloud.vcd.client.Client client: :param str routing_key: :param str exchange: :param utils.ConsoleMessagePrinter msg_update_callback: Callback object. """ ext = APIExtension(client) patterns = [ f'/api/{server_constants.CSE_SERVICE_NAME}', f'/api/{server_constants.CSE_SERVICE_NAME}/.*', f'/api/{server_constants.CSE_SERVICE_NAME}/.*/.*', f'/api/{server_constants.PKS_SERVICE_NAME}', f'/api/{server_constants.PKS_SERVICE_NAME}/.*', f'/api/{server_constants.PKS_SERVICE_NAME}/.*/.*' ] cse_info = None try: cse_info = ext.get_extension_info( server_constants.CSE_SERVICE_NAME, namespace=server_constants.CSE_SERVICE_NAMESPACE) # noqa: E501 except MissingRecordException: pass if cse_info is None: ext.add_extension( server_constants.CSE_SERVICE_NAME, server_constants.CSE_SERVICE_NAMESPACE, routing_key, # noqa: E501 exchange, patterns) msg = f"Registered {server_constants.CSE_SERVICE_NAME} as an API extension in vCD" # noqa: E501 else: ext.update_extension( server_constants.CSE_SERVICE_NAME, namespace=server_constants.CSE_SERVICE_NAMESPACE, # noqa: E501 routing_key=routing_key, exchange=exchange) msg = f"Updated {server_constants.CSE_SERVICE_NAME} API Extension in vCD" # noqa: E501 msg_update_callback.general(msg) INSTALL_LOGGER.info(msg)
def register_cse(client, amqp_routing_key, exchange_name): """Registers CSE to vCD. :param pyvcloud.vcd.client.Client client: :param str amqp_routing_key: :param str exchange_name: AMQP exchange name. """ ext = APIExtension(client) patterns = [ f'/api/{CSE_NAME}', f'/api/{CSE_NAME}/.*', f'/api/{CSE_NAME}/.*/.*' ] ext.add_extension(CSE_NAME, CSE_NAMESPACE, amqp_routing_key, exchange_name, patterns) msg = f"Registered {CSE_NAME} as an API extension in vCD" click.secho(msg, fg='green') LOGGER.info(msg)
def register_extension(ctx, client, config, ext_install): if ext_install == 'skip': click.secho('Extension configuration: skipped') return ext = APIExtension(client) try: name = 'cse' cse_ext = ext.get_extension_info(name) click.secho('Find extension \'%s\', enabled=%s: %s' % (name, cse_ext['enabled'], bool_to_msg(True))) except Exception: if ext_install == 'prompt': if not click.confirm('Do you want to register CSE as an API ' 'extension in vCD?'): click.secho('CSE not registered') return exchange = 'vcdext' patterns = '/api/cse,/api/cse/.*,/api/cse/.*/.*' ext.add_extension(name, name, name, exchange, patterns.split(',')) click.secho('Registered extension \'%s\': %s' % (name, bool_to_msg(True)))
def test_0000_setup(self): """Setup an api extension service required by the other tests. Register two services as per the configuration stated above. Tests APIExtension.add_extension() method. This test passes if service hrefs are not None. """ logger = Environment.get_default_logger() TestApiExtension._client = Environment.get_sys_admin_client() api_extension = APIExtension(TestApiExtension._client) # Create two services with same name but diffent namespaces logger.debug('Registering service (name:' + TestApiExtension._service_name + ', namespace:' + TestApiExtension._service1_namespace + ').') registered_extension = api_extension.add_extension( name=TestApiExtension._service_name, namespace=TestApiExtension._service1_namespace, routing_key=TestApiExtension._service_routing_key, exchange=TestApiExtension._service_exchange, patterns=TestApiExtension._service_patterns) TestApiExtension._service1_href = registered_extension.get('href') self.assertIsNotNone(TestApiExtension._service1_href) logger.debug('Registering service (name:' + TestApiExtension._service_name + ', namespace:' + TestApiExtension._service2_namespace + ').') registered_extension = api_extension.add_extension( name=TestApiExtension._service_name, namespace=TestApiExtension._service2_namespace, routing_key=TestApiExtension._service_routing_key, exchange=TestApiExtension._service_exchange, patterns=TestApiExtension._service_patterns) TestApiExtension._service2_href = registered_extension.get('href') self.assertIsNotNone(TestApiExtension._service2_href)
def test_0000_setup(self): """Setup an api extension service required by the other tests. Register two services as per the configuration stated above. Tests APIExtension.add_extension() method. This test passes if service hrefs are not None. """ logger = Environment.get_default_logger() TestApiExtension._client = Environment.get_sys_admin_client() api_extension = APIExtension(TestApiExtension._client) # Create two services with same name but diffent namespaces logger.debug('Registering service (name:' + TestApiExtension._service_name + ', namespace:' + TestApiExtension._service1_namespace + ').') registered_extension = api_extension.add_extension( name=TestApiExtension._service_name, namespace=TestApiExtension._service1_namespace, routing_key=TestApiExtension._service_routing_key, exchange=TestApiExtension._service_exchange, patterns=TestApiExtension._service_patterns) TestApiExtension._service1_href = registered_extension.get('href') self.assertIsNotNone(TestApiExtension._service1_href) logger.debug('Registering service (name:' + TestApiExtension._service_name + ', namespace:' + TestApiExtension._service2_namespace + ').') registered_extension = api_extension.add_extension( name=TestApiExtension._service_name, namespace=TestApiExtension._service2_namespace, routing_key=TestApiExtension._service_routing_key, exchange=TestApiExtension._service_exchange, patterns=TestApiExtension._service_patterns) TestApiExtension._service2_href = registered_extension.get('href') self.assertIsNotNone(TestApiExtension._service2_href)
def _register_cse(client, routing_key, exchange, msg_update_callback=None): """Register or update CSE on vCD. :param pyvcloud.vcd.client.Client client: :param pyvcloud.vcd.client.Client client: :param str routing_key: :param str exchange: :param utils.ConsoleMessagePrinter msg_update_callback: Callback object that writes messages onto console. """ ext = APIExtension(client) patterns = [ f'/api/{CSE_SERVICE_NAME}', f'/api/{CSE_SERVICE_NAME}/.*', f'/api/{CSE_SERVICE_NAME}/.*/.*' ] cse_info = None try: cse_info = ext.get_extension_info(CSE_SERVICE_NAME, namespace=CSE_SERVICE_NAMESPACE) except MissingRecordException: pass if cse_info is None: ext.add_extension(CSE_SERVICE_NAME, CSE_SERVICE_NAMESPACE, routing_key, exchange, patterns) msg = f"Registered {CSE_SERVICE_NAME} as an API extension in vCD" else: ext.update_extension(CSE_SERVICE_NAME, namespace=CSE_SERVICE_NAMESPACE, routing_key=routing_key, exchange=exchange) msg = f"Updated {CSE_SERVICE_NAME} API Extension in vCD" if msg_update_callback: msg_update_callback.general(msg) LOGGER.info(msg)