def handler(): node = models.Node(mac='60:a4:4c:35:28:95', timestamp=datetime.datetime.now()) node.attributes = models.IPAddr() db.add(node) db.flush()
def assign_ips_in_node_group(cls, net_id, net_name, node_ids, ip_ranges): """Assigns IP addresses for nodes in given network.""" ips_by_node_id = db().query( models.IPAddr.ip_addr, models.IPAddr.node).filter_by(network=net_id) nodes_dont_need_ip = set() ips_in_use = set() for ip_str, node_id in ips_by_node_id: ip_addr = netaddr.IPAddress(ip_str) for ip_range in ip_ranges: if ip_addr in ip_range: nodes_dont_need_ip.add(node_id) ips_in_use.add(ip_str) nodes_need_ip = node_ids - nodes_dont_need_ip free_ips = cls.get_free_ips_from_ranges(net_name, ip_ranges, ips_in_use, len(nodes_need_ip)) for ip, node_id in zip(free_ips, nodes_need_ip): logger.info("Assigning IP for node '{0}' in network '{1}'".format( node_id, net_name)) ip_db = models.IPAddr(node=node_id, ip_addr=ip, network=net_id) db().add(ip_db) db().flush()
def test_delete_network_group_cleanup_ip_addrs(self): ng_id = self.env._create_network_group().json["id"] node = self.env.create_node(api=False) ip_address = [] for ip_addr in ('10.3.0.2', '10.3.0.3'): ip_addr_data = {'network': ng_id, 'node': node.id, 'ip_addr': ip_addr} ip_address.append(ip_addr_data) self.db.add_all([models.IPAddr(**ips) for ips in ip_address]) self.db.flush() self.app.delete( reverse( 'NetworkGroupHandler', kwargs={'obj_id': ng_id} ), headers=self.default_headers, ) ips_db = self.db.query(models.IPAddr)\ .filter_by(network=ng_id)\ .all() self.assertFalse(ips_db)
def copy_vips(orig_cluster, new_cluster): orig_vips = {} for ng in orig_cluster.network_groups: vips = db.query(models.IPAddr).filter( models.IPAddr.network == ng.id, models.IPAddr.node.is_(None), models.IPAddr.vip_type.isnot(None), ).all() orig_vips[ng.name] = list(vips) new_vips = [] for ng in new_cluster.network_groups: orig_ng_vips = orig_vips.get(ng.name) for vip in orig_ng_vips: ip_addr = models.IPAddr( network=ng.id, ip_addr=vip.ip_addr, vip_type=vip.vip_type, ) new_vips.append(ip_addr) db.add_all(new_vips) db.commit()
def handler(): ip_addr = models.IPAddr() ip_addr.network_data = models.IPAddr() db.add(ip_addr) db.flush()