示例#1
0
    def _connect_network_to_router(self, router, network):
        LOG.info("Connect network %s to router %s" %
                 (network["name"], router["name"]))

        ovn_nbctl = self.controller_client("ovn-nbctl")
        install_method = self.install_method
        ovn_nbctl.set_sandbox("controller-sandbox", install_method)
        ovn_nbctl.enable_batch_mode(False)

        base_mac = [i[:2] for i in self.task["uuid"].split('-')]
        base_mac[0] = str(hex(int(base_mac[0], 16) & 254))
        base_mac[3:] = ['00'] * 3
        mac = utils.get_random_mac(base_mac)

        lrouter_port = ovn_nbctl.lrouter_port_add(router["name"],
                                                  network["name"], mac,
                                                  str(network["cidr"]))
        ovn_nbctl.flush()

        switch_router_port = "rp-" + network["name"]
        lport = ovn_nbctl.lswitch_port_add(network["name"], switch_router_port)
        ovn_nbctl.db_set('Logical_Switch_Port', switch_router_port,
                         ('options', {
                             "router-port": network["name"]
                         }), ('type', 'router'), ('address', 'router'))
        ovn_nbctl.flush()
示例#2
0
    def _connect_network_to_router(self, router, network):
        LOG.info("Connect network %s to router %s" % (network["name"], router["name"]))

        ovn_nbctl = self._get_ovn_controller(self.install_method)
        ovn_nbctl.enable_batch_mode(False)


        base_mac = [i[:2] for i in self.task["uuid"].split('-')]
        base_mac[0] = str(hex(int(base_mac[0], 16) & 254))
        base_mac[3:] = ['00']*3
        mac = utils.get_random_mac(base_mac)

        gw = self._get_gw_ip(network["cidr"])
        lrouter_port_ip = '{}/{}'.format(gw, network["cidr"].prefixlen)
        lrouter_port = ovn_nbctl.lrouter_port_add(router["name"], network["name"], mac,
                                                  lrouter_port_ip)
        ovn_nbctl.flush()


        switch_router_port = "rp-" + network["name"]
        lport = ovn_nbctl.lswitch_port_add(network["name"], switch_router_port)
        ovn_nbctl.db_set('Logical_Switch_Port', switch_router_port,
                         ('options', {"router-port":network["name"]}),
                         ('type', 'router'),
                         ('address', 'router'))
        ovn_nbctl.flush()
示例#3
0
    def _create_lports(self,
                       lswitch,
                       lport_create_args=[],
                       lport_amount=1,
                       lport_ip_shift=1):
        LOG.info("create %d lports on lswitch %s" % \
                            (lport_amount, lswitch["name"]))

        self.RESOURCE_NAME_FORMAT = "lport_XXXXXX_XXXXXX"

        batch = lport_create_args.get("batch", lport_amount)
        port_security = lport_create_args.get("port_security", True)

        LOG.info("Create lports method: %s" % self.install_method)
        install_method = self.install_method

        network_cidr = lswitch.get("cidr", None)
        ip_addrs = None
        if network_cidr:
            end_ip = network_cidr.ip + lport_amount + lport_ip_shift
            if not end_ip in network_cidr:
                message = _(
                    "Network %s's size is not big enough for %d lports.")
                raise exceptions.InvalidConfigException(
                    message % (network_cidr, lport_amount))

            ip_addrs = netaddr.iter_iprange(network_cidr.ip + lport_ip_shift,
                                            network_cidr.last)

        ovn_nbctl = self.controller_client("ovn-nbctl")
        ovn_nbctl.set_sandbox("controller-sandbox", install_method)
        ovn_nbctl.enable_batch_mode()

        base_mac = [i[:2] for i in self.task["uuid"].split('-')]
        base_mac[0] = str(hex(int(base_mac[0], 16) & 254))
        base_mac[3:] = ['00'] * 3

        flush_count = batch
        lports = []
        for i in range(lport_amount):
            name = self.generate_random_name()
            lport = ovn_nbctl.lswitch_port_add(lswitch["name"], name)

            ip = str(ip_addrs.next()) if ip_addrs else ""
            mac = utils.get_random_mac(base_mac)

            ovn_nbctl.lport_set_addresses(name, [mac, ip])
            if port_security:
                ovn_nbctl.lport_set_port_security(name, mac)

            lports.append(lport)

            flush_count -= 1
            if flush_count < 1:
                ovn_nbctl.flush()
                flush_count = batch

        ovn_nbctl.flush()  # ensure all commands be run
        ovn_nbctl.enable_batch_mode(False)
        return lports
