Esempio n. 1
0
    def run(self, ovn, global_cfg):
        if self.config.pods_vip_ratio == 0:
            return

        ns = Namespace(ovn, 'ns_density_heavy')
        with Context('density_heavy_startup', 1, brief_report=True) as ctx:
            ports = ovn.provision_ports(self.config.n_startup, passive=True)
            ns.add_ports(ports)
            backends = [[ports[i]] for i in range(0, self.config.n_startup,
                                                  self.config.pods_vip_ratio)]
            ovn.provision_vips_to_load_balancers(backends)

        with Context('density_heavy',
                     (self.config.n_pods - self.config.n_startup) /
                     self.config.pods_vip_ratio) as ctx:
            for _ in ctx:
                ports = ovn.provision_ports(self.config.pods_vip_ratio)
                ns.add_ports(ports)
                ovn.provision_vips_to_load_balancers([[ports[0]]])
                ovn.ping_ports(ports)

        if not global_cfg.cleanup:
            return
        with Context('density_heavy_cleanup', brief_report=True) as ctx:
            ovn.unprovision_vips()
            ns.unprovision()
Esempio n. 2
0
    def run(self, ovn, global_cfg):
        ns = Namespace(ovn, 'ns_density_light')
        with Context('density_light_startup', 1, brief_report=True) as ctx:
            ports = ovn.provision_ports(self.config.n_startup, passive=True)
            ns.add_ports(ports)

        n_iterations = self.config.n_pods - self.config.n_startup
        with Context('density_light', n_iterations, test=self) as ctx:
            for i in ctx:
                ports = ovn.provision_ports(1)
                ns.add_ports(ports[0:1])
                ovn.ping_ports(ports)

        if not global_cfg.cleanup:
            return
        with Context('density_light_cleanup', brief_report=True) as ctx:
            ns.unprovision()
Esempio n. 3
0
    def init(self, ovn):
        with Context(f'{self.name}_startup', brief_report=True) as _:
            self.ports = ovn.provision_ports(self.config.pods_ns_ratio *
                                             self.config.n_ns)
            for i in range(self.config.pods_ns_ratio * self.config.n_ns):
                self.all_labels.setdefault(i % self.config.n_labels,
                                           []).append(self.ports[i])

            for i in range(self.config.n_ns):
                ns = Namespace(ovn, f'NS_{self.name}_{i}')
                ns.add_ports(self.ports[i * self.config.pods_ns_ratio:(i + 1) *
                                        self.config.pods_ns_ratio])
                ns.default_deny()
                self.all_ns.append(ns)
Esempio n. 4
0
    def run(self, ovn, global_cfg):
        all_ns = []
        with Context('cluster_density_startup', brief_report=True) as ctx:
            # create 4 legacy pods per iteration.
            ports = ovn.provision_ports(DENSITY_N_PODS * self.config.n_startup,
                                        passive=True)
            for i in range(self.config.n_startup):
                ns = Namespace(ovn, f'NS_density_{i}')
                ns.add_ports(ports[DENSITY_N_PODS * i:DENSITY_N_PODS *
                                   (i + 1)])
                ns.create_load_balancer()
                ovn.provision_lb(ns.load_balancer)
                ns.provision_vips_to_load_balancers([
                    ports[i * DENSITY_N_PODS:i * DENSITY_N_PODS + 2],
                    [ports[i * DENSITY_N_PODS + 2]],
                    [ports[i * DENSITY_N_PODS + 3]]
                ])
                all_ns.append(ns)

        with Context('cluster_density',
                     (self.config.n_runs - self.config.n_startup) //
                     self.batch_ratio,
                     test=self) as ctx:
            for i in ctx:
                ns = Namespace(ovn, f'NS_density_{self.config.n_startup + i}')
                ns.create_load_balancer()
                ovn.provision_lb(ns.load_balancer)
                all_ns.append(ns)

                iter_ports = ovn.provision_ports(self.config.batch)
                for j in range(self.batch_ratio):
                    # create 6 short lived "build" pods
                    build_ports = iter_ports[j * DENSITY_N_TOT_PODS:j *
                                             DENSITY_N_TOT_PODS +
                                             DENSITY_N_BUILD_PODS]
                    ns.add_ports(build_ports)
                    ovn.ping_ports(build_ports)
                    # create 4 legacy pods
                    ports = iter_ports[j * DENSITY_N_TOT_PODS +
                                       DENSITY_N_BUILD_PODS:(j + 1) *
                                       DENSITY_N_TOT_PODS]
                    ns.add_ports(ports)
                    # add VIPs and backends to namespace load-balancer
                    ns.provision_vips_to_load_balancers(
                        [ports[0:2], ports[2:3], ports[3:4]])

                    ovn.ping_ports(ports)
                    ns.unprovision_ports(build_ports)

        if not global_cfg.cleanup:
            return
        with Context('cluster_density_cleanup', brief_report=True) as ctx:
            for ns in all_ns:
                ns.unprovision()
