@@ -274,27 +274,27 @@ func (a *georepAction) String() string {
274274}
275275
276276func handleGeorepAction (args []string , action georepAction ) {
277- masterdata , remotedata , err := getVolIDs (args )
277+ masterVolID , remoteVolID , err := getVolIDs (args )
278278 if err != nil {
279279 failure (fmt .Sprintf ("Geo-replication %s failed.\n " , action .String ()), err , 1 )
280280 }
281281 switch action {
282282 case georepStart :
283- _ , err = client .GeorepStart (masterdata . id , remotedata . id , flagGeorepCmdForce )
283+ _ , err = client .GeorepStart (masterVolID , remoteVolID , flagGeorepCmdForce )
284284 case georepStop :
285- _ , err = client .GeorepStop (masterdata . id , remotedata . id , flagGeorepCmdForce )
285+ _ , err = client .GeorepStop (masterVolID , remoteVolID , flagGeorepCmdForce )
286286 case georepPause :
287- _ , err = client .GeorepPause (masterdata . id , remotedata . id , flagGeorepCmdForce )
287+ _ , err = client .GeorepPause (masterVolID , remoteVolID , flagGeorepCmdForce )
288288 case georepResume :
289- _ , err = client .GeorepResume (masterdata . id , remotedata . id , flagGeorepCmdForce )
289+ _ , err = client .GeorepResume (masterVolID , remoteVolID , flagGeorepCmdForce )
290290 case georepDelete :
291- err = client .GeorepDelete (masterdata . id , remotedata . id , flagGeorepCmdForce )
291+ err = client .GeorepDelete (masterVolID , remoteVolID , flagGeorepCmdForce )
292292 }
293293
294294 if err != nil {
295295 if verbose {
296296 log .WithFields (log.Fields {
297- "volume" : masterdata . volname ,
297+ "volume" : args [ 0 ] ,
298298 "error" : err .Error (),
299299 }).Error ("geo-replication" , action .String (), "failed" )
300300 }
@@ -363,33 +363,49 @@ func getRemoteClient(host string) (string, *restclient.Client, error) {
363363 return clienturl , restclient .New (clienturl , "" , "" , "" , true ), nil
364364}
365365
366- func getVolIDs (pargs []string ) (* volumeDetails , * volumeDetails , error ) {
367- var masterdata * volumeDetails
368- var remotedata * volumeDetails
369- var err error
366+ func getVolIDs (pargs []string ) (string , string , error ) {
367+ var (
368+ masterVolID string
369+ remoteVolID string
370+ )
371+
372+ allSessions , err := client .GeorepStatus ("" , "" )
373+ if err != nil {
374+ failure (errGeorepStatusCommandFailed , err , 1 )
375+ }
370376
371377 if len (pargs ) >= 1 {
372- masterdata , err = getVolumeDetails (pargs [0 ], nil )
373- if err != nil {
374- return nil , nil , err
378+ for _ , s := range allSessions {
379+ if s .MasterVol == pargs [0 ] {
380+ masterVolID = s .MasterID .String ()
381+ }
382+ }
383+ if masterVolID == "" {
384+ return "" , "" , errors .New ("failed to get master volume info" )
375385 }
376386 }
377387
378388 if len (pargs ) >= 2 {
379389 _ , remotehost , remotevol , err := parseRemoteData (pargs [1 ])
380390 if err != nil {
381- return nil , nil , err
391+ return "" , "" , err
382392 }
383- _ , rclient , err := getRemoteClient (remotehost )
384- if err != nil {
385- return nil , nil , err
393+
394+ for _ , s := range allSessions {
395+ if s .RemoteVol == remotevol {
396+
397+ for _ , host := range s .RemoteHosts {
398+ if host .Hostname == remotehost {
399+ remoteVolID = s .RemoteID .String ()
400+ }
401+ }
402+ }
386403 }
387- remotedata , err = getVolumeDetails (remotevol , rclient )
388- if err != nil {
389- return nil , nil , err
404+ if remoteVolID == "" {
405+ return "" , "" , errors .New ("failed to get remote volume info" )
390406 }
391407 }
392- return masterdata , remotedata , nil
408+ return masterVolID , remoteVolID , nil
393409}
394410
395411var georepStatusCmd = & cobra.Command {
@@ -398,23 +414,23 @@ var georepStatusCmd = &cobra.Command{
398414 Args : cobra .RangeArgs (0 , 2 ),
399415 Run : func (cmd * cobra.Command , args []string ) {
400416 var err error
401- masterdata , remotedata , err := getVolIDs (args )
417+ masterVolID , remoteVolID , err := getVolIDs (args )
402418 if err != nil {
403419 failure (errGeorepStatusCommandFailed , err , 1 )
404420 }
405421
406422 var sessions []georepapi.GeorepSession
407- // If mastervolid or remotevolid is empty then get status of all and then filter
408- if masterdata == nil || remotedata == nil {
423+ // If masterVolID or remoteVolID is empty then get status of all and then filter
424+ if masterVolID == "" || remoteVolID == "" {
409425 allSessions , err := client .GeorepStatus ("" , "" )
410426 if err != nil {
411427 failure (errGeorepStatusCommandFailed , err , 1 )
412428 }
413429 for _ , s := range allSessions {
414- if masterdata != nil && s .MasterID .String () != masterdata . id {
430+ if masterVolID != "" && s .MasterID .String () != masterVolID {
415431 continue
416432 }
417- if remotedata != nil && s .RemoteID .String () != remotedata . id {
433+ if remoteVolID != "" && s .RemoteID .String () != remoteVolID {
418434 continue
419435 }
420436 sessionDetail , err := client .GeorepStatus (s .MasterID .String (), s .RemoteID .String ())
@@ -424,7 +440,7 @@ var georepStatusCmd = &cobra.Command{
424440 sessions = append (sessions , sessionDetail [0 ])
425441 }
426442 } else {
427- sessions , err = client .GeorepStatus (masterdata . id , remotedata . id )
443+ sessions , err = client .GeorepStatus (masterVolID , remoteVolID )
428444 if err != nil {
429445 failure (errGeorepStatusCommandFailed , err , 1 )
430446 }
@@ -469,12 +485,12 @@ var georepGetCmd = &cobra.Command{
469485 Run : func (cmd * cobra.Command , args []string ) {
470486 var err error
471487
472- masterdata , remotedata , err := getVolIDs (args )
488+ masterVolID , remoteVolID , err := getVolIDs (args )
473489 if err != nil {
474490 failure ("Error getting Volume IDs" , err , 1 )
475491 }
476492
477- opts , err := client .GeorepGet (masterdata . id , remotedata . id )
493+ opts , err := client .GeorepGet (masterVolID , remoteVolID )
478494 if err != nil {
479495 failure ("Error getting Options" , err , 1 )
480496 }
@@ -540,15 +556,15 @@ var georepSetCmd = &cobra.Command{
540556 Args : cobra .ExactArgs (4 ),
541557 Run : func (cmd * cobra.Command , args []string ) {
542558 var err error
543- masterdata , remotedata , err := getVolIDs (args )
559+ masterVolID , remoteVolID , err := getVolIDs (args )
544560 if err != nil {
545561 failure ("Error getting Volume IDs" , err , 1 )
546562 }
547563
548564 opts := make (map [string ]string )
549565 opts [args [2 ]] = args [3 ]
550566
551- err = client .GeorepSet (masterdata . id , remotedata . id , opts )
567+ err = client .GeorepSet (masterVolID , remoteVolID , opts )
552568 if err != nil {
553569 failure ("Geo-replication session config set failed" , err , 1 )
554570 }
@@ -562,12 +578,12 @@ var georepResetCmd = &cobra.Command{
562578 Args : cobra .MinimumNArgs (3 ),
563579 Run : func (cmd * cobra.Command , args []string ) {
564580 var err error
565- masterdata , remotedata , err := getVolIDs (args )
581+ masterVolID , remoteVolID , err := getVolIDs (args )
566582 if err != nil {
567583 failure (err .Error (), err , 1 )
568584 }
569585
570- err = client .GeorepReset (masterdata . id , remotedata . id , args [2 :])
586+ err = client .GeorepReset (masterVolID , remoteVolID , args [2 :])
571587 if err != nil {
572588 failure ("Geo-replication session config reset failed" , err , 1 )
573589 }
0 commit comments