示例#4
0
    def _connect_network_to_router(self, router, network):
        LOG.info("Connect network %s to router %s" % (network["name"], router["name"]))

        ovn_nbctl = self.controller_client("ovn-nbctl")
        install_method = self.install_method
        ovn_nbctl.set_sandbox("controller-sandbox", install_method)
        ovn_nbctl.enable_batch_mode(False)


        base_mac = [i[:2] for i in self.task["uuid"].split('-')]
        base_mac[0] = str(hex(int(base_mac[0], 16) & 254))
        base_mac[3:] = ['00']*3
        mac = utils.get_random_mac(base_mac)

        lrouter_port = ovn_nbctl.lrouter_port_add(router["name"], network["name"], mac,
                                                  str(network["cidr"]))
        ovn_nbctl.flush()


        switch_router_port = "rp-" + network["name"]
        lport = ovn_nbctl.lswitch_port_add(network["name"], switch_router_port)
        ovn_nbctl.db_set('Logical_Switch_Port', switch_router_port,
                         ('options', {"router-port":network["name"]}),
                         ('type', 'router'),
                         ('address', 'router'))
        ovn_nbctl.flush()
示例#5
0
    def _create_lports(self, lswitch, lport_create_args = [], lport_amount=1):
        LOG.info("create %d lports on lswitch %s" % \
                            (lport_amount, lswitch["name"]))

        self.RESOURCE_NAME_FORMAT = "lport_XXXXXX_XXXXXX"

        batch = lport_create_args.get("batch", lport_amount)

        LOG.info("Create lports method: %s" % self.install_method)
        install_method = self.install_method

        network_cidr = lswitch.get("cidr", None)
        ip_addrs = None
        if network_cidr:
            end_ip = network_cidr.ip + lport_amount
            if not end_ip in network_cidr:
                message = _("Network %s's size is not big enough for %d lports.")
                raise exceptions.InvalidConfigException(
                            message  % (network_cidr, lport_amount))

            ip_addrs = netaddr.iter_iprange(network_cidr.ip, network_cidr.last)

        ovn_nbctl = self.controller_client("ovn-nbctl")
        ovn_nbctl.set_sandbox("controller-sandbox", install_method)
        ovn_nbctl.enable_batch_mode()

        base_mac = [i[:2] for i in self.task["uuid"].split('-')]
        base_mac[3:] = ['00']*3


        flush_count = batch
        lports = []
        for i in range(lport_amount):
            name = self.generate_random_name()
            lport = ovn_nbctl.lport_add(lswitch["name"], name)

            ip = str(ip_addrs.next()) if ip_addrs else ""
            mac = utils.get_random_mac(base_mac)

            ovn_nbctl.lport_set_addresses(name, [mac, ip])
            ovn_nbctl.lport_set_port_security(name, mac)

            lports.append(lport)

            flush_count -= 1
            if flush_count < 1:
                ovn_nbctl.flush()
                flush_count = batch

        ovn_nbctl.flush()  # ensure all commands be run
        ovn_nbctl.enable_batch_mode(False)
        return lports
