def update(cls, cluster, network_configuration): from nailgun.network.neutron import NeutronManager network_manager = NeutronManager() if 'networks' in network_configuration: for ng in network_configuration['networks']: if ng['id'] == network_manager.get_admin_network_group_id(): continue ng_db = db().query(NetworkGroup).get(ng['id']) for key, value in ng.iteritems(): if key == "ip_ranges": cls._set_ip_ranges(ng['id'], value) else: if key == 'cidr' and \ not ng['name'] in ('private',): network_manager.update_ranges_from_cidr( ng_db, value) setattr(ng_db, key, value) if ng['name'] != 'private': network_manager.create_networks(ng_db) ng_db.cluster.add_pending_changes('networks') if 'neutron_parameters' in network_configuration: for key, value in network_configuration['neutron_parameters'] \ .items(): setattr(cluster.neutron_config, key, value) db().add(cluster.neutron_config) db().commit()
def verify_data_correctness(cls, node): db_node = db().query(Node).filter_by(id=node['id']).first() if not db_node: raise errors.InvalidData("There is no node with ID '%d' in DB" % node['id'], log_message=True) interfaces = node['interfaces'] db_interfaces = db_node.interfaces if len(interfaces) != len(db_interfaces): raise errors.InvalidData( "Node '%d' has different amount of interfaces" % node['id'], log_message=True) # FIXIT: we should use not all networks but appropriate for this # node only. db_network_groups = db().query(NetworkGroup).filter_by( cluster_id=db_node.cluster_id).all() if not db_network_groups: raise errors.InvalidData("There are no networks related to" " node '%d' in DB" % node['id'], log_message=True) network_group_ids = set([ng.id for ng in db_network_groups]) if db_node.cluster and db_node.cluster.net_provider == 'neutron': net_manager = NeutronManager() else: net_manager = NetworkManager() admin_ng_id = net_manager.get_admin_network_group_id() for iface in interfaces: db_iface = filter(lambda i: i.id == iface['id'], db_interfaces) if not db_iface: raise errors.InvalidData("There is no interface with ID '%d'" " for node '%d' in DB" % (iface['id'], node['id']), log_message=True) db_iface = db_iface[0] for net in iface['assigned_networks']: if net['id'] not in network_group_ids and not \ net['id'] == admin_ng_id: raise errors.InvalidData( "Node '%d' shouldn't be connected to" " network with ID '%d'" % (node['id'], net['id']), log_message=True) elif net['id'] != admin_ng_id: network_group_ids.remove(net['id']) # Check if there are unassigned networks for this node. if network_group_ids: raise errors.InvalidData( "Too few networks to assign to node '%d'" % node['id'], log_message=True)
def update(cls, cluster, network_configuration): from nailgun.network.neutron import NeutronManager network_manager = NeutronManager() if 'networks' in network_configuration: for ng in network_configuration['networks']: if ng['id'] == network_manager.get_admin_network_group_id(): continue ng_db = db().query(NetworkGroup).get(ng['id']) for key, value in ng.iteritems(): if key == "ip_ranges": cls._set_ip_ranges(ng['id'], value) else: if key == 'cidr' and \ ng['name'] not in ('private', 'public'): network_manager.update_range_mask_from_cidr( ng_db, value) setattr(ng_db, key, value) if ng['name'] == 'public': cls.update_cidr_from_gw_mask(ng_db, ng) #TODO(NAME) get rid of unmanaged parameters in request if 'neutron_parameters' in network_configuration: pre_nets = network_configuration[ 'neutron_parameters']['predefined_networks'] pre_nets['net04_ext']['L3']['gateway'] = ng['gateway'] if ng['name'] != 'private': network_manager.create_networks(ng_db) ng_db.cluster.add_pending_changes('networks') if 'neutron_parameters' in network_configuration: for key, value in network_configuration['neutron_parameters'] \ .items(): setattr(cluster.neutron_config, key, value) db().add(cluster.neutron_config) db().commit()
def verify_data_correctness(cls, node): db_node = db().query(Node).filter_by(id=node['id']).first() if not db_node: raise errors.InvalidData( "There is no node with ID '%d' in DB" % node['id'], log_message=True ) interfaces = node['interfaces'] db_interfaces = db_node.interfaces if len(interfaces) != len(db_interfaces): raise errors.InvalidData( "Node '%d' has different amount of interfaces" % node['id'], log_message=True ) # FIXIT: we should use not all networks but appropriate for this # node only. db_network_groups = db().query(NetworkGroup).filter_by( cluster_id=db_node.cluster_id ).all() if not db_network_groups: raise errors.InvalidData( "There are no networks related to" " node '%d' in DB" % node['id'], log_message=True ) network_group_ids = set([ng.id for ng in db_network_groups]) if db_node.cluster and db_node.cluster.net_provider == 'neutron': net_manager = NeutronManager() else: net_manager = NetworkManager() admin_ng_id = net_manager.get_admin_network_group_id() for iface in interfaces: db_iface = filter( lambda i: i.id == iface['id'], db_interfaces ) if not db_iface: raise errors.InvalidData( "There is no interface with ID '%d'" " for node '%d' in DB" % (iface['id'], node['id']), log_message=True ) db_iface = db_iface[0] for net in iface['assigned_networks']: if net['id'] not in network_group_ids and not \ net['id'] == admin_ng_id: raise errors.InvalidData( "Node '%d' shouldn't be connected to" " network with ID '%d'" % (node['id'], net['id']), log_message=True ) elif net['id'] != admin_ng_id: network_group_ids.remove(net['id']) # Check if there are unassigned networks for this node. if network_group_ids: raise errors.InvalidData( "Too few networks to assign to node '%d'" % node['id'], log_message=True )