示例#1
0
 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(','))
示例#2
0
 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(','))
示例#3
0
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)
示例#4
0
 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')
示例#5
0
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)
示例#7
0
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)))
示例#8
0
    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)
示例#9
0
    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)