def get_create_load_balancer_flow(self, topology, listeners=None):
        """Flow to create a load balancer"""

        f_name = constants.CREATE_LOADBALANCER_FLOW
        lb_create_flow = linear_flow.Flow(f_name)
        lb_create_flow.add(
            lifecycle_tasks.LoadBalancerIDToErrorOnRevertTask(
                requires=constants.LOADBALANCER_ID))

        # Attaching vThunder to LB in database
        if topology == constants.TOPOLOGY_ACTIVE_STANDBY:
            lb_create_flow.add(*self._create_active_standby_topology())
            LOG.info("TOPOLOGY ===" + str(topology))
        elif topology == constants.TOPOLOGY_SINGLE:
            lb_create_flow.add(*self._create_single_topology())
            LOG.info("TOPOLOGY ===" + str(topology))
        else:
            LOG.error("Unknown topology: %s.  Unable to build load balancer.",
                      topology)
            raise exceptions.InvalidTopology(topology=topology)

        # IMP: Now creating vThunder config here
        post_amp_prefix = constants.POST_LB_AMP_ASSOCIATION_SUBFLOW
        lb_create_flow.add(
            self.get_post_lb_vthunder_association_flow(
                post_amp_prefix, topology, mark_active=(not listeners)))
        lb_create_flow.add(
            virtual_server_tasks.CreateVirtualServerTask(
                requires=(constants.LOADBALANCER, a10constants.VTHUNDER)))
        lb_create_flow.add(
            vthunder_tasks.WriteMemory(requires=a10constants.VTHUNDER))
        return lb_create_flow
    def get_create_rack_vthunder_load_balancer_flow(self,
                                                    vthunder_conf,
                                                    topology,
                                                    listeners=None):
        """Creates a linear flow to create rack vthunder

        :return: The linear flow for creating a loadbalancer.
        """
        f_name = constants.CREATE_LOADBALANCER_FLOW
        lb_create_flow = linear_flow.Flow(f_name)

        lb_create_flow.add(
            lifecycle_tasks.LoadBalancerIDToErrorOnRevertTask(
                requires=constants.LOADBALANCER_ID))

        lb_create_flow.add(
            self.vthunder_flows.get_rack_vthunder_for_lb_subflow(
                vthunder_conf=vthunder_conf,
                prefix=constants.ROLE_STANDALONE,
                role=constants.ROLE_STANDALONE))
        post_amp_prefix = constants.POST_LB_AMP_ASSOCIATION_SUBFLOW
        lb_create_flow.add(
            self.get_post_lb_rack_vthunder_association_flow(
                post_amp_prefix, topology, mark_active=(not listeners)))

        lb_create_flow.add(
            virtual_server_tasks.CreateVirtualServerTask(
                requires=(constants.LOADBALANCER, a10constants.VTHUNDER),
                provides=a10constants.STATUS))

        return lb_create_flow
Exemplo n.º 3
0
    def test_CreateVirtualServerTask_execute_create_with_flavor(self):
        flavor = {"virtual_server": {"arp_disable": 1}}

        vthunder = copy.deepcopy(VTHUNDER)
        virtual_server_task = task.CreateVirtualServerTask()
        virtual_server_task.axapi_client = self.client_mock
        virtual_server_task.execute(LOADBALANCER, vthunder, flavor_data=flavor)
        args, kwargs = self.client_mock.slb.virtual_server.create.call_args
        self.assertEqual(kwargs['virtual_server']['arp_disable'], 1)
Exemplo n.º 4
0
    def test_CreateVirtualServerTask_execute_create_with_flavor_regex(
            self, mock_name_expr):
        mock_name_expr.return_value = {"arp_disable": 0}

        vthunder = copy.deepcopy(VTHUNDER)
        virtual_server_task = task.CreateVirtualServerTask()
        virtual_server_task.axapi_client = self.client_mock
        virtual_server_task.execute(LOADBALANCER, vthunder, flavor_data={})
        args, kwargs = self.client_mock.slb.virtual_server.create.call_args
        self.assertEqual(kwargs['arp_disable'], 0)