Esempio n. 5
0
    def run(self, ovn, global_cfg):
        """
        Run a multitenant network policy test, for example:

        for i in range(n_namespaces):
            create address set AS_ns_i
            create port group PG_ns_i
            if i < 200:
                n_pods = 1 # 200 pods
            elif i < 480:
                n_pods = 5 # 1400 pods
            elif i < 495:
                n_pods = 20 # 300 pods
            else:
                n_pods = 100 # 500 pods
            create n_pods
            add n_pods to AS_ns_i
            add n_pods to PG_ns_i
            create acls:

        to-lport, ip.src == $AS_ns_i && outport == @PG_ns_i,
                  allow-related
        to-lport, ip.src == {ip1, ip2, ip3} && outport == @PG_ns_i,
                  allow-related
        to-lport, ip.src == {ip1, ..., ip20} && outport == @PG_ns_i,
                  allow-related
        """
        external_ips1 = [
            netaddr.IPAddress('42.42.42.1') + i
            for i in range(self.config.n_external_ips1)
        ]
        external_ips2 = [
            netaddr.IPAddress('43.43.43.1') + i
            for i in range(self.config.n_external_ips2)
        ]

        all_ns = []
        with Context('netpol_multitenant', self.config.n_namespaces,
                     test=self) as ctx:
            for i in ctx:
                # Get the number of pods from the "highest" range that
                # includes i.
                ranges = self.config.ranges
                n_ports = next((r.n_pods for r in ranges if i >= r.start), 1)
                ns = Namespace(ovn, f'ns_netpol_multitenant_{i}')
                for _ in range(n_ports):
                    worker = ovn.select_worker_for_port()
                    for p in worker.provision_ports(ovn, 1):
                        ns.add_ports([p])
                ns.default_deny()
                ns.allow_within_namespace()
                ns.check_enforcing_internal()
                ns.allow_from_external(external_ips1)
                ns.allow_from_external(external_ips2, include_ext_gw=True)
                ns.check_enforcing_external()
                all_ns.append(ns)

        if not global_cfg.cleanup:
            return
        with Context('netpol_multitenant_cleanup', brief_report=True) as ctx:
            for ns in all_ns:
                ns.unprovision()
Esempio n. 6
0
    def run(self, ovn, global_cfg):
        all_ns = []

        with Context('netpol_cross_ns_startup', brief_report=True) as ctx:
            ports = ovn.provision_ports(self.config.pods_ns_ratio *
                                        self.config.n_ns)
            for i in range(self.config.n_ns):
                ns = Namespace(ovn, f'NS_netpol_cross_ns_startup_{i}')
                ns.add_ports(ports[i * self.config.pods_ns_ratio:(i + 1) *
                                   self.config.pods_ns_ratio])
                ns.default_deny()
                all_ns.append(ns)

        with Context('netpol_cross_ns', self.config.n_ns, test=self) as ctx:
            for i in ctx:
                ns = all_ns[i]
                ext_ns = all_ns[(i + 1) % self.config.n_ns]
                ns.allow_cross_namespace(ext_ns)
                ns.check_enforcing_cross_ns(ext_ns)

        if not global_cfg.cleanup:
            return
        with Context('netpol_cross_ns_cleanup', brief_report=True) as ctx:
            for ns in all_ns:
                ns.unprovision()
Esempio n. 7
0
    def run(self, ovn, global_cfg):
        all_ns = []
        with Context('cluster_density_startup', 1, brief_report=True) as ctx:
            # create 4 legacy pods per iteration.
            ports = ovn.provision_ports(DENSITY_N_PODS * self.config.n_startup,
                                        passive=True)
            for i in range(self.config.n_startup):
                ns = Namespace(ovn, f'NS_{i}')
                ns.add_ports(ports[DENSITY_N_PODS * i:DENSITY_N_PODS *
                                   (i + 1)])
                all_ns.append(ns)

            backends = []
            backends.extend([
                ports[i * DENSITY_N_PODS:i * DENSITY_N_PODS + 1]
                for i in range(self.config.n_startup)
            ])
            backends.extend([[ports[i * DENSITY_N_PODS + 2]]
                             for i in range(self.config.n_startup)])
            backends.extend([[ports[i * DENSITY_N_PODS + 3]]
                             for i in range(self.config.n_startup)])
            ovn.provision_vips_to_load_balancers(backends)

        with Context('cluster_density',
                     self.config.n_runs - self.config.n_startup) as ctx:
            for i in ctx:
                ns = Namespace(ovn, 'NS_{}'.format(self.config.n_startup + i))
                all_ns.append(ns)

                # create 6 short lived "build" pods
                build_ports = ovn.provision_ports(DENSITY_N_BUILD_PODS)
                ns.add_ports(build_ports)
                ovn.ping_ports(build_ports)
                # create 4 legacy pods
                ports = ovn.provision_ports(DENSITY_N_PODS)
                ns.add_ports(ports)
                # add VIPs and backends to cluster load-balancer
                ovn.provision_vips_to_load_balancers(
                    [ports[0:1], ports[2:3], ports[3:4]])
                ovn.ping_ports(ports)
                ovn.unprovision_ports(build_ports)

        if not global_cfg.cleanup:
            return
        with Context('cluster_density_cleanup', brief_report=True) as ctx:
            for ns in all_ns:
                ns.unprovision()