Example #1
0
    def create(self, context, vip):
        with a10.A10WriteStatusContext(self, context, vip) as c:
            status = c.client.slb.UP
            if not vip['admin_state_up']:
                status = c.client.slb.DOWN

            pool_name = self._pool_name(context, vip['pool_id'])

            p = PersistHandler(c, context, vip, self._meta_name(vip))
            p.create()

            templates = self.meta(vip, "template", {})

            if 'client_ssl' in templates:
                args = {'client_ssl_template': templates['client_ssl']}
                try:
                    c.client.slb.template.client_ssl.create(
                        '', '', '',
                        axapi_args=args)
                except acos_errors.Exists:
                    pass

            if 'server_ssl' in templates:
                args = {'server_ssl_template': templates['server_ssl']}
                try:
                    c.client.slb.template.server_ssl.create(
                        '', '', '',
                        axapi_args=args)
                except acos_errors.Exists:
                    pass

            vport_list = [{}]
            try:
                vip_meta = self.meta(vip, 'virtual_server', {})
                a10_common._set_vrid_parameter(vip_meta, c.device_cfg)
                vip_args = {
                    'virtual_server': vip_meta
                }
                vport_list = vip_args['virtual_server'].pop('vport_list', [{}])
                c.client.slb.virtual_server.create(
                    self._meta_name(vip),
                    vip['address'],
                    status,
                    axapi_args=vip_args)
            except acos_errors.Exists:
                pass

            LOG.debug("VPORT_LIST = %s", vport_list)
            try:
                if vport_list[0]:
                    a10_common._set_auto_parameter(vport_list[0], c.device_cfg)
                    a10_common._set_ipinip_parameter(vport_list[0], c.device_cfg)
                    vport_args = {'vport': vport_list[0]}
                else:
                    vport_meta = self.meta(vip, 'vport', {})
                    a10_common._set_auto_parameter(vport_meta, c.device_cfg)
                    a10_common._set_ipinip_parameter(vport_meta, c.device_cfg)
                    vport_args = {'vport': vport_meta}

                c.client.slb.virtual_server.vport.create(
                    self._meta_name(vip),
                    self._meta_name(vip) + '_VPORT',
                    protocol=a10_os.vip_protocols(c, vip['protocol']),
                    port=vip['protocol_port'],
                    service_group_name=pool_name,
                    s_pers_name=p.s_persistence(),
                    c_pers_name=p.c_persistence(),
                    status=status,
                    axapi_args=vport_args)
            except acos_errors.Exists:
                pass

            i = 1
            for vport in vport_list[1:]:
                i += 1
                try:
                    a10_common._set_auto_parameter(vport, c.device_cfg)
                    a10_common._set_ipinip_parameter(vport, c.device_cfg)

                    vport_args = {'vport': vport}

                    c.client.slb.virtual_server.vport.create(
                        self._meta_name(vip),
                        self._meta_name(vip) + '_VPORT' + str(i),
                        protocol=a10_os.vip_protocols(c, vip['protocol']),
                        port=vip['protocol_port'],
                        service_group_name=pool_name,
                        s_pers_name=p.s_persistence(),
                        c_pers_name=p.c_persistence(),
                        status=status,
                        axapi_args=vport_args)
                except acos_errors.Exists:
                    pass

            self.hooks.after_vip_create(c, context, vip)
    def _set(self, set_method, c, context, listener):
        if self.barbican_client is None:
            self.barbican_client = certwrapper.CertManagerWrapper()

        status = c.client.slb.UP
        if not listener.admin_state_up:
            status = c.client.slb.DOWN

        templates = self.meta(listener, "template", {})

        server_args = {}
        cert_data = dict()

        if listener.protocol and listener.protocol == lb_const.PROTOCOL_TERMINATED_HTTPS:
            if self._set_terminated_https_values(listener, c, cert_data):
                templates["client_ssl"] = {}
                template_name = str(cert_data.get('template_name', ''))
                key_passphrase = str(cert_data.get('cert_pass', ''))
                cert_filename = str(cert_data.get('cert_filename', ''))
                key_filename = str(cert_data.get('key_filename', ''))
            else:
                LOG.error("Could not created terminated HTTPS endpoint.")

        if 'client_ssl' in templates:
            try:
                c.client.slb.template.client_ssl.create(
                    template_name,
                    cert=cert_filename,
                    key=key_filename)
            except acos_errors.Exists:
                c.client.slb.template.client_ssl.update(template_name, cert=cert_filename,
                                                        key=key_filename, passphrase=key_passphrase)

        if 'server_ssl' in templates:
            server_args = {'server_ssl_template': templates['server_ssl']}
            try:
                c.client.slb.template.server_ssl.create(
                    template_name,
                    cert_filename,
                    key_filename,
                    axapi_args=server_args)
            except acos_errors.Exists:
                c.client.slb.template.server_ssl.update(template_name,
                                                        cert_filename,
                                                        key_filename,
                                                        axapi_args=server_args)

        try:
            pool_name = self._pool_name(context, listener.default_pool)
        except Exception:
            pool_name = None
        persistence = handler_persist.PersistHandler(
            c, context, listener.default_pool)
        vport_meta = self.meta(listener, 'port', {})
        a10_common._set_auto_parameter(vport_meta, c.device_cfg)
        vport_args = {'port': vport_meta}

        try:
            set_method(
                self.a10_driver.loadbalancer._name(listener.loadbalancer),
                self._meta_name(listener),
                protocol=a10_osmap.vip_protocols(c, listener.protocol),
                port=listener.protocol_port,
                service_group_name=pool_name,
                s_pers_name=persistence.s_persistence(),
                c_pers_name=persistence.c_persistence(),
                status=status,
                axapi_args=vport_args)
        except acos_errors.Exists:
            pass
    def _set(self, set_method, c, context, listener):
        if self.barbican_client is None:
            self.barbican_client = certwrapper.CertManagerWrapper()

        status = c.client.slb.UP
        if not listener.admin_state_up:
            status = c.client.slb.DOWN

        templates = self.meta(listener, "template", {})

        server_args = {}
        cert_data = dict()

        if listener.protocol and listener.protocol == lb_const.PROTOCOL_TERMINATED_HTTPS:
            if self._set_terminated_https_values(listener, c, cert_data):
                templates["client_ssl"] = {}
                template_name = str(cert_data.get('template_name', ''))
                key_passphrase = str(cert_data.get('cert_pass', ''))
                cert_filename = str(cert_data.get('cert_filename', ''))
                key_filename = str(cert_data.get('key_filename', ''))
            else:
                LOG.error("Could not created terminated HTTPS endpoint.")

        if 'client_ssl' in templates:
            try:
                c.client.slb.template.client_ssl.create(template_name,
                                                        cert=cert_filename,
                                                        key=key_filename)
            except acos_errors.Exists:
                c.client.slb.template.client_ssl.update(
                    template_name,
                    cert=cert_filename,
                    key=key_filename,
                    passphrase=key_passphrase)

        if 'server_ssl' in templates:
            server_args = {'server_ssl_template': templates['server_ssl']}
            try:
                c.client.slb.template.server_ssl.create(template_name,
                                                        cert_filename,
                                                        key_filename,
                                                        axapi_args=server_args)
            except acos_errors.Exists:
                c.client.slb.template.server_ssl.update(template_name,
                                                        cert_filename,
                                                        key_filename,
                                                        axapi_args=server_args)

        try:
            pool_name = self._pool_name(context,
                                        pool_id=listener.default_pool_id)
        except Exception:
            pool_name = None
        persistence = handler_persist.PersistHandler(c, context,
                                                     listener.default_pool)

        vport_meta = self.meta(listener.loadbalancer, 'vip_port', {})
        a10_common._set_auto_parameter(vport_meta, c.device_cfg)
        a10_common._set_ipinip_parameter(vport_meta, c.device_cfg)
        vport_args = {'port': vport_meta}

        try:
            set_method(self.a10_driver.loadbalancer._name(
                listener.loadbalancer),
                       self._meta_name(listener),
                       protocol=a10_osmap.vip_protocols(c, listener.protocol),
                       port=listener.protocol_port,
                       service_group_name=pool_name,
                       s_pers_name=persistence.s_persistence(),
                       c_pers_name=persistence.c_persistence(),
                       status=status,
                       axapi_args=vport_args)
        except acos_errors.Exists:
            pass