Exemplo n.º 5
0
    def test_CreateVirtualServerTask_execute_flavor_override_config(self):
        self.conf.config(group=a10constants.VIRTUAL_SERVER_CONFIG_SECTION,
                         arp_disable=False)
        flavor = {"virtual_server": {"arp_disable": 1}}

        vthunder = copy.deepcopy(VTHUNDER)
        virtual_server_task = task.CreateVirtualServerTask()
        virtual_server_task.axapi_client = self.client_mock
        virtual_server_task.execute(LOADBALANCER, vthunder, flavor_data=flavor)
        args, kwargs = self.client_mock.slb.virtual_server.create.call_args
        self.assertEqual(kwargs['virtual_server']['arp_disable'], 1)
    def get_create_rack_vthunder_load_balancer_flow(self,
                                                    vthunder_conf,
                                                    topology,
                                                    listeners=None):
        """Flow to create rack load balancer"""

        f_name = constants.CREATE_LOADBALANCER_FLOW
        lb_create_flow = linear_flow.Flow(f_name)

        lb_create_flow.add(
            lifecycle_tasks.LoadBalancerIDToErrorOnRevertTask(
                requires=constants.LOADBALANCER_ID))
        lb_create_flow.add(
            database_tasks.ReloadLoadBalancer(
                requires=constants.LOADBALANCER_ID,
                provides=constants.LOADBALANCER))
        lb_create_flow.add(
            a10_database_tasks.CheckExistingProjectToThunderMappedEntries(
                inject={a10constants.VTHUNDER_CONFIG: vthunder_conf},
                requires=(constants.LOADBALANCER,
                          a10constants.VTHUNDER_CONFIG),
                provides=a10constants.VTHUNDER_CONFIG))
        lb_create_flow.add(
            a10_database_tasks.CheckExistingThunderToProjectMappedEntries(
                requires=(constants.LOADBALANCER,
                          a10constants.VTHUNDER_CONFIG)))
        lb_create_flow.add(
            self.vthunder_flows.get_rack_vthunder_for_lb_subflow(
                vthunder_conf=a10constants.VTHUNDER_CONFIG,
                prefix=constants.ROLE_STANDALONE,
                role=constants.ROLE_STANDALONE))
        post_amp_prefix = constants.POST_LB_AMP_ASSOCIATION_SUBFLOW
        lb_create_flow.add(
            self.get_post_lb_rack_vthunder_association_flow(
                post_amp_prefix, topology, mark_active=(not listeners)))
        lb_create_flow.add(
            a10_database_tasks.GetFlavorData(
                rebind={a10constants.LB_RESOURCE: constants.LOADBALANCER},
                provides=constants.FLAVOR_DATA))
        lb_create_flow.add(
            nat_pool_tasks.NatPoolCreate(requires=(constants.LOADBALANCER,
                                                   a10constants.VTHUNDER,
                                                   constants.FLAVOR_DATA)))
        lb_create_flow.add(
            virtual_server_tasks.CreateVirtualServerTask(
                requires=(constants.LOADBALANCER, a10constants.VTHUNDER,
                          constants.FLAVOR_DATA),
                provides=a10constants.STATUS))
        lb_create_flow.add(
            vthunder_tasks.WriteMemory(requires=a10constants.VTHUNDER))
        lb_create_flow.add(
            a10_database_tasks.SetThunderUpdatedAt(
                requires=a10constants.VTHUNDER))
        return lb_create_flow
Exemplo n.º 7
0
 def test_CreateVirtualServerTask_revert(self):
     mock_load_balancer = task.CreateVirtualServerTask()
     mock_load_balancer.axapi_client = self.client_mock
     mock_load_balancer.revert(LOADBALANCER, VTHUNDER)
     self.client_mock.slb.virtual_server.delete.assert_called_with(
         LOADBALANCER.id)
Exemplo n.º 8
0
 def test_revert_create_virtual_server_task(self):
     client_mock = mock.Mock()
     mock_load_balancer = task.CreateVirtualServerTask()
     mock_load_balancer.axapi_client = client_mock
     mock_load_balancer.revert(LB, VTHUNDER)
     client_mock.slb.virtual_server.delete.assert_called_with(LB.id)