@@ -12,7 +12,7 @@ import AssociateModal from 'components/AssociateModal';
12
12
import ErrorDetail from 'components/ErrorDetail' ;
13
13
import AlertModal from 'components/AlertModal' ;
14
14
import useToast , { AlertVariant } from 'hooks/useToast' ;
15
- import { getQSConfig , parseQueryString , mergeParams } from 'util/qs' ;
15
+ import { getQSConfig , parseQueryString } from 'util/qs' ;
16
16
import { useLocation , useParams } from 'react-router-dom' ;
17
17
import useRequest , { useDismissableError } from 'hooks/useRequest' ;
18
18
import DataListToolbar from 'components/DataListToolbar' ;
@@ -106,72 +106,48 @@ function InstancePeerList({ setBreadcrumb }) {
106
106
const { selected, isAllSelected, handleSelect, clearSelected, selectAll } =
107
107
useSelected ( peers ) ;
108
108
109
- const fetchInstancesToAssociate = useCallback (
109
+ const fetchPeersToAssociate = useCallback (
110
110
async ( params ) => {
111
111
const address_list = [ ] ;
112
112
113
- const instances = await InstancesAPI . read (
114
- mergeParams ( params , {
115
- ...{ not__node_type : [ 'control' , 'hybrid' ] } ,
116
- } )
117
- ) ;
118
- const receptors = ( await ReceptorAPI . read ( ) ) . data . results ;
113
+ // do not show this instance or instances that are already peered
114
+ // to this instance (reverse_peers)
115
+ const not_instances = instance . reverse_peers ;
116
+ not_instances . push ( instance . id ) ;
119
117
120
- // get instance ids of the current peered receptor ids
121
- const already_peered_instance_ids = [ ] ;
122
- for ( let h = 0 ; h < instance . peers . length ; h ++ ) {
123
- const matched = receptors . filter ( ( obj ) => obj . id === instance . peers [ h ] ) ;
124
- matched . forEach ( ( element ) => {
125
- already_peered_instance_ids . push ( element . instance ) ;
126
- } ) ;
118
+ params . not__instance = not_instances ;
119
+ params . is_internal = false ;
120
+ // do not show the current peers
121
+ if ( instance . peers . length > 0 ) {
122
+ params . not__id__in = instance . peers . join ( ',' ) ;
127
123
}
128
124
129
- for ( let q = 0 ; q < receptors . length ; q ++ ) {
130
- const receptor = receptors [ q ] ;
131
-
132
- if ( already_peered_instance_ids . includes ( receptor . instance ) ) {
133
- // ignore reverse peers
134
- continue ;
135
- }
125
+ const receptoraddresses = await ReceptorAPI . read ( params ) ;
136
126
137
- if ( instance . peers . includes ( receptor . id ) ) {
138
- // no links to existing links
139
- continue ;
140
- }
141
-
142
- if ( instance . id === receptor . instance ) {
143
- // no links to thy self
144
- continue ;
145
- }
127
+ // retrieve the instances that are associated with those receptor addresses
128
+ const instance_ids = receptoraddresses . data . results . map (
129
+ ( obj ) => obj . instance
130
+ ) ;
131
+ const instance_ids_str = instance_ids . join ( ',' ) ;
132
+ const instances = await InstancesAPI . read ( { id__in : instance_ids_str } ) ;
146
133
147
- if ( instance . managed ) {
148
- // no managed nodes
149
- continue ;
150
- }
134
+ for ( let q = 0 ; q < receptoraddresses . data . results . length ; q ++ ) {
135
+ const receptor = receptoraddresses . data . results [ q ] ;
151
136
152
137
const host = instances . data . results . filter (
153
138
( obj ) => obj . id === receptor . instance
154
139
) [ 0 ] ;
155
140
156
- if ( host === undefined ) {
157
- // no hosts
158
- continue ;
159
- }
160
-
161
- if ( receptor . is_internal ) {
162
- continue ;
163
- }
164
-
165
141
const copy = receptor ;
166
142
copy . hostname = host . hostname ;
167
143
copy . node_type = host . node_type ;
168
144
copy . canonical = copy . canonical . toString ( ) ;
169
145
address_list . push ( copy ) ;
170
146
}
171
147
172
- instances . data . results = address_list ;
148
+ receptoraddresses . data . results = address_list ;
173
149
174
- return instances ;
150
+ return receptoraddresses ;
175
151
} ,
176
152
[ instance ]
177
153
) ;
@@ -191,7 +167,7 @@ function InstancePeerList({ setBreadcrumb }) {
191
167
fetchPeers ( ) ;
192
168
addToast ( {
193
169
id : instancesPeerToAssociate ,
194
- title : t `Please be sure to run the install bundle for the selected instance(s) again in order to see changes take effect.` ,
170
+ title : t `Please be sure to run the install bundle for ${ instance . hostname } again in order to see changes take effect.` ,
195
171
variant : AlertVariant . success ,
196
172
hasTimeout : true ,
197
173
} ) ;
@@ -315,13 +291,13 @@ function InstancePeerList({ setBreadcrumb }) {
315
291
{ isModalOpen && (
316
292
< AssociateModal
317
293
header = { t `Instances` }
318
- fetchRequest = { fetchInstancesToAssociate }
294
+ fetchRequest = { fetchPeersToAssociate }
319
295
isModalOpen = { isModalOpen }
320
296
onAssociate = { handlePeerAssociate }
321
297
onClose = { ( ) => setIsModalOpen ( false ) }
322
298
title = { t `Select Peer Addresses` }
323
299
optionsRequest = { readInstancesOptions }
324
- displayKey = "hostname "
300
+ displayKey = "address "
325
301
columns = { [
326
302
{ key : 'hostname' , name : t `Name` } ,
327
303
{ key : 'address' , name : t `Address` } ,
0 commit comments