Пример #1
0
    def update_vip(self, new_vip):
        vs_ipaddress = new_vip['address']
        vs_port = new_vip['protocol_port']
        vs_name = new_vip['name']
        vs_server_port = self._adx_server_port(vs_ipaddress, vs_port, vs_name)

        new_session_persistence = new_vip.get('session_persistence')

        LOG.debug('Update Session Persistence')
        if new_session_persistence is None:
            try:
                (self.slb_service.disableStickyOnVirtualServerPort(
                    vs_server_port))
            except suds.WebFault as e:
                raise adx_exception.ConfigError(msg=e.message)
        else:
            type = new_vip['session_persistence']['type']
            if type == 'SOURCE_IP':
                try:
                    (self.slb_service.enableStickyOnVirtualServerPort(
                        vs_server_port))
                except suds.WebFault as e:
                    raise adx_exception.ConfigError(msg=e.message)
            else:
                error_message = ('Session Persistence of type %s '
                                 'not supported') % (type)
                LOG.error(error_message)
                raise adx_exception.UnsupportedFeature(msg=error_message)
Пример #2
0
    def update_health_monitor(self, new_hm, old_hm):
        monitor_type = new_hm['type']

        # Create Port Policy
        # if the Monitor Type is TCP / HTTP / HTTPS
        if monitor_type in ['HTTP', 'HTTPS', 'TCP']:
            self._create_update_port_policy(new_hm, False)
        elif monitor_type == 'PING':
            m = 'Health Monitor of type PING not supported'
            LOG.error(m)
            raise adx_exception.UnsupportedFeature(msg=m)
Пример #3
0
    def create_health_monitor(self, healthmonitor):
        name = healthmonitor['id']
        monitor_type = healthmonitor['type']

        # Create Port Policy
        # if the Monitor Type is TCP / HTTP / HTTPS
        if monitor_type in ['HTTP', 'HTTPS', 'TCP']:
            if not self._does_port_policy_exist(healthmonitor):
                self._create_update_port_policy(healthmonitor)
            else:
                LOG.debug('Port Policy %s already exists on the device', name)
        elif monitor_type == 'PING':
            m = 'Health Monitor of type PING not supported'
            LOG.error(m)
            raise adx_exception.UnsupportedFeature(msg=m)
Пример #4
0
    def delete_health_monitor(self, healthmonitor):
        name = healthmonitor['id']
        monitor_type = healthmonitor['type']

        if monitor_type in ['HTTP', 'HTTPS', 'TCP']:
            if not self._does_port_policy_exist(healthmonitor):
                LOG.debug('Health Monitor %s does not '
                          'exist on the device', name)
                return

            if not self._is_port_policy_in_use(name):
                try:
                    (self.slb_service.deletePortPolicy(name))
                except suds.WebFault as e:
                    raise adx_exception.ConfigError(msg=e.message)
        elif monitor_type == 'PING':
            m = 'Delete of PING Monitor not supported'
            LOG.error(m)
            raise adx_exception.UnsupportedFeature(msg=m)
Пример #5
0
    def set_predictor_on_virtual_server(self, vip):
        try:
            server = self._adx_server(vip['address'], vip['name'])
            lb_method = vip['lb_method']

            predictor_method_configuration = (
                self.slb_factory.create('PredictorMethodConfiguration'))
            predictor = ADX_PREDICTOR_MAP.get(lb_method)
            if predictor:
                predictor_method_configuration.predictor = predictor
            else:
                error_message = ('Load Balancing Method/Predictor %s '
                                 'not supported') % (lb_method)
                LOG.error(error_message)
                raise adx_exception.UnsupportedFeature(msg=error_message)

            (self.slb_service.setPredictorOnVirtualServer(
                server, predictor_method_configuration))
        except suds.WebFault as e:
            raise adx_exception.ConfigError(msg=e.message)
Пример #6
0
    def create_virtual_server_port(self, vip):
        vs_name = vip['name']
        vs_ip_address = vip['address']
        vs_port = vip['protocol_port']
        admin_state_up = vip.get('admin_state_up', 'DISABLED')
        l4_protocol = vip.get('l4_protocol')

        try:
            server_port = self._adx_server_port(vs_ip_address, vs_port,
                                                vs_name)
            vs_port_seq = (self.slb_factory.create(
                'ArrayOfVirtualServerPortConfigurationSequence'))
            vs_port_config = (
                self.slb_factory.create('VirtualServerPortConfiguration'))

            vs_port_config.virtualServer = server_port.srvr
            vs_port_config.port = server_port.port
            vs_port_config.adminState = admin_state_up

            if l4_protocol == 'TCP':
                vs_port_config.tcpOnly = True
            else:
                vs_port_config.udpOnly = True

            session_persistence = vip.get('session_persistence')
            if session_persistence:
                sp_type = session_persistence['type']
                if sp_type == 'SOURCE_IP':
                    vs_port_config.enableSticky = True
                else:
                    error_message = ('Session Persistence of type %s '
                                     'not supported') % (sp_type)
                    LOG.error(error_message)
                    raise adx_exception.UnsupportedFeature(msg=error_message)

            (vs_port_seq.VirtualServerPortConfigurationSequence.append(
                vs_port_config))
            (self.slb_service.createVirtualServerPortWithConfiguration(
                vs_port_seq))
        except suds.WebFault as e:
            raise adx_exception.ConfigError(msg=e.message)