示例#6
0
    def _connect_gateway_router(self, router, network, gw_cidr, ext_cidr, sandbox, batch):
        ovn_nbctl = self._get_ovn_controller(self.install_method)
        ovn_nbctl.enable_batch_mode(value=batch)

        base_mac = [i[:2] for i in self.task["uuid"].split('-')]
        base_mac[0] = str(hex(int(base_mac[0], 16) & 254))
        base_mac[3:] = ['00']*3

        # Create a join switch to connect the GW router to the cluster router.
        join_switch_name = "join_" + str(gw_cidr)
        join_switch = ovn_nbctl.lswitch_add(join_switch_name)

        # Create ports between the join switch and the cluster router.
        router_port_join_switch = "rpj-" + str(gw_cidr)
        rp_gw = self._get_gw_ip(gw_cidr, 1)
        router_port_join_switch_ip = '{}/{}'.format(rp_gw, gw_cidr.prefixlen)
        ovn_nbctl.lrouter_port_add(router["name"], router_port_join_switch,
                                   utils.get_random_mac(base_mac),
                                   router_port_join_switch_ip)

        join_switch_router_port = "jrp-" + str(gw_cidr)
        ovn_nbctl.lswitch_port_add(join_switch_name, join_switch_router_port)
        ovn_nbctl.db_set('Logical_Switch_Port', join_switch_router_port,
                         ('options', {"router-port":router_port_join_switch}),
                         ('type', 'router'),
                         ('address', 'router'))

        # Create a gateway router and bind it to the local chassis.
        gw_router_name = "grouter_" + str(gw_cidr)
        gw_router = ovn_nbctl.lrouter_add(gw_router_name)
        ovn_nbctl.db_set('Logical_Router', gw_router_name,
                         ('options', {'chassis': sandbox["host_container"]}))

        # Create ports between the join switch and the gateway router.
        grouter_port_join_switch = "grpj-" + str(gw_cidr)
        gr_gw = self._get_gw_ip(gw_cidr, 2)
        grouter_port_join_switch_ip = '{}/{}'.format(gr_gw, gw_cidr.prefixlen)
        ovn_nbctl.lrouter_port_add(gw_router_name, grouter_port_join_switch,
                                   utils.get_random_mac(base_mac),
                                   grouter_port_join_switch_ip)

        join_switch_gw_router_port = "jrpg-" + str(gw_cidr)
        ovn_nbctl.lswitch_port_add(join_switch_name, join_switch_gw_router_port)
        ovn_nbctl.db_set('Logical_Switch_Port', join_switch_gw_router_port,
                         ('options', {"router-port":grouter_port_join_switch}),
                         ('type', 'router'),
                         ('address', 'router'))

        # Create an external switch connecting the gateway router to the
        # physnet.
        ext_switch_name = "ext_" + str(ext_cidr)
        ext_switch = ovn_nbctl.lswitch_add(ext_switch_name)

        # Create ports between the external switch and the gateway router.
        grouter_port_ext_switch = "grpe-" + str(ext_cidr)
        gw = self._get_gw_ip(ext_cidr, 1)
        gr_def_gw = self._get_gw_ip(ext_cidr, 2)
        grouter_port_ext_switch_ip = '{}/{}'.format(gw, ext_cidr.prefixlen)
        ovn_nbctl.lrouter_port_add(gw_router_name, grouter_port_ext_switch,
                                   utils.get_random_mac(base_mac),
                                   grouter_port_ext_switch_ip)
    
        ext_switch_gw_router_port = "erpg-" + str(ext_cidr)
        ovn_nbctl.lswitch_port_add(ext_switch_name, ext_switch_gw_router_port)
        ovn_nbctl.db_set('Logical_Switch_Port', ext_switch_gw_router_port,
                         ('options', {"router-port":grouter_port_ext_switch}),
                         ('type', 'router'),
                         ('address', 'router'))

        # Store gateway router relevant IPs.
        gw_router['def_gw'] = gr_def_gw
        gw_router['gw'] = gr_gw
        gw_router['rp_gw'] = rp_gw

        ovn_nbctl.flush()
        ovn_nbctl.enable_batch_mode(False)
        return network, router, join_switch, gw_router, ext_switch