def _create_members(self, member_list, grid_id): for member in member_list: infoblox_db.add_member(self.ctx.session, member['member_id'], grid_id, member['member_name'], member['member_ip'], member['member_ipv6'], member['member_type'], member['member_status'], None, None, None, None, member['member_ip'])
def _create_simple_members(self): for i in range(1, 6): member_id = "mid%d" % i member_name = 'member%d.test.com' % i member_ipv4 = "10.10.1.%d" % i member_type = "GM" if i == 1 else "CPM" infoblox_db.add_member(self.ctx.session, member_id, self.grid_id, member_name, member_ipv4, None, member_type, 'ON', None, None, None, None, member_ipv4)
def sync_members(self): """Synchronizes grid members. Members in the active grid are discovered from NIOS backend and grid members are in sync in neutron db. The members who are no longer in used are set to 'OFF' status. """ session = self._context.session grid_id = self._grid_config.grid_id db_grids = dbi.get_grids(session) db_grid = utils.find_one_in_list('grid_id', grid_id, db_grids) gm_member_id = db_grid.gm_id db_members = dbi.get_members(session, grid_id=grid_id) gm_member = utils.find_one_in_list('member_id', gm_member_id, db_members) discovered_members = self._discover_members() if not discovered_members: return dns_member_settings = self._discover_dns_settings() dhcp_member_settings = self._discover_dhcp_settings() discovered_licenses = self._discover_member_licenses() discovered_member_ids = [] for member in discovered_members: member_name = member['host_name'] member_ip, member_ipv6 = self._get_lan1_ips(member) member_wapi = member_ip if member_ip else member_ipv6 member_hwid = member['node_info'][0].get('hwid') member_status = self._get_member_status( member['node_info'][0]['service_status']) member_type = self._get_member_type(discovered_licenses, member_name, member_hwid) require_db_update = False if member_type == const.MEMBER_TYPE_GRID_MASTER: if gm_member: require_db_update = True member_id = gm_member_id member_wapi = self._grid_config.grid_master_host else: # no need to process 'Is Cloud Member' flag for non GM members ea_is_cloud_member = utils.get_ea_value( const.EA_IS_CLOUD_MEMBER, member) is_cloud_member = (types.Boolean()(ea_is_cloud_member) if ea_is_cloud_member else False) if not is_cloud_member: continue db_member = utils.find_one_in_list('member_name', member_name, db_members) if db_member: require_db_update = True member_id = db_member.member_id else: member_id = utils.get_hash(str(grid_id) + member_name) member_dhcp_ip, member_dhcp_ipv6 = self._get_dhcp_ips( member, dhcp_member_settings) member_dns_ip, member_dns_ipv6 = self._get_dns_ips( member, dns_member_settings) if require_db_update: dbi.update_member(session, member_id, grid_id, member_name, member_ip, member_ipv6, member_type, member_status, member_dhcp_ip, member_dhcp_ipv6, member_dns_ip, member_dns_ipv6, member_wapi) else: dbi.add_member(session, member_id, grid_id, member_name, member_ip, member_ipv6, member_type, member_status, member_dhcp_ip, member_dhcp_ipv6, member_dns_ip, member_dns_ipv6, member_wapi) discovered_member_ids.append(member_id) # deleting members are delicate operation so we won't allow it # but we will set member status to OFF to unused members. db_member_ids = utils.get_values_from_records('member_id', db_members) persisted_set = set(db_member_ids) discovered_set = set(discovered_member_ids) disable_set = persisted_set.difference(discovered_set) disabling_member_ids = list(disable_set) for member_id in disabling_member_ids: dbi.update_member(session, member_id, grid_id, member_status=const.MEMBER_STATUS_OFF) session.flush()