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()
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()
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
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()
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
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